在方法参数中使用final 有什么用?
1常量(final)的设置是不是只是为了防止程序员在以后修改程序时,忘记这个值是不能修改的?如果假设“程序员一定记得”这个值不允许改变,那么就可以不设为final吧?2有...
1 常量(final)的设置是不是只是为了防止程序员在以后修改程序时,忘记这个值是不能修改的?如果假设“程序员一定记得”这个值不允许改变,那么就可以不设为final吧?
2 有些方法的参数中会声明参数为final,这样用有什么用? 例如 public A(final Map map); 展开
2 有些方法的参数中会声明参数为final,这样用有什么用? 例如 public A(final Map map); 展开
6个回答
展开全部
1 常量(final)的设置是不是只是为了防止程序员在以后修改程序时,忘记这个值是不能修改的?如果假设“程序员一定记得”这个值不允许改变,那么就可以不设为final吧?
程序员工作不是一个人的工作,你设置为final,别人将来维护的时候一看就知道这个变量不能修改,而不需要去记忆这个是不能变化的值,是常量。这个是代码规范。
另外final常量一般设置为static的,一定程度上节省了内存开销。
2 有些方法的参数中会声明参数为final,这样用有什么用? 例如 public A(final Map map);
参数声明为final就是标明这个对象的内存地址不允许修改。即就是如果你在方法里面修改为
map =new HashMap();是不允许的。但是map里面的值可以修改。
举一个例子
public class Test {
public static void main(String[] args) {
Map map = new HashMap();
process(map);
System.out.println(map.keySet().iterator().next());//结果输出aaa
}
private static void process(final Map map) {
map.put("aaaa", "1111");//尽管map为final,但是只是地址不变
//map里面的内容可以改变
//map = new HashMap();//当从新为final变量map分配内存地址,
//引起编译错误,因为final修饰的map内存地址不可以改变。
}
}
程序员工作不是一个人的工作,你设置为final,别人将来维护的时候一看就知道这个变量不能修改,而不需要去记忆这个是不能变化的值,是常量。这个是代码规范。
另外final常量一般设置为static的,一定程度上节省了内存开销。
2 有些方法的参数中会声明参数为final,这样用有什么用? 例如 public A(final Map map);
参数声明为final就是标明这个对象的内存地址不允许修改。即就是如果你在方法里面修改为
map =new HashMap();是不允许的。但是map里面的值可以修改。
举一个例子
public class Test {
public static void main(String[] args) {
Map map = new HashMap();
process(map);
System.out.println(map.keySet().iterator().next());//结果输出aaa
}
private static void process(final Map map) {
map.put("aaaa", "1111");//尽管map为final,但是只是地址不变
//map里面的内容可以改变
//map = new HashMap();//当从新为final变量map分配内存地址,
//引起编译错误,因为final修饰的map内存地址不可以改变。
}
}
推荐于2017-09-09 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:25897
获赞数:1464978
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。
向TA提问 私信TA
关注
展开全部
final:不可改变的意思
final变量:必须初始化一次,不可改变(不过在某些特殊情况下可以通过特殊的方法改变,比如在构造器中初始化的变量可以通过反射改变)。
final方法:不可重写。
final类:不可被继承。
final变量:必须初始化一次,不可改变(不过在某些特殊情况下可以通过特殊的方法改变,比如在构造器中初始化的变量可以通过反射改变)。
final方法:不可重写。
final类:不可被继承。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
final不是为了提醒程序员这个值是不能修改的。而是一些值在该程序的使用中是不允许被修改的,则会用到final。如 public A(final Map map);中,使用final修饰符后,map对象相当于只读,在A方法中就不能再对map进行修改。
更多追问追答
追问
程序是人写的……程序员不给修改的操作,那个值怎么会被改啊……
追答
1、final类
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
2、final方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
3、final变量(常量)
用final修饰的成员变量表示常量,值一旦给定就无法改变!
final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
另外,final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
4、final参数
当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
final 对于常量来说,意味着值不能改变。但是对于变量来说又不一样,只是标识这个引用不可被改变,但如果f本身有方法修改其中的成员变量,例如是否可读,是允许修改的。形象的比喻:一个女子定义了一个final的老公,这个老公的职业和收入都是允许改变的,只是这个女人不会换老公而已。
程序的确是人写的,但是为了程序的灵活性,高效性,程序员不能只为了自己的一时想法写代码。而应该联系以后程序的扩展,维护等。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.final 可以修饰类,属性,和方法。
2.修饰类则该类不能被继承,修饰属性则属性值不能被改变,修饰方法则方法方法被重写。
3.public A(final Map map); 你这里是final 修饰自变量的情况,这时候map就是一个只读的变量,是不能够呗修改的。
java编程思想的第6章,类再生里面有讲final关键字的,挺好的,可以看看。
2.修饰类则该类不能被继承,修饰属性则属性值不能被改变,修饰方法则方法方法被重写。
3.public A(final Map map); 你这里是final 修饰自变量的情况,这时候map就是一个只读的变量,是不能够呗修改的。
java编程思想的第6章,类再生里面有讲final关键字的,挺好的,可以看看。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种做法一般用来提醒以后看、修改代码的程序员,这个参数从头到尾都是用的是传进来的值,中间不能也不会改变,减少不小心赋值带来的副作用。该变量大都会在方法从头到尾都使用,而不仅仅是方法开始使用。
你上面的参数中,map本身不会修改,但是 map.put() map.clear() 还是可以使用的。
你上面的参数中,map本身不会修改,但是 map.put() map.clear() 还是可以使用的。
追问
恩……我知道传对象只是传“指针”这个概念……虽然java没有指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询