java 如何使成员方法不改变数据成员 java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道LZ为什么需要考虑这种情况,一般来说,使用者不能通过get方法来改变数据成员啊,当然通过反射和复写除外对于第一问,一种我认为非常勉强的方法是public int getData() { final int d = data; return d; }事实上,我觉得这个没多大意义~第二问答案是否定的,因为set中的data是个形参,和类的成员data是两个不同的变量~ 第一个java没有cpp的const机制 要靠你自己检查了第二个 int是值传递的 传参时会复制一份 话说java编译器没有这种功能吧,编译的时候还检查这事情?按我的理解。基本类型变量在赋值的时候都是产生全新的一个数据,不会前后影响,所以加不加final都是一样的。 这个要靠你自己实现吧。。既然你用get和set方法,那就应该是实现者的责任来确保合理操作,你怎么倒把责任往编译器上推。。如果你这方法很长很复杂你自己又怕写代码不小心,那1L的办法也行,在最前面就用局部变量做一个copy,之后不再操作类成员。public int getData() { final int d = data; return d;} 你在构造器里先设置这个参数,然后封装他 不提供setter方法就可以 在C++中,如果想要确保一个函数不改变类的数据成员,那么在函数声明后面加一个const即可,如果试图在该函数中修改数据成员,编译器就会报错。如int getData() const { } , 但是在JAVA中,貌似没有这种机制? 方法前面加final,不是表示不可重写的意思吗? 对于第一问,我的意思是“程序员本身是不想在getData()这个方法中,修改任何数据成员的“,但是一旦代码长了,可能就会乱了。我之前学的C/C++,它是在函数后面加一个const,这样就能确保该函数不改变数据。想问一下java有没有这种机制。第二个问题请忽略之,加了final就能确保基本数据类型的参数不改变了 我来总结一下吧。JAVA中并不像C++那样能确保你的方法(或函数)不去改变类的数据成员,如果确实怕方法中会改变数据成员,可以先复制一份,再在这个副本上进行操作,这些都得靠程序员自己去完成,而不能依赖于编译器。但是如果是引用型的变量,那么这个复制的操作就会比较耗资源了。 你多写点Java代码就知道了~我觉得你的担心完全是多余的! 你多写点Java代码就知道了~我觉得你的担心完全是多余的!正在学习中,请多指教!这是JAVA面试题(不是我举的例子,而是方法中不改变数据成员) java大牛们进来帮忙啊 openfile+extmail整合,用户信息同步 子类怎样调用父类的方法? 变量命名问题 做代码就是当牛做马 请教:在Ecplise能启动TOMCAT,而在LOMBOZ中。。。 求socket怎么样在服务端群发消息? 请问我在编译时遇到以下问题,怎办? 请问那位大哥大姐能告诉我 我刚学java 笔记中不明白的知识点. 初学者对于超类和子类的简单问题,请高手赐教! 【讨论】关于大量零碎文件的处理 java的list排序问题
final int d = data;
return d;
}事实上,我觉得这个没多大意义~第二问答案是否定的,因为set中的data是个形参,和类的成员data是两个不同的变量~
既然你用get和set方法,那就应该是实现者的责任来确保合理操作,你怎么倒把责任往编译器上推。。
如果你这方法很长很复杂你自己又怕写代码不小心,那1L的办法也行,在最前面就用局部变量做一个copy,之后不再操作类成员。
public int getData() {
final int d = data;
return d;
}
我觉得你的担心完全是多余的!
我觉得你的担心完全是多余的!正在学习中,请多指教!这是JAVA面试题(不是我举的例子,而是方法中不改变数据成员)