请给出下列程序的运行结果,并分析原因:
class Base{ static int a=1; static{ System.out.println("init Base"); } static void method(){ System.out.println("method of Base"); }}class Sub extends Base{ static { System.out.println("init Sub"); }}public class Sample{ public static void main(String[] args){ System.out.println("a="+Sub.a); Sub.method(); }}
问题分析:
只有当程序访问的静态变量或静态方法确实在当前类或接口中定义时,才可以看作是对类的或接口的主动使用。由于Sample类的main()方法中访问“Sub.a”和“ Sub.method()”都是在基类中定义的,所以Java虚拟机仅仅初始化基类,而没有初始化派生类。因此结果应该为:
init Base
a=1
method of Base