`

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

 
阅读更多
错误的代码: 
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++面试题

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

    吉林大学软件学院卓班设计模式第二次作业

    2. 上边CharPic中,通过重载构造函数创建字符图像,但构造函数的语义不是非常直观,使用也需要特别小心。请试一试将重载的构造函数改成(简单)工厂方法,使得语义更清晰。 3. 考察完成的代码,你会发现: a) 在构造、...

    C语言FAQ 常见问题列表

    o 4.10 如果我不使用表达式的值, 我应该用 ++i 或 i++ 来自增一个变量吗? o 4.11 为什么如下的代码 int a = 100, b = 100; long int c = a * b; 不能工作? o 4.12 我需要根据条件把一个复杂的表达式赋值给两个...

    你必须知道的495个C语言问题(PDF)

    3.10 如果我不使用表达式的值, 我应该用++i 或i++ 来自增一个变量 吗? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.11 为什么如下的代码int a = 100, b = 100; long int c = a * b;...

    微信小程序错误this.setData报错及解决过程

    先说原因: function声明的函数和箭头函数的作用域不同,这是一个不小心坑的地方。... 箭头函数不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误 箭头函数不可以使用argumen

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的 方法是不同的。 三、Qt Creator 登录对话框(原创) 实现功能: 在弹出对话框中填写用户名和密码,按下登录按钮,如果用户名和密码均正确...

    c#学习笔记.txt

    readonly声明一个字段,该字段只能赋值为该声明的一部分或者在同一类的构造函数中。 sealed指定类不能被继承。 static声明属于类型本身而不是属于特定对象的成员。 unsafe声明不安全的上下文。 virtual在派生类中...

    Effective+C+++3rd+chm+中文版(代码加亮)

    例如,在 Chapter 2(第二章),我希望能告诉你关于 constructors(构造函数),destructors(析构函数),以及 assignment operators(赋值运算符)正确实现的全部内容,但是我假设你已经知道或者能在别处找到这些...

    AdS 2中径向算子的功能决定因素

    该方法依赖于一些众所周知的技术,使用轮廓积分和散射理论构造的Jost函数来计算函数行列式。 我们的工作概括了一些已知的平面空间结果。 还考虑了适形AdS 2几何的扩展。 我们从全息14 $$ \ frac {1} {4} $$ -BPS...

    asp.net知识库

    静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何...

    LINGO软件的学习

    LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: ...

    remez算法matlab代码-polyrat:多项式和有理函数库

    有理逼近问题仍然是一个开放的研究问题。 该库提供了多种用于构建有理近似的算法,包括: 安装 > pip install --upgrade polyrat 文档 托管在阅读文档上。 用法 使用 PolyRat 遵循 . 例如,构造切线函数的有理逼近 ...

    Effective C++ 中文版

    条款25:考虑写出一个不抛异常的swap函数 5.实现 条款26:尽可能延后变量定义式的出现时间 条款27:尽量少做转型动作 条款28:避免返回handles指向对象内部成分 条款29:为“异常安全”而努力是值得的 条款30...

    大名鼎鼎SWFUpload- Flash+JS 上传

    所有这些事件都可以在一个SWFUpload实体中被调用,这意味着在这些事件对应的函数中,你可以用 this 关键字来代替引用SWFUpload实体。  + fileDialogComplete (number of files selected)  - 触发条件  1. 用户...

    华为编程开发规范与案例

    结果打印出来的数据正常,不可能为零,仔细查看相关代码,问题只可能在指针移位上有问题,果然在函数中发现一处比较隐蔽的错误。 /* 功能:一个BM模块内所有小区CDB侧广播消息忙闲情况 */ /***************************...

    教职工信息管理系统-结课作业C++

    (3)使用继承的方法构造3个类,(即雇员类——虚基类,教师类和工人类——派生类)使用相应的对象放置10个(或以上)职工信息。 (4)编写同名display()成员函数,用来输出数组的内容。 (5)按不同类别输出职工...

    Python Queue模块详细介绍及实例

    可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。 将一个值放入队列中 q.put(10) 调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item

    Symbian OS C++高效编程

    OS的异常 102.1 异常退出函数 102.2 使用new(ELeave)进行基于堆的内存分配 122.3 构造函数与析构函数 132.4 使用异常退出函数 142.5 用TRAP和TRAPD捕获异常退出 152.6 LeaveScan 202.7 小结 21第3章...

    Python Queue模块详解

    可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。 将一个值放入队列中 q.put(10) 调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,...

Global site tag (gtag.js) - Google Analytics