java必知必会_Java构造器必知必会

在面向对象编程中,编程人员应该在意“资源”。比如

String hello = "hello";

在代码中,我们很在意在内存中String类型的hello,它是有一个生命周期的。在它生命周期中,初始化(initialization)和清理(cleanup)是两个重要的环节。尤其是C程序中,很多bug会出现在对象初始化和清理的环节。这样会造成一些程序安全问题。

《Think in Java》中说道:

随着计算机革命的发展,”不安全“的编程方式已逐渐成为编程代价高昂的主因之一。

一、栈与堆

在Java开发中,针对对象会在乎内存的两个区域:对象的生存空间是堆(heap)— 方法调用及局部变量(也称栈变量)的生存空间栈(stack)。如图:

ab008f10d6c3f0163ed1e56da89d9ef0.png

二、什么是构造器,默认(无参)构造器

为了保证对象成功初始化,Java像C++一样引入了构造器(Constructor),即在创建对象的时候被自动调用的特殊方法。自然,Java额外提供了GC(垃圾回收器),对于不再使用的资源,垃圾回收机制会自动释放资源。Java通过类构造器创建新对象的时候,在使用此对象前,会调用其构造器进行初始化。如:

public class VoidConstructor {

VoidConstructor(){

// 构造器

}

void VoidConstructor() {

// void 方法,不是构造器

}

}

1、默认构造器

这里,VoidConstructor是一个类,如果需要创建一个VoidConstructor对象只要

VoidConstructor constr = new VoidConstructor();

调用上面的代码就可以通过这个默认构造器(即无参构造器),就生成一个VoidConstuctor对象。代码图解如下

3f6fda5228f68bc840e4c5a9ee5b9750.png

2、注意,构造器是特殊的方法,采取与类名同名。它没有返回值,这与返回值为空的void方法不同。这里,void方法名命名也是不规范,应该是“每个方法首字母小写”,也一般不与类名相同。

另外,就算你类没有写构造器的话,编译器会生成一个默认构造器。

三、带参构造器

下面跑个带参构造器的例子:

/**

* @author Jeff Lee

* @since 2015-9-7 16:54:19

* 带参数简单构造器的展示

*/

public class SimpleConstructor2 {

public static void main(String[] args) {

for (int i = 0; i < 10; i++) {

new Child2(i);

}

}

}

// Child类

class Child2 {

Child2(int i) {// 带参数的Child类构造器

System.out.print("Child init " + i + " ");

}

}

Eclipse中,右键Run as — java application:

5150811f16b9548711a77962c2e0b0b3.png

上面Child2(int)是Child类的唯一构造器,此时你先在编译器中通过 new Child2()来创建对象是不行的。

所以,构造器有助于避免开发中出现代码错误。

二者,构造器可以用来初始化资源。其中,对象的创建与资源的初始化是捆绑在一起的。

休息一下吧~ 看看小广告:

开源代码都在我的gitHub上哦 —https://github.com/JeffLi1993作者留言“请手贱,点项目star,支持支持拜托拜托”

四、继承中的构造器

在创建一个对象时,所以继承下来的对象都会被调用各构造器。比如说下面这个例子:

/**

* @author Jeff Lee

* @since 2015-9-10 08:56:18

* 继承中的构造器的案例

*/

public class ChildConstructor extends PersonConstructor{

ChildConstructor() {

//super();

System.out.println("Making a Child Modle...");

}

@SuppressWarnings("unused")

public static void main(String[] args) {

ChildConstructor childConstructor = new ChildConstructor();

}

}

class PersonConstructor {

PersonConstructor() {

System.out.println("Making a Person Modle...");

}

}

main函数运行结果如下:

2115abf3e38db9837cb4b9cc6ef51dbc.png

1. 先分析下类UML,ChildConstructor 继承 PersonConstructor,PersonConstructor 继承Object:

eac85d858f12bc0b9b2da61a2fb51c0c.png

2. super关键字,super用来调用父类的构造器。如果子类中没有super关键字,编译器会自动添加默认super()方法。因此,子类通过super()方法调用父类构造器。

3. 然后main函数中,通过new指令,启动了ChildConstructor对象的创建。子类 ChildConstructor 构造器在执行时,第一件事通过super()调用父类,这又会连锁反应到Objerct类。所以,打印控制台先输出 “父类先初始化”。

这过程就是构造器链(Constructor Chaining),即Child对象  is-a Person对象同时也 is-a Object对象。如果创建Child对象,也同时创建了Person对象和Object对象的部分。

4. 过程流程图详解(图中是各对象引用在堆栈块):

