黑马程序员技术交流社区
标题: final关键字 [打印本页]
作者: H-Deka 时间: 2014-3-27 18:04
标题: final关键字
程序中使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?求解释
作者: 橡皮-leo 时间: 2014-3-27 19:58
class KeyWord{
//final修饰的变量是不允许改变的。
public final int NUM = 5;
public static void main(String[] args)
{
KeyWord kw = new KeyWord();
//在对象引用的时候也是不允许的
// kw.NUM = 4;
}
}
作者: 郭黎明 时间: 2014-3-27 20:07
被final修饰的属性只能被赋值一次,被final修饰的类不可以被继承,被final修饰的方法不可以被子类重写
作者: ___________゛M 时间: 2014-3-27 20:41
final修饰的变量,只能初始化一次, 初始化后其值不能再被 改变。 赋值可以在静态代码块中 , 或者其构造方法中去进行赋值 及定义的时候就进行赋值 。 可以用以上三种方式进行赋值。
作者: 枫露 时间: 2014-3-27 22:38
1:这个关键字是一个修饰符,可以修饰类,方法,变量。
2:被final修饰的类是一个最终类,不可以被继承。
3:被final修饰的方法是一个最终方法,不可以被覆盖。
4:被final修饰的变量是一个常量,只能赋值一次。
作者: 路西法 时间: 2014-3-28 01:09
这个涉及到一个“宏变量”的概念 老毕视频里好像没提到 你可以自己看看
如果定义final变量时就指定初始值,而且这个初始值可以在编译时就确定下来,系统会将其当成“宏变量”
而所谓的宏变量 其实就跟常量一样使用 比如 final int a = 1234;那么在这个程序中a也就一直是个常量了,他不能再被当做变量用来赋值了
作者: 龙健 时间: 2014-3-28 18:53
本帖最后由 龙健 于 2014-3-28 18:55 编辑
应用不能变,应用的对象是可以变的,给你举个例子
- public class Resolve {
-
-
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
-
- final Demo1 demo;
- demo = new Demo1();
- //demo=new Demo1();//不可以改变其引用
- demo.str1="my"; //str是Demo1类中的一个字段,其结果为hello world ,这里可以给他重新赋值
- System.out.println(demo.str1);//这里的结果为my,可以改变对象里面的值
-
- }
- }
复制代码
作者: 你好!默默 时间: 2014-3-28 21:40
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
final StringBuffer a=new StringBuffer("immutable");执行如下语句将报告编译期错误:
a=new StringBuffer("");但是,执行如下语句则可以通过编译:
a.append(" broken!");
作者: muma 时间: 2014-3-28 22:18
被final修饰的变量只能被赋值一次并且不能改变,被final修饰的类不可以被继承,被final修饰的方法不可以被子类重写
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |