A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 依然超级赛亚人 于 2014-8-13 08:09 编辑

final关键字问题请教,是不是final只能在成员变量范围内修饰变量,而不能在方法内部修饰变量呢,如下面这段代码:

class Father3
{
         void show(){
                int x=10;
                public static final  double MY_PI=3.14;//这里报错。
                System.out.println(x);
                System.out.println(MY_PI);
        }
               
}

4 个回复

倒序浏览
final可以修饰类、方法、既可以修饰成员变量和局部变量的。而public、private、static不能修饰局部变量,这些修饰符是修改类的属性或方法的。修饰了也没有什么作用。所以会报错
回复 使用道具 举报
方法内中的变量即为局部变量,也就是说,该变量只有在他所在方法被调用时候才会存在,所以没必要给他加权限和静态。一般加权限是为了在其他地方调用(能否倍调用是看调用者和被调用者之间的权限大小),而其他类不会单独去调用一个局部变量。如果加static静态之后,就会在内存中专门开辟一个空间来存他,而局部变量在他所在的方法结束后,就没有意义了,这样会浪费空间。final修饰是说在本方法范围内,只是该变量的值是不允许改变的。
回复 使用道具 举报
这是我看到了final的用法,可以看下。
Java中的final关键字通常的指的是“这是无法改变的”。它可能被做为三种的修饰词.------数据,方法,类。
一 final数据
1.在修饰基本类型时,表示它是一个常量,在定义时必须给予赋值.
   特别的一个既是static又是final 的字段只占据一段不能改变的存储空间。
2.在修饰对象或者数组时,它表示对对象或数组的引用恒定不变,然而对象本身却是可以修改的.
  空白final:声明为final但末给定初值的字段,但必须确保空白final在使用前被初始化,一般在构造方法完成。
  final参数:在方法的参数列表以声明的方式将参数指明为final,这意味着在方法里无法修改参数的引用所指向的对象。
二 final方法
1. 把方法锁定,使得在子类(导出类)中不能修改它的含义。
2.效率,一个final方法被调用时会转为内嵌调用,不会使用常规的压栈方式,使得运行效率较高,尤其是在方法体较简单的情况下,
   但也并不绝对。(与C++中的inline关键字类似)
特别的:类中的所有private方法都隐式地指定为是final,所以在继承关系中不存在覆盖问题。
三 final类
声明为final的类不能派生出了子类,也就是不能被继承,一个final类中的所有方法都隐式地指定为final.
回复 使用道具 举报 1 0
hejinzhong 发表于 2014-7-10 21:07
这是我看到了final的用法,可以看下。
Java中的final关键字通常的指的是“这是无法改变的”。它可能被做为 ...

恩,您说的都中肯,咱们平时学的差不多就是这些。不过,要想用好final,还得融会贯通一下,多练习一些经典题目才行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马