课后作业

Java初始化顺序详解
本文深入探讨了Java中类和对象的基础概念,特别是初始化过程中的细节,包括静态成员、构造器及初始化块的执行顺序,并提供了具体的代码示例进行说明。

                                   姓名:苏月       班级:信1405-1班      学号20142956

 

     在学习了类和对象这一章节,我发现我更加懂得了java这门课程的一些基础性的问题,仿佛一切在我面前都明了了。

     在这一章节中,有许多的动手动脑的问题,如:

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

从中我们可以看出:如果编程中自己定义了一个自定义,那么编译软件就不会启动默认自定义。而这个程序中Foo就出现了这样的问题。

在java的初始化过程中,最好不要出现初始化块,保证一个字段只初始化一次,而且在你构造了一个函数的同时,如果你调用了这个函数生成了一个实例时InitializeBlockClass obj=new InitializeBlockClass();其obj调用的是初始化的值,而obj = new InitializeBlockClass(300);却是自己输入的值。

2、class Date{

         Static{

              System.out.println(“100”);

              }

               {

                    System.out.println(“200”);

               }

Public Date()

{

System.out.println(“Date的无参数构造器”);

}

}

class Cat extends Date{

       static{

              System.out.println("300");

       }

       {

              System.out.println("400");

       }

       public Mid()

       {

              System.out.println("cat的无参数的构造器");

       }

       public Mid(String msg)

       {

              //通过this调用同一类中重载的构造器

              this();

              System.out.println("Mid的带参数构造器,其参数值:" + msg);

       }

}

class Leaf extends Cat{

       static{

              System.out.println("500");

       }

       {

              System.out.println("600");

       }    

       public Leaf()

       {

              //通过super调用父类中有一个字符串参数的构造器

              super("Java初始化顺序演示");

              System.out.println("执行Leaf的构造器");

       }

 

}

 

public class TestStaticInitializeBlock

{

       public static void main(String[] args)

       {

              new Leaf();

             

 

       }

}

 

4、静态初始化的顺序:

如果是多个父类关联关系一个子类继承,静态的初始化只执行一次,而且在创建子类型的对象时,也会导致父类静态的初始化块的执行。

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();

             

 

       }

}

 

5、packagedemo;

public class Tongji{

private staticint n;

Public Tongji(){

n++;//new一个对象的时候给n加1;

Public staticint  getNum(){

return n;//返回n的值

}

Public static void main()

{

Tongji t1 = new Tongji();

Tongji t2 = new Tongji();

Tongji T3 = new Tongji();//创建对象;

 

System.out.println(“共有对象的个数:”+Tongji.getNum())}}

 

转载于:https://www.cnblogs.com/syhn/p/4887013.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值