在编写代码的时候,我们应该遵循“安全构造”技术,即在构造函数里面,不将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是指住宅建筑中使用的各种构造技术和材料的综合应用。以下是相关的知识点: 一、住宅建筑构造的定义 住宅建筑构造是指住宅建筑过程中使用的各种技术和材料,以满足住房的功能和需求。它包括建筑...
1. **车辆结构与性能要求**:规定了场(厂)内机动车辆的基本构造、尺寸、稳定性、制动性能、转向性能等,确保车辆在设计阶段就具备足够的安全系数。 2. **安全装置**:要求车辆配备必要的安全装置,如紧急停止装置...
随着施工技术的日益进步和对劳动者权益保护意识的提升,对安全网的构造、材料选择和使用要求也提出了更高的标准。 首先,对于安全网的构造,它主要由网体、边绳、系绳和筋绳四大部分组成。网体是整个安全网的基础,...
- 安全技术操作规程:制定并装订成册,确保每个工种遵循标准操作。 - 专职安全员配置:根据工程规模设置相应数量的专职安全员,负责现场安全监管。 - 合同中的安全条款:经济承包合同中包含明确的安全指标和奖惩...
**基于MVC模式的电子商务平台构造技术研究** 在信息技术飞速发展的今天,电子商务已经成为商业活动的重要组成部分。构建一个高效、稳定且易于维护的电子商务平台至关重要。本文将深入探讨基于Model-View-Controller...
在现代建筑工程中,二次结构的施工质量直接影响着整体建筑的稳定性和使用功能,其中圈梁、构造柱以及门窗抱框柱的钢筋工程技术是确保结构安全的重要组成部分。《二次结构圈梁构造柱钢筋工程技术交底》作为一份详细的...
综上所述,这份《吊笼安全检查构造标准》全面地涵盖了吊笼设计和安全检查的重要细节,从材料选择到力学性能计算,为确保吊笼的安全运行提供了坚实的理论和技术支持。对于从事高空作业的工程团队和监管机构来说,理解...
本质安全防爆构造的设备设计和制造遵循严格的规范,目的是在正常工作或故障状态下不会点燃周围环境的爆炸性气体或粉尘,从而避免引发安全事故。这种防爆构造的接进开关型号包括ABCDEFG,如NL-N7MD1、NL-N12MD1和NL-...
- 架子的搭设应遵循一步一搭原则,不得随意分割,且需逐步完善各种安全构造。 - 在作业过程中,应设置安全警戒区域,专人监护,防止意外。 2. 模板工程安全技术交底: - 模板与支撑系统的搭设同样需要依据设计...
安全生产技术制度是企业在进行工程活动时必须遵循的重要规范,它涉及到企业组织结构、安全管理、事故预防、员工职责等多个方面。以下是对这份文档中关键知识点的详细解析: **第一章 平安保障系统** - 平安保障系统...
对象组织构造:消防安全信息系统软件技术方案将采用模块化设计,分为多个子系统,包括基本信息管理、应急资源管理、火灾隐患管理、报表记录、网上考核系统、资讯交流中心、公众服务中心等。 系统功能构造图:消防...
【路基工程基础及下部构造技术交底】 在路基工程中,基础及下部构造是关键环节,它们直接关系到道路的稳定性和耐久性。本技术交底主要涉及的是桥式通道挖孔灌注桩和系梁工程的技术要求。 **1. 挖孔灌注桩技术要求*...
安全设施技术交底则在这一过程中扮演了不可或缺的角色,它涉及了从设计到实施的多个方面,其中涵盖了安全护栏和隔离设施的详细规划。本文将对此进行深入解析,以期为相关技术人员提供完备的技术支持和指导。 首先,...
3. 安全编码:在应用开发中,遵循安全编码标准,避免漏洞的出现。 Android 安全漏洞挖掘技术是 Android 应用开发中不可或缺的一部分。开发者需要掌握相关的安全知识和技术,避免漏洞的出现,保护用户隐私和数据...
在此基础上,钻孔设计与施工技术要求需严格遵循工作面防突设计规范,合理规划孔间距一般控制在1至1.5米之间,以避免在施工过程中出现地质灾害和瓦斯超限等情况。 为了确保信息的准确传递和现场的有序管理,打钻施工...