Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java编程思想第五章初始化与清理

java编程思想第五章初始化与清理

作者头像
用户1134788
发布于 2022-05-09 02:22:43
发布于 2022-05-09 02:22:43
6080
举报

5.1使用构造器确保初始化:

  构造器与一般方法一样,但是没有返回值,且其方法名与类名完全相同。

  不接受任何参数的构造器成为默认构造器,也叫无参构造器。

5.2 方法重载:

  为什么会有方法重载?

    构造器是方法重载的一个重要原因,若想以多种方式创建构造器,就必须将方法进行重载,即使用有参构造。

  如何区分重载方法?

    方法名相同为前提,使用参数列表来区分。

    注:使用返回值是不能够区分重载方法的,因为有时候你仅仅是调用方法,而不在意他的返回值。

5.3默认构造器:

  没有参数的构造器,作用是创建一个默认的对象。

  注:当类中没有构造器时,编译器会帮我们创建一个默认的构造器(无参构造器)

5.4this关键字:

  编译器在方法调用前,会将代码修改,将对象的引用作为参数,然后使用类名.的形式调用方法。

  但是这个对象的引用是编译器加的,所有没有标识符,java语言提高了this关键字来表示“调用方法的对象”的引用。

  用途:

    在构造器中可以使用this关键字调用其他构造器,注:不能在一个构造器中调用两个。

  static与this:

    static方法就是没有this的方法。注:静态方法内不能够调用非静态方法(即在static中无法调用this)。

    static方法可以在对象创建之前,直接使用类名.方法名调用。

    注:static是随着类的.class被加载的时候就被加载进入内存的,是同类同一级别。

5.5清理:终结清理和垃圾回收:

  可以自定义java的finalize()方法:

  其工作原理:

    一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize(),注:一个对象一生只调用一次,不管有没有成功被回收。

    如果第一次GC没有回收,那么以后GC时将不会调用方法。

    注:正常对象一次GC即被回收,但是也可以能出现多次GC而不被回收的情况。

  finalize()的用途何在?

    由于GC只与内存有关,那么与GC有关的行为(finalize())方法必须同内存及其回收相关。    

    场景涉及到了“本地方法”,这是java中调用非java形式(C、C++),需要在finalize()调用其对应的方法帮助清理,避免内存泄漏。

  注:这个方法很危险。实际上JVM有自己的垃圾回收机制。并不需要我们去调用这个方法。

  实际上finalize()方法可以用于对象“终结条件的验证”,这样便于程序设计的过程中发现可能出现的遗漏。

  垃圾回收器的工作:

    停止-复制(stop-and-copy):先停止程序,然后将存活对象从当前堆复制到另一个堆,没有被复制的就是垃圾,被复制的对象以紧凑的方式重新排列。

    注:效率低:1)要从分离的堆中来回复制。2)程序稳定后可能垃圾少,这时候复制是对资源的浪费。

    为了避免出现没有垃圾的情况,JVM会进行检查,没有新垃圾产生,就好切换另一种工作模式:标记-清扫(mark-and-sweep),该模式也必须在程序暂停的时候使用

    从堆栈和静态存储区出发,遍历所有引用,找出活的,给活得标记,标记完成开始清理。

  自适应,这两种方式是来回进行切换的。

  JIT(just-in-time)即时编译器。这是与加载器相关的功能。这种技术可以把程序全部或部分翻译为机器码,从而使运行速率提升。

5.6成员初始化:

  所有变量在使用前都必须进行初始化。

  可以直接指定初始化,也可以使用构造器初始化。

  注:在类内部,变量定义顺序觉得其初始化顺序,变量的初始化会优先于方法的调用。

5.7构造器初始化:  

  静态数据的初始化:只占用一块存储空间。

  对象的创建过程:

    1)首次创建对象或者调用静态成员时,java编译器会找到.class文件。

    2)载入.class文件(得到Class对象),有关静态初始化会完成。  

    3)new对象时,在堆内存上创建空间。

    4)空间被清空,自动为所有成员变量设置默认值。

    5)执行指定初始化(这里指的是对基本数据类型和引用数据类型的初始化,在Java中总是会优先去加载成员变量,不论成员变量位置在哪里,都是会优先加载)。

    6)执行构造器。

  静态代码块:仅执行一次,当创建类对象或者访问类静态成员时执行。

