动手动脑3

早期经常这样定义变量 int value=100;
前面的示例中这样定义变量 MyClass obj = new MyClass();
这两种方式定义的变量是一样的吗?
解答:这两种定义的变量的方式是不一样的。
前者是原始数据类型变量,如int,float等。定义一个原始类型变量时,会马上给其分配内存。声明一个原始数据类型变量时,实际上并没有创建一个对象,此变量=null。
后者是引用类型变量,“引用”一个对象的变量称为“引用类型”的变量,有时又简称为“对象变量”。引用对象后的对象变量,且如果不再使用此变量,将会回收类定义的对象所占用的内存。对象变量初始化,该变量若不引用一个真实的对象,则必须声明为null。

对于原始数据类型的变量(比如int),可以直接使用“==”判断两变量值是否相等

对象变量也可以使用“==”判断两变量值是否相等吗?
解答:对象变量不可以使用“==”来判断两变量的值相等,“==”用于引用类型变量时,是比较这两个变量是否引用同一个变量,即“==”实际上是比较这两个引用类型变量的对象地址是否相同。在Java中要比对两个对象的字段值,可以 “重写(override)”基类的equals()方法。

请输入并运行以下代码,得到什么结果?

运行结果截屏如下:

以下代码为何无法通过编译?哪儿出错了?

解答:类中提供了一个自定义的构造方法,导致系统不再提供默认的构造方法。由于没有该参数类型参数,也不能调用定义的构造函数,所以无法通过编译。

如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?以下代码输出结果是什么?请依据代码的输出结果,自行总结Java字段初始化的规律。

 

 

 

 

 运行结果截屏如下:

解答:若主函数中创建对象没有形参,如果在类中定义了公共的变量并给与了赋值,则值赋给主函数中的变量,再调用类中的默认构造函数。
若主函数创建对象有形参,调用类中对应的构造函数。
Java字段初始化的规律:类的初始化块不接受任何的参数,只要创建一个类对象就会被执行。执行类成员定义时,指定的默认值或类的初始化块在执行过程中按照顺序执行。

请运行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();
        

    }
}
复制代码

运行结果截屏如下:

静态初始化块的执行顺序:
1.静态初始化块只执行一次。
2.创建子类型的对象时,也会导致父类型的静态初始化块的执行。

posted @ 2021-11-24 22:20  清梦韶华  阅读(20)  评论(0编辑  收藏  举报