博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA作业02
阅读量:6239 次
发布时间:2019-06-22

本文共 1948 字,大约阅读时间需要 6 分钟。

一,      课堂练习

(一)构造方法

1,源代码

public class Test{

         public static void main(String[] args){

                  Foo obj1=new Foo();

         }

}

class Foo{

         int value;

         public Foo(int initValue){

                  value=initValue;

         }

}

2,运行结果

3,结果分析

如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

(二)JAVA字段初始化

1,源代码

 

public class InitializeBlockDemo {

         public static void main(String[] args) {

                 

                  InitializeBlockClass obj=new InitializeBlockClass();

                  System.out.println(obj.field);

                 

                  obj=new InitializeBlockClass(300);

                  System.out.println(obj.field);

         }

 

}

 

class InitializeBlockClass{

         {

             field=200;

         }

         public int field=100;

         public InitializeBlockClass(int value){

                  this.field=value;

         }

         public InitializeBlockClass(){

                 

         }

}

2,运行结果

 

3,结果分析

关与java字段初始化问题 ,无继承情况:初始化块第一个执行,字段初始值设置代码第二个执行,构造函数第三个执行。

(三)有继承情况时的初始化问题

1,源代码

class B{

 public B() {

  System.out.println("父类  构造函数第四个执行");

 }

 {

  System.out.println("父类  动态代码块第三个执行");

 }

 static {

  System.out.println("父类   静态块第一个执行");

 }

}

public class A extends B{

 public A() {

  System.out.println("子类   构造函数第六个执行");

 }

 {

  System.out.println("子类   动态代码块第五个执行");

 }

 static {

  System.out.println("子类   静态块第二个执行");

 }

 public static void main(String[] args) {

  new A();

 }

}

2运行结果

 

3结果分析

父类静态块第一个执行,子类静态块第二个执行,父类初始值代码第三个执行,父类构造函数第四个执行,子类动态初始化块第五个执行,子类构造函数第六个执行。

当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

(四)运行结果:

总结分析:

对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

二,      课后作业

请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象

(一)源代码:

public class Test {

               private int id;
               private String name;
               private static long count;
               private final static ThreadLocal tl=new ThreadLocal();
               public Test() {
                               super();
                               count++;
                               tl.set(count);
               }
               public long getCount(){
                               return (Long)tl.get();
               }
               public static void main(String[] args) {
                               for (int i = 0; i < 5; i++) {
                                              Test t=new Test();
                                              System.out.println(t.getCount());
                               }
               }
              
}

(二), 运行结果

 

转载于:https://www.cnblogs.com/420Rock/p/4887033.html

你可能感兴趣的文章
headfirst PMP-忽视项目职责范围会带来哪些问题?
查看>>
PHP缓存学习之redis
查看>>
以lnmp为基础搭建discuz论坛
查看>>
云计算网络基础-金老师
查看>>
Vim编辑器与Shell编辑器
查看>>
Cisco交换路由配置命令及说明
查看>>
解析sort命令
查看>>
mysql慢查询
查看>>
体会瞬间的舒爽
查看>>
我的友情链接
查看>>
关于网站访问出现的以下问题
查看>>
FFmpeg架构之其他重要数据结构的初始化
查看>>
List(二)
查看>>
Discuz论坛黑链清理教程
查看>>
committed access rate(CAR)承诺访问速率
查看>>
我的友情链接
查看>>
c#访问mysql数据库
查看>>
Postfix 邮件路由和传输研究
查看>>
Servlet学习小结
查看>>
“深入剖析WCF的可靠会话”系列[共8篇]
查看>>