Java static 静态属性和方法
1、静态属性和方法从属于类,不从属与对象
2、不能在静态方法中调用非静态变量和非静态方法
3、可以在普通方法中调用静态属性和方法
我们以下面的这个简单的Student类为例
public class Student {
//普通属性
private String name;
//静态属性又称类属性
private static String id;
public Student(String name){
this.name = name;
}
//静态方法又称类方法
public static void study() {
System.out.println(id);
}
//普通方法
public void doHomework() {
}
}
那么我们来对下面这个程序来做一下内存分析
Student s1 = new Student("张三");
我们需要注意到的是在通过类模板构建对象的时候,对象中是不包含static静态属性和方法的信息的,很简单,因为static属性和方法从属于类,可以通过类名.例如Student.study()来直接调用
Student.id
以上代码的内存分析就是直接在Student类模板中的static属性和变量专区查找指定的静态属性和方法,而无需通过s1对象
静态方法不能调用非静态属性或非静态方法
例如以下的代码是不合法的
public static void study() {
System.out.println(name);//这是不合法的,静态方法不能调用非静态属性
}
由于name是普通方法,外界要操纵普通属性必须通过对象,可以简单的理解为普通属性从属于对象,由于static方法从属于类,所以在静态方法中无法获取普通属性和普通方法
非静态方法可以调用静态属性或静态方法
例如以上面的例子为例,一下的代码是合理的
public void doHomework() {
study();
System.out.println(id);
}
原因在于,普通方法从属于对象,可以通过这个对象确定方法区的类模板,知道了这个类模板,作为这个类模板中的一部分,静态属性和静态方法自然而然就可以访问到