《‘’JAVA面试题解惑系列精品资料.doc》由会员分享,可在线阅读,更多相关《‘’JAVA面试题解惑系列精品资料.doc(185页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、JAVA面试题解惑系列(一)类的初始化顺序关键字: java面试题 初始化 发布时间:2008-06-26作者:臧圩人(zangweiren)网址: 转载请注明出处!(变量、初始化块)构造器。我们也可以通过下面的测试代码来验证这一点: Java代码 public class InitialOrderTest /静态变量 public static String staticField = 静态变量; /变量 public String field = 变量; /静态初始化块 static System.out.println(staticField); System.out.println(静
2、态初始化块); /初始化块 System.out.println(field); System.out.println(初始化块); /构造器 public InitialOrderTest() System.out.println(构造器); public static void main(String args) new InitialOrderTest(); 运行以上代码,我们会得到如下的输出结果: 1.静态变量 2.静态初始化块 3.变量 4.初始化块 5.构造器 这与上文中说的完全符合。那么对于继承情况下又会怎样呢?我们仍然以一段测试代码来获取最终结果: Java代码 : class
3、 Parent /静态变量 public static String p_StaticField = 父类-静态变量; /变量 public String p_Field = 父类-变量; /静态初始化块 static System.out.println(p_StaticField); System.out.println(父类-静态初始化块); /初始化块 System.out.println(p_Field); System.out.println(父类-初始化块); /构造器 public Parent() System.out.println(父类-构造器); public clas
4、s SubClass extends Parent /静态变量 public static String s_StaticField = 子类-静态变量; /变量 public String s_Field = 子类-变量; /静态初始化块 static System.out.println(s_StaticField); System.out.println(子类-静态初始化块); /初始化块 System.out.println(s_Field); System.out.println(子类-初始化块); /构造器 public SubClass() System.out.println(
5、子类-构造器); /程序入口 public static void main(String args) new SubClass(); 运行一下上面的代码,结果马上呈现在我们的眼前: 1.父类-静态变量 2.父类-静态初始化块 3.子类-静态变量 4.子类-静态初始化块 5.父类-变量 6.父类-初始化块 7.父类-构造器 8.子类-变量 9.子类-初始化块 10.子类-构造器 现在,结果已经不言自明了。大家可能会注意到一点,那就是,并不是父类完全初始化完毕后才进行子类的初始化,实际上子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了。那么对于静态变量和静态
6、初始化块之间、变量和初始化块之间的先后顺序又是怎样呢?是否静态变量总是先于静态初始化块,变量总是先于初始化块就被初始化了呢?实际上这取决于它们在类中出现的先后顺序。我们以静态变量和静态初始化块为例来进行说明。同样,我们还是写一个类来进行测试:Java代码 public class TestOrder /静态变量 public static TestA a = new TestA(); /静态初始化块 static System.out.println(静态初始化块); /静态变量 public static TestB b = new TestB(); public static void m
7、ain(String args) new TestOrder(); class TestA public TestA() System.out.println(Test-A); class TestB public TestB() System.out.println(Test-B); 运行上面的代码,会得到如下的结果: 1. Test-A 2.静态初始化块 3. Test-B大家可以随意改变变量a、变量b以及静态初始化块的前后位置,就会发现输出结果随着它们在类中出现的前后顺序而改变,这就说明静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化的。同样,变量和初始化块也遵循这个规律。了解
8、了继承情况下类的初始化顺序之后,如何判断最终输出结果就迎刃而解了。(二)到底创建了几个 String对象?关键字: java面试题 string创建几个对象作者:臧圩人(zangweiren) 发布时间:2008-06-30网址: 转载请注明出处!转载请注明出处!转载请注明出处! final、finally和finalize的区别是什么?这是一道再经典不过的面试题了,我们在各个公司的面试题中几乎都能看到它的身影。 final、finally和finalize虽然长得像孪生三兄弟一样,但是它们的含义和用法却是大相径庭。这一次我们就一起来回顾一下这方面的知识。 final关键字我们首先来说说final。它可以用于以下四个地方: