java作业3

一.构造方法

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.程序截图

 

四.

 

 

对象的初始化顺序:首先执行父类静态的内容,父类静态内容执行完毕后,执行子类内容。子类执行完后,再去看父类有没有非静态代码块,如果有就执行。父类非静态代码块--->父类构造方法--->子类非静态代码块--->子类构造方法。

五.课后作业  编写一个类,在任何时候都能查询创建对象的个数

1.源代码

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

2.程序截图

 

 

 

原文地址:https://www.cnblogs.com/Jasoon/p/4888481.html