5.8数组初始化:

  数组中的引用元素只有在明确指定引用时才算初始化完成。

  可变参数列表:注必须放在参数的最后一位。类型...参数名

5.9枚举初始化:

  枚举类似的实体是常量,常用大写字母表示。

  枚举在创建时会写很多方法,如toString()、ordinal()用于表明顺序、以及static values()按常量顺序构成数组等

  枚举可以在switch语句中使用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java编程思想第四版第五章总结
1. 构造器 构造器的一个重要的作用: 保证对象被使用之前初始化了. 构造器是一种特殊类型的方法, 因为他没有返回值。这与返回值为空(void)明显不同。对于空返回值,尽管方法本身不会自动返回什么,
用户7798898
2020/09/27
3980
Java编程思想第五版 第六章-初始化和清理
C 语言中很多的 bug 都是因为程序员忘记初始化导致的。尤其是很多类库的使用者不知道如何初始化类库组件,甚至当侠客们必须得初始化这些三方组件时(很多可怜的掉包侠根本不会管初始化问题)
JavaEdge
2020/05/27
7170
编程思想 之「初始化与清理」
与其他语言相比,Java 的一大特点就是其自动的初始化与清理功能。对于基本数据类型的全局变量,Java 自动将其初始化为对应的默认值,具体可以参考「对象漫谈」中的内容;对于对象,我们可以通过构造方法对其进行初始化;对于清理操作,Java 提供了垃圾回收机制,其可以帮我们自动清理不再使用的对象,释放资源。
CG国斌
2019/05/26
4070
Java编程思想学习录(连载之:初始化与清理)
Java编程思想学习录连载文章 关于构造器与初始化 无参构造器 = 默认构造器 = 自己未写编译器帮忙自动创建的 若自行定义了构造器(无论参数有否),编译器便停止默认创建动作 类里的对象引用默认初始化为null,基本类型初始化为0 四种常见初始化方式: 自动初始化:无法被阻止的,先于构造器,即所谓的基本类型赋空值(0),对象赋null 指定初始化:定义类成员的时候直接赋初始值 初始化子句:(匿名内部类的初始化的必需品!且一定先于构造器执行) 构造器初始化:在构造器中对成员赋上值 静态域的初始化: java中
CodeSheep
2018/05/22
5970
Java编程思想第五版精粹(五)-初始化和清理(上)
比如C语言,我写了整整半年,很多代码bug是因为程序员忘记初始化导致的,比如指针.
JavaEdge
2020/05/02
4940
Java编程思想第五版精粹(五)-初始化和清理(上)
Java类的初始化和清理
C 语言中很多的 bug 都是因为程序员忘记初始化导致的。尤其是很多类库的使用者不知道如何初始化类库组件,甚至当侠客们必须得初始化这些三方组件时(很多可怜的掉包侠根本不会管初始化问题)
JavaEdge
2021/12/07
9850
java编程思想第四版第五章习题
创建一个类, 它包含一个未初始化的String引用。验证该引用被Java初始化成了null 返回结果 null package net.mindview.initialization; public class Test1 { public String str; public static void main(String[] args) { Test1 t = new Test1(); System.out.println(t.str);
用户7798898
2020/09/27
5050
Java 小白成长记 · 第 4 篇《对象的初始化和清理》
这是一个技术疯狂迭代的时代,各种框架层出不穷,然而底层基础才是核心竞争力。博主(小牛肉)在现有的知识基础上,以上帝视角对 Java 语言基础进行复盘,汇总《Java 小白成长记》系列,力争从 0 到 1,全文无坑。
飞天小牛肉
2021/02/26
3430
Java 小白成长记 · 第 4 篇《对象的初始化和清理》
正确的初始化,在Java编程中至关重要!
有人说,你应该关注时事、财经,甚至流行的电影、电视剧,才有可能趁着热点写出爆文;有人说,你别再写“无聊”的技术文了,因为程序员的圈子真的很小,即便是像鸿祥那样的招牌大牛,文章是那么的干货,浏览量有多少?不到万吧;有人说,你别妄想在写作上面知识变现了,因为你写的文章真的很不优秀,我都不爱看!
沉默王二
2019/01/17
6960
Java编程思想第五版精粹(五)-初始化和清理(中)
初始化很重要,而清理工作也同样重要。毕竟,谁会去清理一个 int?但使用完一个对象就不管了,这并非总是安全的操作。
JavaEdge
2020/05/27
5410
Java编程思想第五版精粹(五)-初始化和清理(下)
以编译时错误的方式呈现。编译器可以为 i 赋一个默认值,但是未初始化的局部变量更可能是程序员的疏忽,所以强制程序员提供一个初始值,往往能帮助找出程序里的 bug。
JavaEdge
2020/05/27
4830
Java编程思想第五版第八章 -复用
对于像 C 语言等面向过程语言来说,“复用”通常指的就是“复制代码”。任何语言都可通过简单复制来达到代码复用的目的,但是这样做的效果并不好。Java 围绕“类”(Class)来解决问题。我们可以直接使用别人构建或调试过的代码,而非创建新类、重新开始。
JavaEdge
2020/05/26
8440
15-初始化和清理
初始化和清理是涉及编程安全的两个重要问题,在C语言中一直采取由程序员直接控制变量的初始化和清理,极易导致内存耗尽等问题出现
Ywrby
2022/10/27
2690
Java编程思想核心笔记
Java 编程思想为 Java 开发的圭臬, 是 Java 开发的经典手册. 作为一个开发人员还是建议多看一看. 从大学时起到现在已经开发多年, 也看过多遍, 随着年龄的增长和开发经验的增加, 每次重新阅读侯都会有新的理解, 所谓温故而知新. 但也存在问题, 一个是阅读时获得新的理解隔一段事件后容易遗忘. 二是每次阅读后做的纸质笔记容易丢失和难以拓展. 遂决定以电子版记之~~
芥末鱿鱼
2022/05/05
6030
Java编程思想核心笔记
Java程序员的日常—— 《编程思想》关于类的使用常识
Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题。世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识。 关于构造器 在C中,如果要使用变量需要先申请内存。在Java中,如果你需要创建一个对象,也可以直接new出来,JVM会自动帮你管理。 默认的类,会自动有一个无参的构造方法,当然你也可以自己定义有参的构造方法。但是要注意,一旦自己定义了,就不再帮你自动创建无参的构造方法了。 一个类可以有多种构造方法,通过参数类
用户1154259
2018/01/17
5390
第五章:面向对象编程
new运算符会在JVM的堆内存中分配空间用来存储实例变量。new分配的空间就是Java对象。
捞月亮的小北
2024/02/17
1410
第五章:面向对象编程
1、Java从入门到精通
1.标识符是一个名字,用来标识类名、变量名、方法名、数组名和文件名的有效字符序列。
全栈程序员站长
2022/09/08
8550
1、Java从入门到精通
《Java编程思想》笔记05——多态
在drawBlue()接受一个Art类的引用,同时,它也可以接受一个Art的子类引用。因此,当传入Draw类的引用时,该方法也可以执行。因为,Draw类是从Art类继承而来的,Art类的接口必然存在于Draw中,从Draw类向上转型会缩小接口,但接口不会比Art类更窄。
全栈程序员站长
2022/07/20
2660
java核心技术基础知识整理
在子类构造器中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过;
ZhangXianSheng
2019/08/05
9020
Java编程思想第七章复用类
  注:这里注意权限控制,若基类中的成员为默认权限,只有在同一包下才能继承得到。protect修饰时,导出类可以获取。public修饰时,任何类都可以拿到。private修饰就属于基类自己的东西了。
用户1134788
2022/05/09
2820
相关推荐
java编程思想第四版第五章总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档