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的初始化块进行执行。

posted on 2020-10-10 11:15  桑榆非晚柠月如风  阅读(93)  评论(0编辑  收藏  举报