当前位置: 移动技术网 > IT编程>开发语言>Java > Java学习20181206

Java学习20181206

2018年12月07日  | 移动技术网IT编程  | 我要评论

总结前一天学习,参考原文
1: 对static有了进一步的认识
    这个地方重点是初始化各个变量顺序,以及构造函数。
    对一个类,加载class,首先加载static变量或代码块 (若有父类,会先加载父类中的static变量),创建实例时先创建实例变量,然后是构造函数(若有父类,先初始化父类中的实例变量)。

    因为static变量是类变量,和对象无关。而非static函数是在对象初始化后才可以用,所以非static函数不能调用static变量。


 1 package lesson.review;
 2 
 3 public class test1 {
 4     
 5     static{
 6         system.out.println("test1 static");
 7     }
 8     person person=new person("test1");
 9     test1(){
10         system.out.println("test1 construct");
11 
12     }
13 
14     public static void main(string[] args) {
15         new myclass();
16     }    
17 }
18 
19 class person{
20     static {
21         system.out.println("person static");
22     }
23     
24     public person(string str) {
25         system.out.println("person construct is from "+str);
26 
27     }
28     
29 }
30 
31 class myclass extends test1{
32     person person = new person("myclass");
33     
34     static{
35         system.out.println("myclass static");
36     }
37     
38     myclass(){
39         system.out.println("myclass construct");
40     }
41 }

 



运行结果:

test1 static
myclass static
person static
person construct is from test1
test1 construct
person construct is from myclass
myclass construct

下面分析下代码执行过程:首先加载test1类, 因此会执行test1类中的static快。 接着开始实行test的main()函数,执行new myclass(). 而myclass还没有被加载,因此需要加载myclass类。在加载myclass类时,发面myclass继承自tets1类。不过test1类已经加载了。所以只需加载自己myclass类。那么就会执行myclass 的static快。  在加载完后,就通过构造器来生成对象。而在生成对象的时候,必须先初始化父类的成员变量。因此会执行test1中的 person person=new person("test1"); 而person类还没有被加载过,因此会先加载person类中的static,接着执行person类的构造函数。然后执行父类test类的构造函数。完成父类的初始化。接着退回完成myclass自身的初始化,因此会接着执行person person = new person("myclass");最后执行myclass的构造器。

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网