static用法

来源:互联网 发布:淘宝返利怎么操作 编辑:程序博客网 时间:2024/06/15 09:38
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. public class Test {  
  2.     Person person = new Person("Test");  
  3.     static{  
  4.         System.out.println("test static");  
  5.     }  
  6.        
  7.     public Test() {  
  8.         System.out.println("test constructor");  
  9.     }  
  10.        
  11.     public static void main(String[] args) {  
  12.         new MyClass();  
  13.     }  
  14. }  
  15.    
  16. class Person{  
  17.     static{  
  18.         System.out.println("person static");  
  19.     }  
  20.     public Person(String str) {  
  21.         System.out.println("person "+str);  
  22.     }  
  23. }  
  24.    
  25.    
  26. class MyClass extends Test {  
  27.     Person person = new Person("MyClass");  
  28.     static{  
  29.         System.out.println("myclass static");  
  30.     }  
  31.        
  32.     public MyClass() {  
  33.         System.out.println("myclass constructor");  
  34.     }  
  35. }  

[java] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. test static  
  2. myclass static  
  3. person static  
  4. person Test  
  5. test constructor  
  6. person MyClass  
  7. myclass constructor  


首先加载Test类,因此会执行Test类中的static块。接着执行new MyClass(),而MyClass类还没有被加载,因此需要加载MyClass类。在加载MyClass类的时候,发现MyClass类继承自Test类,但是由于Test类已经被加载了,所以只需要加载MyClass类,那么就会执行MyClass类的中的static块。在加载完之后,就通过构造器来生成对象。而在生成对象的时候,必须先初始化父类的成员变量,因此会执行Test中的Person person = new Person(),而Person类还没有被加载过,因此会先加载Person类并执行Person类中的static块,接着执行父类的构造器,完成了父类的初始化,然后就来初始化自身了,因此会接着执行MyClass中的Person person = new Person(),最后执行MyClass的构造器。


知识点:

static:
作用:方便在没有创建对象的情况下进行调用方法或变量;静态代码块以用来优化代码性能,只会在类加载的时候执行一次
静态方法中不能访问非静态成员变量和方法,因为没有this
非静态方法可以访问静态成员变量和方法
类的构造器实际上也是静态方法.
static 不允许用来修饰局部变量


0 0
原创粉丝点击