Static关键字以及类的加载顺序

Static关键字的作用

              1.静态方法

              2.静态变量

              3.静态代码块

             注意:静态的方法不能访问非静态的成员变量和非静态的方法

                      但是,非静态的可以访问静态的成员变量和方法

类的加载顺序

              1.加载静态成员和代码块

                        ①先递归的加载父类中的静态成员/代码块(Object的最优先加载)

                        ②再依次加载本类的静态成员和代码块,按照书写的顺序加载

              2.非静态的成员/代码块

                        ①先递归的加载父类中的非静态的成员/代码块(Object的最优先加载)

                        ②再依次加载本类的非静态成员/代码块,按照书写顺序加载

              3.调用构造方法

                        ①先递归的调用父类的构造方法,默认调用空参的构造函数,也可以在第一行调用其他的构造函数

                        ②再调用本类的空参构造方法,在构造方法第一行可以调用其他的有参构造方法.

public class A {

	static {
		System.out.println("我是A类的静态代码块");
	}
	
	public static String str="我是A类的静态成员";
	
	static {
		System.out.println(str);
	}
	
	static void aTest() {
		System.out.println("我是A类的静态方法");
	}
	
	
	public A() {
		
		System.out.println("我是A类的无参构造函数");
		new A(200);
	}
	
	public A(int a) {
		System.out.println(a+"我是A类的有参构造函数");
	}
}

public class B extends A{

	static {
		System.out.println("我是B类的静态代码块");
	}
	
	public static String str="我是B类的静态成员";
	
	static {
		System.out.println(str);
	}
	
	static void bTest() {
		System.out.println("我是B类的静态方法");
	}
	
	public B() {
		System.out.println("我是B类的无参构造方法");
	}
	
	public B(int a) {
		System.out.println(a+"我是B类的有参构造函数");
	}
}

public class ABTest {

	public static void main(String[] args) {
		new B(100);
		  A.aTest();//父类A只能调用自己的方法
		  B.aTest(); //子类B既可以调用父类A的静态方法还可以调用自己的静态方法
		  B.bTest();
	}
}

              

 

下面来分析一下例子的执行过程:

                                  1.在执行new B(100)之前干了这两件事件事;

                                                ① 加载A类中的静态代码块和静态成员变量,

                                                                 注意:按照书写代码的顺序加载的

                                                ② 加载B类中的静态代码块和静态成员变量

                                                                注意:先加载父类A的再加载子类B的

                                  2.当执行new B(100)的时候干了这两件事情:

                                                ①先调用A类的无参构造

                                                                注意:在无参构造方法里面可以调用有参的构造方法

                                                ②再调用B类的有参构造

               注意:静态方法只有在被调用的时候才会被加载

                       子类可以调用父类的静态方法

                        父类不能调用子类的静态方法

                                                             

                                                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值