static修饰的成员数据叫作静态数据成员,简称类成员。同理,static修饰的成员方法称为静态方法,简称类方法。类方法和类成员 一样,都可由类直接调用。
static修饰成员方法
语法格式
static 方法返回值类型 方法名(形参列表) {
语句体;
[return 表达式;]
}
在方法返回值类型前使用static,表示该方法是静态方法
调用static方法
语法格式
类名.方法名(实参列表);
静态方法和非静态方法
类体中的成员方法有对象方法(非静态方法)和类方法(静态方法),数据成员有对象成员(非静态数据成员)和类成员(静态数据成员)。通过前面的学习我们知道对象方法能调用对象成员,那么类方法能否调用对象成员呢?
class Student {
private String school;//私有类成员
//构造方法
public static void setSchool (String school) {
this.school = school;
}
}
对以上代码进行分析,在时间角度上,JVM加载完Student类后就存在第四行的类方法 setSchoo(),而第二行的私有对象成员需要实例化对象Student后才会存在,JVM 先把类加载到内存,利用new调用构造方法时实例化对象。因此类方法总是存在,而对象方法只有在实例化对象后才存在,也就是说对象成员不一定存在。所以该代码的第五行(类方法)调用第二行的对象成员将出现编译错误。
上图显示了类体中成员之间的调用关系
否定性访问是静态成员不能访问非静态成员,其他成员之间都能访问,例如,非静态成员能访问静态成员,静态成员之间、非静态成员之间都能互相访问。
案例展示
package jsu.luca.com;
class MyClass {
//静态私有成员
private static String staticInfo = "厚德载物、自强不息";
//非静态私有成员
private String commonInfo = "艰苦奋斗!";
//静态成员方法
public static void staticMethod () {
//静态成员方法可以访问静态数据成员
System.out.println(MyClass.staticInfo);
//静态成员方法不能访问非静态数据成员
//System.out.println(this.commInfo);//出行错误提示
}
//非静态成员方法
public void commonMethod (){
//非静态成员方法可以访问静态数据成员
System.out.println(MyClass.staticInfo);
//非静态成员方法可以访问非静态数据成员
System.out.println(this.commonInfo);//没有错误提示
}
//静态成员方法
public static void staticMenthod_2 (){
MyClass.staticMethod();//能访问静态成员方法
//this.commonMethod();//出行错误提示,不能访问非静态成员方法
}
//非静态成员方法
public void commonMenthod_2 (){
MyClass.staticMethod();//能访问静态成员方法
this.commonMethod();//能访问非静态成员方法
}
}
该代码演示了静态成员和非静态成员之间的访问关系
感谢阅读,欢迎指正!