`

构造函数使用不小心的一个大问题

 
阅读更多
错误的代码: 
public class Secure {
private   String type;
 private   String fileKey = type+"File:";
 private   String totalKey = type+"s";

 Secure(String type){
        this.type = type;
}
}

在这种情况下fileKey的值一直是nullFile.构造函数改变了type的值,但是改变不了fileKey的值.


正确的代码:
public class Secure {
private   String type;
private   String fileKey ;
private   String totalKey ;
 
Secure(String type){
        this.type = type;
   this.fileKey = type+"File:";
     this.totalKey = type+"s";
}
}



可以参照我的github的项目: https://github.com/huangyunbin/hadoopSecure/commit/64d7b2780393a858b10dda06951dd04a09d7f295
0
4
分享到:
评论
6 楼 huangyunbin 2013-08-03  
ssssgoldhunter 写道
private   String type; 
private   String fileKey = type+"File:"; 
private   String totalKey = type+"s"; 
3个参数在类加载时被直接加载了,此时的type是null
而构造函数是后面用的当然显示出来的值是null + file的值


呵呵 是啊.一时没注意就犯了这个错
5 楼 huangyunbin 2013-08-03  
zjuttsw 写道
这是不是说明实例变量的赋值发生在构造方法调用之前。

是的
4 楼 zjuttsw 2013-08-03  
这是不是说明实例变量的赋值发生在构造方法调用之前。
3 楼 ssssgoldhunter 2013-08-03  
private   String type; 
private   String fileKey = type+"File:"; 
private   String totalKey = type+"s"; 
3个参数在类加载时被直接加载了,此时的type是null
而构造函数是后面用的当然显示出来的值是null + file的值
2 楼 huangyunbin 2013-08-03  
testlogin123 写道
this.type哪里定义?


sorry ,我忘记copy过来了.也是个字段来着.我改下
1 楼 testlogin123 2013-08-03  
this.type哪里定义?

相关推荐

    拷贝构造函数..........

    - **资源管理**:拷贝构造函数涉及到资源的复制和管理,必须小心处理,避免资源泄露或不正确的资源使用。 - **异常安全**:在拷贝构造函数中处理异常非常重要,确保在复制过程中出现异常时能够正确清理已经分配的...

    关于在类的构造函数和析构使用临界区函数导致的多线程死锁的一个经验之谈

    本文将讲述一个关于在类的构造函数和析构使用临界区函数导致的多线程死锁的经验之谈。 首先,让我们先了解什么是临界区函数。临界区函数是一种用于保护共享资源的机制,当多个线程访问同一个共享资源时,临界区函数...

    C++构造函数.pdf

    在C++中,构造函数的初始化列表是构造函数体外使用冒号":"后跟一个或多个初始化器的列表。初始化列表用于初始化类的成员变量。C++标准建议使用初始化列表来初始化成员变量,因为这样做通常会更高效,可以避免先默认...

    Java反射获取私有构造函数、属性、方法

    Java 反射机制获取私有构造函数、属性、方法的原理和应用 Java 反射机制是 Java ...Java 反射机制获取私有构造函数、属性、方法是 Java 语言中非常强大和灵活的机制,但需要非常小心和谨慎地使用,以避免安全风险。

    Spring Bean重复执行两次(实例被构造两次)问题分析

    7. **XML配置中的标签误用**:在XML配置中,如果不小心在同一个配置文件中声明了同一个Bean两次,或者在多个配置文件中重复声明,也会导致Bean被实例化两次。 解决这个问题的关键在于深入理解Spring的Bean生命周期...

    由 TypeInitializationException 引起的问题

    TypeInitializationException 的问题解决方案 ...在解决这个问题时,需要等待类型构造函数完成,然后再执行其他操作。此外,需要格外小心地使用 Thread.Abort(),以避免 TypeInitializationException 异常的发生。

    C#net反射实现访问类中的私有变量或者方法

    在上述代码中,我们定义了一个名为`ChangeValue`的类,该类包含一个私有字符串变量`myValue`和两个公共方法:构造函数和`WriteLine`方法。`Test`类中的`Main`方法则演示了如何使用反射来修改`ChangeValue`类实例中的...

    KThread和TCB的构造顺序分析

    在上面的代码中,我们可以看到,KThread的构造函数中创建了一个新的TCB对象。这意味着,TCB是在KThread的构造过程中创建的。 但是,在分析KThread和TCB的构造顺序时,我们需要注意一个重要的问题,即谁先构造谁?是...

    c++注意事项

    复制构造函数用于创建一个新对象作为另一个已存在对象的副本,通常用于以下场景: - 函数参数或返回值需要传递对象时。 - 使用默认拷贝构造函数可能会导致浅拷贝问题时。 - 对象被用作容器(如 vector)元素时。 ...

    JavaScript中constructor()方法的使用简介

    在JavaScript编程语言中,constructor()方法是一个非常重要的概念,它属于对象的一个属性,用于指明创建该对象的构造函数。对初学者来说,理解constructor()方法是学习JavaScript对象和原型链的基础。 首先,...

    javascript中使用new与不使用实例化对象的区别

    还有一个JavaScript中的模式是使用工厂函数来创建对象,工厂函数可以封装new操作,确保总是返回一个对象实例,而不是不小心使用不带new的构造函数调用: ```javascript function createPerson(name, age, job) { ...

    C++特殊语法

    拷贝构造函数是一种特殊的构造函数,用于创建一个新对象作为现有对象的副本。拷贝构造函数的参数通常是同一类的引用类型,如类A的拷贝构造函数可以这样声明:A(const A& other)。 4. 类成员访问权限 在C++中,类的...

    深入C++的new关键字

    当使用new关键字在堆上动态创建一个对象时,new实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。如果创建的是简单类型的变量,那么第二步会被省略。 3. new的三种形态 new可以分为三种形态:...

    C++编程规范

    - **5.2.13 在构造函数中使用构造函数初始化而不使用赋值语句** - 构造函数初始化列表更高效且减少了出错的可能性。 - **5.2.14 构造函数初始化时不要调用成员函数** - 成员函数可能还未完全初始化。 - **5.2.15 ...

    高质量C++编程

    - **实践**: 变量名使用小驼峰命名法(camelCase),函数名使用大驼峰命名法(PascalCase)。 **3.2 简单的WINDOWS应用程序命名规则** - **知识点**: 针对特定平台(如Windows)的应用程序命名规则。 - **实践**: ...

    More_effective_c++(中文版)

    虽然缺省构造函数可以方便地创建一个对象,但它们有时会导致不必要的副作用,尤其是在包含子对象或需要初始化状态的情况下。为了确保对象的正确初始化,最好是显式声明构造函数,并在其中初始化所有成员,这样可以...

    摩托罗拉C++面试题

    (最好这个项目继承,多态,虚函数都有体现)这个问题大概会占面试时间的一半,并且会问很多问题,一不小心可能会被问住)。 。。。 12。基类的有1个虚函数,子类还需要申明为virtual吗?为什么。 不申明没有关系的...

    myeclipse快捷键

    - 当不小心进行了错误操作时,这两个快捷键可以帮助你轻松修正。 4. **Ctrl+F(查找)** - 打开查找对话框,可以在当前文件内搜索文本。 - 当你需要在文件中搜索某个关键词时,Ctrl+F 非常有用。 #### 五、其他...

Global site tag (gtag.js) - Google Analytics