第五章 初始化与清理

1.用构造器确保初始化

构造器:和类名相同,分无参构造器和有参构造器。

和C++一样,你不写他也会帮你写。

构造器有利于减少错误,并使代码更易阅读。从概念上讲,“初始化”与“创建”是彼此独立的。在java中“初始化”和“创建”捆绑在一起,两者不能分离。

2.方法重载

依据参数列表的不同进行重载,不能依据返回值的不同进行重载(因为很多方法的调用并不关心返回值)

区分重载的方法很简单,每个重载的方法都必须有独一无二的参数类型列表。

基本类型能从一个小的类型自动提升为一个较大的类型,此过程一旦牵涉到重载,可能会造成一些混淆。如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升。

如果传入的实际参数较大,就得通过类型转换来执行窄化转换。如果不这样做,编译器会报错

不过注意:

a.声明为final的方法不能被重载

b.声明为static的方法不能重载,但是能够被再次声明。

c.重载方法的返回类型可以相同也可以不同,但仅返回类型不同不足以成为方法的重载。

d.编译器根据调用方法的签名逐个匹配,以选择对应方法的过程叫做重载分辨

3.默认构造器

默认构造器(又名“无参”构造器)是没有形式参数的---它的作用是创建一个“默认对象”。但是如果你已经定义了一个构造器(无论是否有参数),编译器就不会帮你自动创建默认构造器。

4.this关键词

this关键字只能在方法内部使用,标识对"调用方法的那个对象"的引用。

return this, 返回当前对象的引用,可以对当前对象进行链式操作

构造器中调用构造器,使用this(args),且必须将构造器调用放在最起始处,否则编译器报错。

尽管可以用this调用一个构造器,但却在一个不能在构造器中同时调用两个。除构造器之外,编译器禁止在其他任何方法中调用构造器

static方法就是没有this的方法。在static方法的内部不能调用非静态方法,反过来倒是可以的,而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。(在我的练习题里有好多明显的标注这类型的错误)

5.清理:终结处理和垃圾回收

首先,对象可能不被垃圾回收。

其次,Java中的finalize()不等于C++中的析构函数。

最后,垃圾回收只与内存有关

关于finalize(),一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。所以要是你打算用finalize(),就能在垃圾回收时刻做一些重要的清理工作。

不过书中再三强调,不推荐适用finalize()做清理工作,因为对象可能不被垃圾回收,finalize()也就不会被保证一定被执行。所以不要指望finalize(),必须创建其它的清理方法,并且明确地调用它们。

垃圾清扫模式是标记清扫模式,运作方式是标记清扫和停止复制结合。

6.成员初始化

默认类型的初始化内容见第一章总结,引用类型默认为null,指定初始化即定义字段时即初始化,所有对象的字段初始值都一样,在类的内部,变量定义的先后顺序决定了初始化的顺序。且优先级大于构造器初始化。

7.构造器初始化

 创建对象时,初始化。

8.数组初始化

数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。

数组定义方式:int[] a; int a[], 前者更符合语义,后者为c++中常用的形式

初始化:int[] a = {1,2,3,4,5,6};

编译器不允许指定数组大小。现在拥有的只是对数组的一个引用,并没有为数组分配内存空间。

在java中可以将一个数组赋值给另一个数组,其实真正做的只是复制了一个引用。

有了可变参数,就再也不用显式地编写数组语法了,当你指定参数时,编译器实际上会为你去填充数组。你获取的仍旧是一个数组

9.静态初始化

 无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初值。如果它是一个对象引用,它的默认初始化值就是null。

注意,第一次访问静态数据的时候,静态对象会被初始化,此后都不会。

初始化的顺序是先静态对象(如果他们尚未因前面的对象创建过程而被初始化),而后是"非静态"对象

10.枚举类型

枚举本质上还是一个类,所有类的很多特性在枚举里面也是通用的。枚举可以用于switch

11.main里面的String赋值方法

public class Code_08_DymanicArray {public static void main(String[] args) {Other.main(new String[]{ "fiddle", "de", "dum" });}
}class Other {public static void main(String[] args) {for(String s : args)System.out.print(s + " ");}
}

12.对象创建的过程

a.当首次创建类对象时(构造器可以看成静态方法,但不是)或类的静态方法/静态域首次被访问时,Java解释器必须查找类路径,以定位Main.class文件。

