Java学习10.10(动手动脑)
1.对象判等
对于原始数据类型的变量(比如int),可以直接使用“==”判断两变量值是否相等
整型数据可以直接用==来判断是否相等,字符串类型不可以,需要equal()方法来判断是否相等,比如value1.equal(value2);
2.以下代码为何无法通过编译?哪儿出错了?
public class Test{ public static void main(String [] args){ Foo obj1=new Foo(); } } class Foo{ int value; public Foo(int initValue){ value=initValue; } }
由于类Foo中的构造方法是含有参数的,导致系统不再提供默认构造方法,此时需要怎加一个默认构造方法。
3.请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。
class Root { static { System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static { System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static { System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("Java初始化顺序演示"); System.out.println("执行Leaf的构造器"); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } }
测试截图:
总结:
先对子类由最低层开始的静态初始化块进行执行,随后对父类root的普通和无参初始化块进行初始化,最后对mid的初始化块进行执行。