码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA作业02

时间:2015-10-17 10:42:43      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

一,      课堂练习

(一)构造方法

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

(二), 运行结果

 技术分享

JAVA作业02

标签:

原文地址:http://www.cnblogs.com/420Rock/p/4887033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!