美文网首页
005 初始化与清理

005 初始化与清理

作者: 猿笔记 | 来源:发表于2018-11-10 01:01 被阅读0次
  • 构造器确保初始化
  • 在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化
  • 构造器采用与类相同的名称


  • new Rock();做了两个动作:
    • 给对象分配存储空间
    • 调用构造器,完成对象的初始化
  • “每个方法首字母小写”的编码风格并不适用于构造器
  • 默认构造器:指不接受任何参数的构造器
  • 构造器可以带有形式参数,以便指定如何创建对象


  • 在Java中,“初始化”和“创建”捆绑在一起,两者不能分离
  • 构造器是一种特殊类型的方法,它没有返回值
  • 为了让方法名相同而形式参数不同的构造器同时存在,必须用到方法重载
  • 每个重载的方法都必须有一个独一无二的参数类型列表,甚至参数顺序的不同也足以区分两个方法(不推荐)
  • 若传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型会被提升
  • 若无法找到恰好接受char参数的方法,则会把char直接提升到int
  • 若传入的数据类型(实际参数类型)大于方法中声明的形式参数类型,则必须做窄化转换,否则会编译器报错
  • 无法根据方法的返回值来识别该调用的方法
void f(){}
int f(){ return 1;}
f();//无法识别
  • 默认构造器(即无参构造器)是没有形式参数的,作用:创建一个“默认对象”
  • 若类中没有构造器,则编译器会自动帮你创建一个默认构造器
  • 如果已经定义了一个构造器(无论是否有参数),编译器就不会再自动创建默认构造器
  • 编译器会暗自把“所操作对象的引用”作为第一个参数传递给成员方法
Banana a = new Banana();
a.peel(1); 等价于 Banana.peel(a,1);
  • this只能在方法内部使用,表示对“调用方法的那个对象”的引用
  • this用于返回当前对象的引用,对于将当前对象传递给其他方法也很有用
  • this可以用于在构造器中调用构造器


  • this调用构造器时,必须置于最起始处,否则编译器会报错
  • 除构造器之外,编译器禁止在其他任何方法中调用构造器
  • static方法就是没有this的方法
  • 在static方法的内部不能调用非静态方法,反过来可以
  • 在没有任何对象创建的前提下,可通过类本身来调用static方法
  • 垃圾回收器只知道释放那些由new分配的内存;对于像c语言malloc分配的内存无法自动释放,需要借助finalize方法
  • 无论是“垃圾回收”还是“终结”,都不保证一定会发生
  • 如果JVM未面临内存耗尽的情形,则不会浪费时间去执行垃圾回收以恢复内存
  • System.gc()用于强制进行终结动作
  • finalize可以用于终结条件的校验
  • 垃圾回收器对于提高对象的创建速度,具有明显的效果=》堆指针+垃圾回收器重新排列
  • Java尽力保证:所有的变量在使用前都能得到恰当的初始化
  • 对于方法的局部变量,以编译错误来提醒


  • 类的每个基本数据类型成员保证都会有个初始值;而对于对象的引用,将会获得一个特殊值null
  • 可以在定于类成员变量的地方为其赋值做初始化;包括:直接赋值、调用方法,但要注意初始化的顺序
  • 可以用构造器来进行初始化
  • 无法阻止自动初始化的进行,都是在构造器被调用前发生
  • 在类的内部,变量定义的先后顺序决定了初始化的顺序;即使变量定义散布于方法定义之间,仍旧会在任何方法(包括构造器)被调用之前得到初始化
  • 无论创建多少个对象,静态数据都只占一份存储区域
  • static不能用于局部变量,只能作用于域




  • 静态初始化只有在必要时刻才会进行:类的对象被创建 或 第一次访问静态数据
  • 静态对象只会被初始化一次
  • 初始化顺序:先静态对象,而后是非静态对象
  • 对象的创建过程:
    (1) 首次创建类的对象或类的静态方法或静态域首次被访问时,java解释器必须查找类的路径,以定位.class文件
    (2) 载入.class,有关静态初始化的所有动作都会被执行
    (3) new创建对象时,在堆上为对象分配足够的存储空间
    (4) 存储空间被清零,自动将基本类型设置为默认值,引用设置为null
    (5) 执行所有出现在字段定义处的初始化动作
    (6) 执行构造器
  • 允许将多个静态初始化动作组织成一个特殊的“静态子句”(或叫静态块)
  • 实例初始化:用来初始化每个对象的非静态变量,在构造器之前调用


  • 数组是相同类型的,用一个标识符名称封装在一起的一个对象序列或基本类型数据序列
  • 数组通过方括号下标操作符[]来定义和使用
int[] a; 或 int a[];
  • 编译器不允许指定数组的大小,拥有的是数组的引用
int[5] a;//错误
  • 为了给数组创建相应的存储空间,必须写初始化表达式
int[] a1 = {1,2,3,4,5};
或
int[] a2;
a2 = a1;//赋值的是引用
  • 所有数组都有一个固有成员length,可以通过它获知数组内包含多少个元素,但不能对其修改
  • 数组的下标从0开始,最大下标数length-1;一旦访问下标过界,就会出现运行时错误
  • 不能用new来创建单个的基本数据类型,但可以创建数组
  • 数组元素中的基本数据类型会自动初始化为空值
  • 可以用花括号括起来的列表初始化对象数组

    注意:初始化列表的最后一个逗号都是可选的
  • 可变参数列表用于参数个数或类型未知的场合


  • 通过enum来创建枚举类型,编译器会自动添加一些有用的特性;比如:toString()显示某个enum实例的名字,ordinal()方法表示某个特定enum常量的声明顺序,static values()方法,用来按照enum常量的声明顺序,产生由这些常量值构成的数组




  • enum和switch结合使用,可以通过enum的名字表达出清晰的意图



相关文章

  • 005 初始化与清理

    用构造器确保初始化 在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化 构造器采用与类相同的名称...

  • 初始化与清理

    1.类中的成员变量会被自动初始化,而普通变量则必须要显式初始化后才能使用。 2.构造器初始化顺序:类中的任何位置的...

  • 初始化与清理

    static方法是没有this的方法。在static方法内部不能调用非静态方法(因为没有this关键字)。stat...

  • 初始化与清理

    1. 区分重载方法 规则很简单,每个重载的方法都必须有一个独一无二的参数类型列表。以返回值来区分重载方法是行不通的...

  • Spark Core源码精读计划#17:上下文清理器Contex

    目录 前言 初始化与类定义SparkContext中的初始化逻辑ContextCleaner类的属性成员清理任务及...

  • Java编程思想(四)

    第5章 初始化与清理 这一章主要讲了... Java 中提供了构造器和“垃圾回收器”解决初始化和清理的问题。 5...

  • 初始化与清理(java)

    整理总结 随着计算机革命的发展,“不安全”的编程方式已逐渐称为编程代价高昂的主因之一。其中,初始化与清理正是涉及安...

  • Java 初始化与清理

    初始化与清理是涉及到安全的两个问题。 1.用构造器确保初始化: 当我们通过new关键字来创建对象的时候,就是调用了...

  • Java编程思想(第四版)学习笔记(6)

    第五章 初始化与清理(2) 1.成员初始化 Java尽力保证:所有变量在使用前都能得到恰当的初始化。 对于方法的局...

  • 初始化和清理

    初始化和清理 初始化和清理正是涉及安全的两个问题。在之前的程序中一大部分错误都源自于不正确的初始化以及清理工作。在...

网友评论

      本文标题:005 初始化与清理

      本文链接:https://www.haomeiwen.com/subject/ipiaxqtx.html