b.载入Main.class,执行静态初始化的所有动作,且只执行这一次。

c.当调用new Main()时,首先将在堆上分配存储空间。

d.存储空间清零。所有成员变量会置成0或null。

e.执行所有出现于字段定义处的初始化动作。

f.执行构造器。

第六章loading...

Java编程思想总结篇(1-11章学习笔记)——第五章相关推荐

  1. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  2. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  3. javascript高级程序设计 学习笔记 第五章 上

      第五章   引用类型的值(对象)是引用类型的一个实例.在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当.尽管 ECMAScri ...

  4. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第五章:中级控件

    第 5 章 中级控件 本章介绍App开发常见的几类中级控件的用法,主要包括:如何定制几种简单的图形.如何使用几种选择按钮.如何高效地输入文本.如何利用对话框获取交互信息等,然后结合本章所学的知识,演示 ...

  5. 《谁说菜鸟不会数据分析》学习笔记 第五章数据分析

    第五章 数据分析 5.1 数据分析方法 现状分析 5.1.1 对比分析法 5.1.2 分组分析法 5.1.3 结构分析法 5.1.4 分布分析法 5.1.5 交叉分析法 5.1.6 RFM分析法 5. ...

  6. 操作系统学习笔记 第五章:文件管理(王道考研)

    本文章基于网课: 2019 王道考研 操作系统 考试复习推荐资料:操作系统复习总结 - 百度文库 (baidu.com) 需要相关电子书的可以关注我的公众号BaretH后台回复操作系统 第一章:操作系 ...

  7. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第五章:继承与派生(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. 第五章 继承与派生 $5.1 继承与派生的概念 $5.1.1 基本概念     在C++中,当定义一个新的类B时,如果发现类B拥有某个已经写好的类A ...

  8. muduo学习笔记 - 第五章 高效的多线程日志

    第五章 高效的多线程日志 日志有两种意思: 诊断日志 交易日志 本章讲的是前一种日志,文本的供人阅读的日志,通常用于故障诊断和追踪,也可用于性能分析. 日志通常要记录: 收到的每条消息的id(关键字段 ...

  9. 《Android深度探究HAL与驱动开发》学习笔记----第五章

    第五章 搭建S3C6410开发板的测试环境 开发板是开发和学习嵌入式技术的主要硬件设备. 主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器 ...

最新文章

  1. p值+p-value+p value+显著性+significance
  2. 虚拟主机1服务器,虚拟主机1服务器
  3. 怎样学习和阅读技术书籍?
  4. java地址映射关系,Spring MVC——基础(简介,使用,地址映射)
  5. Linux 中mysql常用命令
  6. 虚拟键码对照表与ASCII对照表的整理
  7. 蓝桥杯 基础练习 完美的代价
  8. 【语音识别基础】总有一天你会用到,嗯,没有公式~
  9. ASP.NET 2.0加密Web.config 配置文件
  10. 【机器学习算法】集成学习-1 强学习器的融合学习
  11. BF,KMP算法(万字图文详解)
  12. VS2010“未能正确加载包”问题解决方法小汇
  13. HP服务器配置远程管理端口iLO的基本方法
  14. MySQL数据库——复杂查询(二)
  15. oracle 加索引 %3e=,impdp create index parallel-数据泵并行创建索引
  16. 腾讯《天天传奇》玩转Unity3D
  17. python 手部识别与位置跟踪
  18. crh寄存器_STM32的CRH、CRL、ODR和IDR寄存器的使用总结
  19. 使用NTP同步两台电脑(windows-ubuntu)
  20. 信奥中的数学:平面直角坐标系

热门文章

  1. css 设置鼠标滑过变色效果
  2. 北京华为HCIE认证里的数通深入学习QOS流量整形令牌桶机制和规则-ielab网络实验室
  3. 150首中国翻唱韩国原歌曲
  4. 单片机:c语言实现秒表计数(按键开始,结束,重置)
  5. Google Map 离线地图 - Ok Maps
  6. 微信公众号如何变得更好_过去十年,或者说如何在任何事情上变得更好
  7. 血与荣耀(第一章-激战)
  8. === 和 == 的区别
  9. mysql堡垒机漏洞_关于近期网传齐治堡垒机漏洞的声明
  10. maya! board_送给自学3d建模的你,自学maya,zbrush,substance一个月的感想