Java中的静态方法和实例方法是两种不同的方法,它们有着不同的特性和用途。
首先,静态方法是一种特殊的方法,它可以在不创建对象的情况下被调用。它们通常用于定义一些工具函数或者提供一些公共服务,而无需创建对象。例如:
public static void printHelloWorld() { System.out.println("Hello World!"); }
上面这个函数就是一个静态函数,可以直接使用类名来调用:MyClass.printHelloWorld()。
而实例方法则是普通的成员函数,必须要创建对象之后才能够使用。它们通常用于封装对象内部的状态信息或者行为表现。例如:
public void setName(String name) { this.name = name; // this 是当前对象的引用 }
上面这个函数就是一个实例函数,必须要创建对象之后才能够使用:MyObject obj = new MyObject(); obj.setName("John");
类可以有两种类型的方法:实例方法和类方法。实例方法和类方法也分别称为非静态方法和静态方法。
实例方法用于实现类的实例的行为。实例方法只能在类的实例的上下文中调用。
类方法用于实现类本身的行为。类方法总是在类的上下文中执行。
静态修饰符用于定义类方法。方法声明中缺少静态修饰符,使得该方法成为一个实例方法。
以下是声明一些静态和非静态方法的示例:
// A static or class method static void aClassMethod() { } // A non-static or instance method void anInstanceMethod() { }
当调用类的静态方法时,该类的实例可能不存在。因此,不允许从静态方法内部引用实例变量。
类定义一加载到内存中,类变量就存在。类定义在创建类的第一个实例之前加载到内存中。
类方法或静态方法只能引用类的变量或类的静态变量。实例方法或非静态方法可以引用类变量以及类的实例变量。
以下代码演示了在方法中可访问的类字段的类型。
public class Main { static int m = 100; // A static variable int n = 200; // An instance variable // Declare a static method static void printM() { System.out.println("printM() - m = " + m); } // Declare an instance method void printMN() { System.out.println("printMN() - m = " + m); System.out.println("printMN() - n = " + n); } }
在方法的主体中执行代码称为调用(或调用)方法。
实例方法和类方法以不同方式调用。
使用点表示法在类的实例上调用实例方法。
<instance reference>.<instance method name>(<actual parameters>)
在调用该类的实例方法之前,我们必须引用一个类的实例。
以下代码显示如何调用Main类的printMN()实例方法:
// Create an instance of Main class and // store its reference in mt reference variable Main mt = new Main(); // Invoke the printMN() instance method using the mt reference variable mt.printMN();
要调用类方法,请使用带有名称的点表示法。
下面的代码调用Main类的printM()类方法:
// Invoke the printM() class method Main.printM();
属于一个类的属性也属于该类的所有实例。我们还可以使用该类的实例的引用来调用类方法。
Main mt = new Main(); mt.printM(); // Call the class method using an instance mt
使用类名调用类方法比使用实例引用更直观。
Java面向对象设计 - Java初始化块实例初始化块实例初始化块用于初始化类的对象。一个实例初始化程序只是一个类的代码块,但在任...
Java面向对象设计 -Java Object.Equals方法以下代码显示如何实现equals()和hashCode()方法class Point {private int x;private i...
Java面向对象设计 -Java哈希码Object的哈希码哈希码是一个整数值。计算整数的算法称为散列函数。Java使用散列码从基于散列的集合...
Java面向对象设计 -Java静态内部类静态成员类不是内部类在另一个类的主体中定义的成员类可以声明为静态。例子以下代码声明了顶级...