zoukankan      html  css  js  c++  java
  • JAVA作业02

    一,      课堂练习

    (一)构造方法

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

    (二), 运行结果

     

  • 相关阅读:
    linux cut的用法
    删除表的语句(drop truncate delete)
    mysql中的模糊查询
    linux之软连接 硬链接 link ln
    使用robot合并Robot Framework测试报告
    Python中的字典
    python logger 动态设置日志名
    K8S(Kubernetes)学习笔记
    [转]CURL常用命令
    python网站目录扫描器2.0版
  • 原文地址:https://www.cnblogs.com/420Rock/p/4887033.html
Copyright © 2011-2022 走看看