一,      课堂练习

(一)构造方法

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的更多相关文章

  1. JAVA自学作业02

    JAVA自学作业02 1.什么是标识符?由哪些部分组成?常见的命名规则有哪些? 标识符是用户为变量的内存空间所定义的字符序列: 可以由字母.下划线.美元符号以及数字组成,但数字不可作为首字符.标识符不 ...

  2. 假期作业02:安装JDK与文本编辑器并编写第一个Java程序

    假期作业02:安装JDK与文本编辑器并编写第一个Java程序 一.安装JDK与文本编辑器并编写第一个java程序 首先在oracle官网(需要创建账号,进行登录后方可使用)按照自己的需求下载JDK(h ...

  3. 第五次Java作业

    作业一: 文件显示列表框. 增加了下拉式组合框,text区域设置颜色为红色. import javax.swing.*; import java.awt.*; import java.io.File; ...

  4. Java学习02

    Java学习02 1.导入内部的包 一.在包的下面加入下面一句话: import    java.util.Scanner; 二.在类中 Scanner input=new     Sanner(Sy ...

  5. Java作业:第四次过程性考核 ——长春职业技术学院 16级网络工程

    Java作业:第四次过程性考核 码云链接:https://gitee.com/SoridoD/java_kaohe4    (时间匆忙没打注释,真有急事) (客户端和服务器会自动创建表,所以没有sql ...

  6. Java作业:第一次过程性考核 ——长春职业技术学院 16级网络工程

    Java作业:第一次过程性考核 ••<结构化程序设计>•• 考核目标:初步了解Java基本语法规则,学习结构化程序设计思想. 码云链接:https://gitee.com/SoridoD/ ...

  7. 初识Java作业

    初识Java作业 一.    填空题 Java技术按照用途不同分为三大版本,分别是JavaSE.     javaEE       和JavaMe Java虚拟机就是一个虚拟的用于执行  .class ...

  8. C语言I—2019秋作业02

    1.[新增内容] 这个作业属于那个课程 C语言程序设计 这个作业要求在哪里 <C语言I-2019秋作业02> 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 <实现一些基 ...

  9. c语言1博客作业02

    c语言1博客作业02 这个作业属于哪个课程 C语言程序设计 这个作业的要求在哪 [作业要求](https://edu.cnblogs.com/campus/zswxy/SE2019-2/homewor ...

随机推荐

  1. HNU 12868 Island (简单题)

    题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12868&courseid=272 解题报告:输入n*m ...

  2. TP5的图片上传

    public function upload(){ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('image'); $picture=mod ...

  3. Opencv CamShift+Kalman目标跟踪

    #include "stdio.h" #include "string.h" #include "iostream" #include &q ...

  4. Git-it字典翻译

    Git-it字典翻译 下面的内容翻译自git-it/dictionary 水平有限,翻译欠佳. Git准备工作 创建一个新的文件夹(目录) $ mkdir <目录名称> 切换到这个目录 ( ...

  5. wav转aac

    //调用neroAacEnc.exe STARTUPINFO si={}; PROCESS_INFORMATION pi={};//隐藏窗口 si.cb=sizeof(si); si.dwFlags= ...

  6. chkconfig用法 LINUX

    chkconfig用法 有时候为了方便管理,我们常常喜欢在Linux中将之安装为服务,然后就可以使用服务来管理. 但是当我们运行安装服务的命令时候,假设服务名为myservice #chkconfig ...

  7. 在sublime-text中设置浏览器预览

    配置在Chrome,Firefox中打开 安装 SideBarEnhancements 然后通过ctrl + k, ctrl + b打开侧边栏,在侧边栏的文件中右击,找到 open width -&g ...

  8. 【GoLang】GoLang 官方 对 error 处理的意见

    The Go Blog Errors are values 12 January 2015 A common point of discussion among Go programmers, esp ...

  9. easyui datagrid中datetime字段的显示和增删改查问题

    datagrid中datetime字段的异常显示: 使用过easyui datagrid的应该都知道,如果数据库中的字段是datetime类型,绑定在datagrid显式的时候会不正常显示,一般需要借 ...

  10. iOS 目录的使用

    Table 1-1  Commonly used directories of an iOS app  Directory Description AppName.app This is the ap ...