java面试题之static
2016-03-30 15:40
357 查看
public class Test { Person person = new Person("Test"); static{ System.out.println("test static"); } public Test() { System.out.println("test constructor"); } public static void main(String[] args) { new MyClass(); } } class Person{ static{ System.out.println("person static"); } public Person(String str) { System.out.println("person "+str); } } class MyClass extends Test { Person person = new Person("MyClass"); static{ System.out.println("myclass static"); } public MyClass() { System.out.println("myclass constructor"); } }
test static myclass static person static person Test test constructor person MyClass 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 不允许用来修饰局部变量
相关文章推荐
- 求大数阶乘算法(华为2015面试题)
- 2016CVTE面试题(嵌入式实习)
- iOS面试题-iOS部分
- 程序员必读书单
- 程序bug致损失400亿,判程序员坐牢? 搞笑我们是认真的
- 程序bug致损失400亿,判程序员坐牢? 搞笑我们是认真的
- 程序bug致损失400亿,判程序员坐牢? 搞笑我们是认真的
- 程序bug致损失400亿,判程序员坐牢? 搞笑我们是认真的
- iOS技术面试集锦----面试题1
- 剑指offer--面试题6 重建二叉树
- [面试]Android 适配问题
- 阿里2016春招实习生内推面试
- 面试题63:字符流中第一个不重复的字符
- 前端必会...前端面试/html面试
- 软件测试技术对程序员的重要性
- 面试题62:表示数值的字符串
- 面试算法_出现次数最多的字母(含大小写)
- 程序员的思维训练
- 【面试题】单链表逆转、字符串按单词逆转
- 总结的面试中常见65种应聘技巧回答