继续上文的内容
静态关键字static修饰成员方法
Java中,方法可以用static关键字修饰
【非static方法】归属于对象,要先创建对象,而后才可以使用非static方法;
【static方法】归属于类,不需要创建对象就可以被调用。
无论成员变量还是成员方法,经static修饰后,推荐以【类.】的方法进行调用。即便写【对象.】的格式调用,在编译时仍然会被自动改成【类.】的格式。
即推荐以下格式调用:
用【类名称.静态变量】的格式调用静态变量
用【类名称.静态方法】的格式调用静态方法()
例子
类:
public class ClassDemo {
// 没有static的成员方法,必须创建对象,然后才能用
public void method() {
System.out.println("这是个普通的成员方法");
}
// 有static的成员方法,可以直接用
public static void methodStatic() {
System.out.println("这是个静态方法");
}
}
Main:
public class StaticMethod {
public static void main(String[] args) {
// 第一种情况,非静态方法,要创建对象再用方法
ClassDemo obj = new ClassDemo(); // 先创建
obj.method(); // 然后使用类中方法
// 第二种情况,静态方法,可以直接用
ClassDemo.methodStatic(); // 不需创建,用【类.方法】直接使用
// 第三种情况,类自己的方法,直接写方法就可以用,编译后会自动加上
ownMethod("这是写在本类中的方法"); // 用自己家的方法,类也不用写
StaticMethod.ownMethod("还是自己的方法"); // 当然写上也行,写了也白写
}
public static void ownMethod(String str) {
System.out.println(str);
}
}
/*
这是个普通的成员方法
这是个静态方法
这是写在本类中的方法
还是自己的方法
*/
补充:静态不能访问非静态
- 静态不能访问非静态(说明:静态内容作为“死"内容,先明确地出现在内存中。它不知道后来发生的事,所以不能和未知的东西挂钩(即非静态的内容));
- 静态方法不能用this,this指代当前对象,而静态的方法和对象无关。
如下例:
public class ClassDemo {
int aaa; // 非静态的
static int aaaStatic; // 静态的
// 没有static的成员方法,必须创建对象,然后才能用
public void method() {
System.out.println(aaa); // 非静态用非静态,正确
System.out.println(aaaStatic); // 非静态用静态,正确
System.out.println("这是个普通的成员方法");
}
// 有static的成员方法,可以直接用
public static void methodStatic() {
//System.out.println(aaa); // 报错!!!静态用非静态
System.out.println(aaaStatic); // 静态用静态,正确
System.out.println("这是个静态方法");
//System.out.println(this); // 报错!!!
}
}