4d5710b8b8346cde57362a6052ed4a8d.png

五、总结

构造器虽小,关键还是非常关键的。

本文小结:

1、默认构造器

2、有参构造器

3、继承中的构造器

还有第一点的知识基础补充

欢迎点击我的博客及GitHub — 博客提供RSS订阅哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

post 请求 argument type mismatch_Flask-RESTful 请求解析

一、基本参数from flask.ext.restful import reqparseparser reqparse.RequestParser()parser.add_argument(rate, typeint, helpRate cannot be converted)parser.add_argument(name, typestr)args parser.parse_args()二、必需的参数parser.add_argument(name, typestr, re…

易语言单窗口单ip软件源码_梦幻西游怎样多开ip转金?十大攻略秘籍速来看

各位好&#xff01;&#xff0c;我依然是小芝麻&#xff0c;近期几日总是有盆友在私聊我&#xff0c;“小芝麻看着你的转金专缉&#xff0c;那么多方式&#xff0c;能够 帮我建议一类&#xff0c;最安全可靠能用的吗&#xff1f;”“小芝麻&#xff0c;你的转金攻略大全&#x…

maven不配置环境变量可以使用吗_哪些土地可以不缴纳土地使用税?包括农村地吗?...

根据法律规定&#xff0c;县城以上城市进行土地开发时&#xff0c;需要征收土地使用税&#xff0c;对于公园、名胜、寺庙及文教、卫生、社会福利等单位使用的土地&#xff0c;城镇、街道、公共设施用地、铁路、机场、港区、车站、管理交通运输用地及水利工程&#xff0c;农、林…

小米答题题库_拼多多果园答题题库74(每日更新)

135编辑器拼多多答题题库七十四每周我们都会做一个总和的题库&#xff1b;希望大家持续关注&#xff01;您的关注就是我们的动力&#xff01;“成语之乡”指的是我国哪座城市&#xff1f;1.河北邯郸 2.安徽蚌埠答&#xff1a;河北邯郸邯郸位于河北省南部&#xff0c;是战国时期…

java 接口 print_Java-接口练习

编写2个接口&#xff1a;InterfaceA和InterfaceB&#xff1b;在接口InterfaceA中有个方法voidprintCapitalLetter()&#xff1b;在接口InterfaceB中有个方法void printLowercaseLetter()&#xff1b;然后写一个类Print实现接口InterfaceA和InterfaceB&#xff0c;要求printCapi…

filestorage 修改吧部分数据_数据库系统概论课后答案||第五版

关注公众号&#xff0c;更多资源分享回复关键词&#xff1a;数据库系统概论即可获取相应资源其他章节关注公众号获取第 1 章 绪论1 &#xff0e; 试述数据、 数据库、 数据库系统、 数据库管理系统的概念。答&#xff1a;( l ) 数据( Data ) &#xff1a; 描述事物的符号记录称…

directshow 旋转_宜昌中心加工机+A:B型号,高速旋转接头加工

杭州浙稳贺机械配件有限公司为您详细解读MrGAtc宜昌中心加工机A:B型号的相关知识与详情&#xff0c;但是&#xff0c;0.1-0.15 N/ mm范畴的密封唇载荷对新的密封是可承受的&#xff1b;关于80mm曲径的轴&#xff0c;那转换为25-40N范畴的总径向载荷。很多旋转接头弹性体唇形密封…

jsp是在html里面嵌入哪种代码?_奶茶店铺用哪种制冰机才合适?

像在这样炎炎的夏日&#xff0c;温度在直线飙升&#xff0c;茶饮市场最近可谓是异常火&#xff0c;店铺人流量一旦增多&#xff0c;还能保证每一杯饮品的质量吗&#xff1f;还能保证门店的制冰机产量能够跟上需求节奏吗&#xff1f;奶茶店铺用哪种制冰机才合适&#xff1f;今天…

redis哨兵主从不切换_《「面试突击」—Redis篇》-- Redis的主从复制?哨兵机制?...

Redis如何保证高并发&#xff0c;高可用&#xff1f;高并发&#xff1a;redis的单机吞吐量可以达到几万不是问题&#xff0c;如果想提高redis的读写能力&#xff0c;可以用redis的主从架构&#xff0c;redis天热支持一主多从的准备模式&#xff0c;单主负责写请求多从负责读请求…

run till exit from #0_华为认证hcip H13821 v2.0云服务考试真题每日一练(一)

1.微服务云应用平台(ServiceStage),可以完成以下哪些功能?(多选)A.创建应用依赖计算资源B.使用 AOS 模板自动化应用编排C.查看应用各项指标D.在线可视化升级应用E.容器应用需要自己在 Service Storage 上搭建容器管理平台,比如需自己搭建 kubernetes 管理 docker 容器应用Answ…

什么笔记本电脑好用_苹果笔记本好用吗?苹果笔记本怎么样?

阅读本文前&#xff0c;请您先点击上面的蓝色字体“科技论吖”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注&#xff01;苹果笔记本好用吗苹果笔记本好用吗?用苹果电脑最大的好处就…

apple ii 模拟器 mac_苹果自研芯片Mac价格曝光

11月3日凌晨&#xff0c;苹果又在官网宣布了今年秋季的第三场新品发布会将在北京时间2020年11月11日凌晨2点举行&#xff0c;这次发布会预计会带来搭载苹果自研Apple Silicon芯片的Mac产品。彭博社的报道显示&#xff0c;这次的新品发布会将会推出三款产品&#xff0c;分别是13…

win10文件夹加密_(十六)小众但好用:免费开源免注册的同步盘加密工具 Cryptomator...

之前写过同步盘加密工具 boxcryptor&#xff0c;今天给大家推荐另一款开源免费多平台的同步盘加密工具 Cryptomator。节省时间&#xff0c;直接开始。Cryptomator 官方网站&#xff1a;点击这里首先简单对比一下 Cryptomator 和 boxcryptor。Cryptomator 加密原理和 boxcryptor…

simulink仿真及代码生成技术入门到精通_Simulink仿真零基础入门到精通实用教学教程 自学全套...

Simulink仿真零基础入门到精通实用教学教程 自学全套&#xff0c;以教程文字为主&#xff0c;毕业论文和报告均可以借鉴。Simulink是电气工程必学的模型仿真专业工具软件&#xff0c;非常的实用。小编在全网中搜索都没有找到非常系统的学习教程和教材&#xff0c;想学习却找不到…

plupload怎么设置属性_店铺收银系统怎么用?好收银系统能提升店铺效率

经营一家店铺&#xff0c;无论是小型便利店还是大型超市&#xff0c;都少不了使用收益系统&#xff0c;那么常用的店铺收银系统要怎么用呢?店铺收银系统怎么用一款好用的收银系统&#xff0c;是可以起到提升店铺首页效率的&#xff0c;现在信息时代&#xff0c;不少收银系统开…

spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...

概况spring boot 实践学习案例spring boot 初学者及核心技术巩固的最佳实践目录『 Spring Boot 2 快速教程 』Spring Boot 2&#xff1a;WebFlux集成 ThymeleafSpring Boot 2&#xff1a;WebFlux集成 MongodbSpring Boot 2&#xff1a;WebFluxRestfulCRUD实践Spring Boot 2&…

aws php mysql,AWS快速搭建nginx+php+mysql

yum -y install nginxyum -y install php71yum -y install php71-fpm php71-cli php71-common php71-gd php71-devel php71-pdo php71-mysql php71-mbstringyum -y install mysql-server mysql-develnginx php做服务&#xff0c;在高并发的时候会出现一些错误 connect() to…

centos 8 kubernetes安装详解_8方面图文详解,电气安装工程施工工艺!

八方面图文解读电气安装工艺控制标准1盘、台、开关柜安装2电缆桥架施工3电缆敷设及接线施工4架空线及设备跳线施工5电力变压器安装6电气母线安装7防火封堵施工8成品保护意识一、盘、台、开关柜安装工艺控制标准1.1按设计图纸并根据厂家资料、尺寸误差要求制作盘底座。1.2立盘的…

c++代码健壮性_复活Navex-使用图查询进行代码分析(上)

从了解到修复 Navex, 其中花了一年多, 从对自动化代码审计一无所知到学习PL/Static Analysis, 翻阅十几年前的文档, 补全Gremlin Step, 理解AST, CFG, DDG, PDG, CPG, 也感谢z3r0yu师傅和Gaba哥的的交流指导.本文重点在于静态分析 Joern-图查询部分, 后面的动态分析自动生成EXP…

公文字体字号标准2020_一文了解公文格式规范,图文并茂(建议收藏备用)

本方法根据《党政机关公文格式国家标准》(GB/T9704-2012)制定。具体内容如下&#xff1a;一、办公软件要求适用于微软OFFICE—WORD文字处理软件。二、页面设置1.选择“文件”——“页面设置”选择“页边距”附签&#xff0c;上&#xff1a;3.7厘米&#xff0c;下&#xff1a;3.…