被static修饰的属性和方法:
1.在没有歧义 的情况下,类名可以直接被省略
public class Test{
public static int num;
public static void hello(){
System.out.println("hello");
}
public static void main(String[] args){
Test a = new Test();
System.out.println(num);
//等价于System.out.println(Test.num);
a.hello();
//等价于Teat.hello();
}
}
2.被static修饰的静态属性和静态方法
用类名去调,和引用是否指向null无关
例如定义一个类如下:
public class Test{
public static int num;
public static void hello(){
System.out.println("hello");
}
}
测试代码如下:
public class test {
public static void main(String[] args){
Test a = null;
System.out.println(a.num);
//等价于System.out.println(Test.num);
a.hello();//等价于Test.hello();
}
}
即便a指向空,但由于属性/方法被static修饰,等价于(类名.方法)/(类名.属性),只要类存在,静态方法和静态属性就会被加载。不会报NPE