在编写代码的时候,我们应该遵循“安全构造”技术,即在构造函数里面,不将this暴露给其它类。将this暴露出去有什么危险呢?接下来让我们来看一下,两种情况。
1. 显示的this暴露
public class FatherClass {
FatherClass(){
Listen listen = new Listen();
//在父类中将this暴露给了listen
listen.setFatherClass(this);
}
public void sayHello(){
System.out.println("Hello World!");
}
}
public class SubClass extends FatherClass {
private String name = null;
SubClass() {
super();
name = "frank";
}
//因为name对象还没有被初始化,因此name还是null
public void sayHello() {
System.out.println("Hello World " + name + "!");
}
//输出Hello World null!
public static void main(String[] args) {
SubClass s = new SubClass();
}
}
public class Listen {
public void setFatherClass(FatherClass f){
//调用sayhello方法,因为子类重写了父类的sayhello方法
//调用子类的sayhello方法
f.sayHello();
}
}
2.隐士的this暴露
public class FatherClass {
private String name = null;
FatherClass() {
Listen listen = new Listen();
生成匿名内部类,并且把内部类的this暴露给listen
listen.setInnerClass(new InnerClass() {
public void sayHello() {
sayHelloToMe();
}
});
name = "frank";
}
//name没有被初始化,输出null
public void sayHelloToMe() {
System.out.println("Hello World " + name + "!");
}
public static void main(String[] args) {
FatherClass f= new FatherClass();
}
}
public class Listen {
//调用innerclass的sayHello方法
public void setInnerClass(InnerClass f){
f.sayHello();
}
}
public class InnerClass{
//子类重写了sayhello方法,调用子类的sayhello方法
public void sayHello() {
System.out.println("Hello World!");
}
}
总结:对其它线程能够看见的还未完成构造的对象进行引用显然不是我们所期望的。归根结底,我们如何
正确辨别完全构造好的对象和尚未构造好的对象呢?但通过公布来自构造函数内的
this
引用 ― 直接或间接地通过内部类 ― 我们这样做时,会导致无法预料的后果。为了防止这种危险,在
创建内部类的实例或从构造函数启动线程时,尽量避免使用
this
。如果
无法在构造函数中避免直接或间接使用
this
,则确保不让其它线程看见
this
引用。
参考资料http://www.ibm.com/developerworks/cn/java/j-jtp0618/index.html#ibm-pcon
分享到:
相关推荐
本篇主要阐述了在进行桥梁下部构造施工时需遵循的技术安全措施。 1. **严格遵守规范**:所有作业人员应严格按照《公路桥涵施工技术规范》(JTJ 041-2021)、《建筑施工安全技术规范》等国家及行业标准执行,确保施工...
- 明挖基坑开挖时,应遵循安全边坡,禁止局部深坑掏土。 - 基坑周围应设置安全距离,基坑顶部有动载时,应保持适当距离或采取加固措施。 - 使用挡板支撑护壁时,应逐段支撑并检查合格后开挖,遇异常及时处理。 -...
标题涉及的煤层运输巷过地质构造带安全技术措施,主要关注的是在煤炭开采过程中遇到地质构造时如何保障作业安全。这些措施旨在预防潜在的水患、支护问题、爆破作业的风险以及确保工人安全。 描述中提到的38#煤层...
### 机运巷掘进工作面过地构造带安全技术措施 #### 一、背景与概述 在煤炭开采过程中,遇到地构造带是常见的现象。这些构造带由于其特殊的地质结构,往往会给掘进工作带来一定的挑战。1506机运巷掘进5米处遇到的...
住宅建筑构造11J930是指住宅建筑中使用的各种构造技术和材料的综合应用。以下是相关的知识点: 一、住宅建筑构造的定义 住宅建筑构造是指住宅建筑过程中使用的各种技术和材料,以满足住房的功能和需求。它包括建筑...
- 安全技术操作规程:制定并装订成册,确保每个工种遵循标准操作。 - 专职安全员配置:根据工程规模设置相应数量的专职安全员,负责现场安全监管。 - 合同中的安全条款:经济承包合同中包含明确的安全指标和奖惩...
**基于MVC模式的电子商务平台构造技术研究** 在信息技术飞速发展的今天,电子商务已经成为商业活动的重要组成部分。构建一个高效、稳定且易于维护的电子商务平台至关重要。本文将深入探讨基于Model-View-Controller...
《建筑施工高处作业安全技术规范JGJ80-91》是针对建筑施工过程中高处作业的安全标准,旨在确保工人在高空作业时的生命安全,遵循“预防为主,综合治理”的原则。本规范主要适用于工业与民用建筑以及一般构筑物施工...
综上所述,这份《吊笼安全检查构造标准》全面地涵盖了吊笼设计和安全检查的重要细节,从材料选择到力学性能计算,为确保吊笼的安全运行提供了坚实的理论和技术支持。对于从事高空作业的工程团队和监管机构来说,理解...
本质安全防爆构造的设备设计和制造遵循严格的规范,目的是在正常工作或故障状态下不会点燃周围环境的爆炸性气体或粉尘,从而避免引发安全事故。这种防爆构造的接进开关型号包括ABCDEFG,如NL-N7MD1、NL-N12MD1和NL-...
- 架子的搭设应遵循一步一搭原则,不得随意分割,且需逐步完善各种安全构造。 - 在作业过程中,应设置安全警戒区域,专人监护,防止意外。 2. 模板工程安全技术交底: - 模板与支撑系统的搭设同样需要依据设计...
安全生产技术制度是企业在进行工程活动时必须遵循的重要规范,它涉及到企业组织结构、安全管理、事故预防、员工职责等多个方面。以下是对这份文档中关键知识点的详细解析: **第一章 平安保障系统** - 平安保障系统...
《钻孔桩基础及下部构造技术交底》是一份重要的工程施工土建监理资料,它详细阐述了在港口沿溪桥建设中,钻孔桩基础和下部构造的技术要求、施工技术规范以及施工工艺流程。这份技术交底文档旨在确保工程质量,避免...
对象组织构造:消防安全信息系统软件技术方案将采用模块化设计,分为多个子系统,包括基本信息管理、应急资源管理、火灾隐患管理、报表记录、网上考核系统、资讯交流中心、公众服务中心等。 系统功能构造图:消防...
【路基工程基础及下部构造技术交底】 在路基工程中,基础及下部构造是关键环节,它们直接关系到道路的稳定性和耐久性。本技术交底主要涉及的是桥式通道挖孔灌注桩和系梁工程的技术要求。 **1. 挖孔灌注桩技术要求*...
安全设施技术交底是保障道路建设中人员和车辆安全的重要环节,主要涉及安全护栏和隔离设施的设计与实施。本文将详细解析其中的关键知识点...在实际工程中,必须严格遵循相关标准和技术要求,以保证道路设施的安全性能。
3. 安全编码:在应用开发中,遵循安全编码标准,避免漏洞的出现。 Android 安全漏洞挖掘技术是 Android 应用开发中不可或缺的一部分。开发者需要掌握相关的安全知识和技术,避免漏洞的出现,保护用户隐私和数据...
施工地点固定在采掘工作面,钻孔的设计和技术要求严格遵循工作面防突设计,孔间距控制在1至1.5米之间。同时,钻孔施工地点需要设立图牌板,清晰标注钻场信息和钻孔参数。 封孔质量是保证钻孔安全的重要环节。抽采钻...
本篇将深入探讨“技术交底及其安全资料库-扣件式钢管脚手架拆除安全技术交底”的相关知识,以确保在实际操作中能够遵循规范,保障工人安全。 一、技术交底 技术交底是工程实施前的一项重要工作,它涉及到对施工人员...