1. class MyClass {
2. static String myName = "SCJP";
3.
4. MyClass getMyClass() {
5. System.out.println(myName);
6. return null;
7. }
8.
9. public static void main(String[] args) {
10. System.out.println(new MyClass().getMyClass().myName);
11. }
12. }
大家认为这个程序应该输出什么东西呢?
看过程序后给我的第一个印象是, 第6行和第10行有些蹊跷.
可能有的朋友会说用null对象来调用类中的成员这肯定是要抛出异常的呀!!! 但事实上并不是这样, 这个程序没有任何的错误, 而且会正确地输出两个字符串"SCJP". 首先, 变量myName是一个static的成员变量, 也就是说这个变量是类属变量, 它与对象没有任何关系. 用一个对象来调用static成员时用的是对象的类型来调用的, 跟对象本身并没有什么关系, 所以一个引用即使它的值为null, 但只要它属于那个类型, 那么它就可以正确访问类中的static成员.