final作用与数据来说,是不是只要不是基本的数据类型,就可以发生改变呢?
比如:
class finalData{
final int arr[]={1,2,3,4,5,6};
}class AccessTest{
public static void main(String args[])
{
final finalData fa=new finalData();
for (int i=0; i<fa.arr.length; i++)
{
fa.arr[i]++;
System.out.print(fa.arr[i]);
}
}
}这样的话,还定义数组arr为final有什么目的呢?
比如:
class finalData{
final int arr[]={1,2,3,4,5,6};
}class AccessTest{
public static void main(String args[])
{
final finalData fa=new finalData();
for (int i=0; i<fa.arr.length; i++)
{
fa.arr[i]++;
System.out.print(fa.arr[i]);
}
}
}这样的话,还定义数组arr为final有什么目的呢?
解决方案 »
- RandomAccessFile类向文件写汉字字符串问题
- [急的如火]java和存储过程的问题!!!急
- 请大家帮个忙,看看为什么我不显示日期
- 各位高手,帮忙一下,解决时间问题
- 一个Datagram Socket 能不能同时和多个目标地址通信?
- 求java 文本导入到处的源码。
- 请问哪里有JDK1.2版本的下载链接?
- VJ6.0 入门问题
- 在applet中的URL问题
- java中HashSet集合中存入同一个对象,为什么不会自动调用equals方法
- 在WINDOWS+WEBLOGIC8.1可以正确下载,在UNIX+WEBLOGIC8.12确不能下载,这是为什么?(急)
- 请问Java中字体的高度如何取得?
定义为final类型得对象(数组可以看作一种特殊得对象)是不能修改其地址得
例如你如果写 fa.arr = new int[6];就不行
final Object 不可以改变引用,但可以改变属性
final Method 不可以overwrite
final Class 不可以被继承
-----------
请指正
这句是final的对象把?
而不是arr的元素的值?
表示数组arr具有final属性,即3楼提到的final Object(在java中数组是按照Object来进行处理的).
因此,不可以改变arr的引用,如:
arr = new int[6]; //出错, arr引用了新的数组对象
但是,可以改变arr本身的属性,如:
arr[2] = 10;
以下代码运行结果如下:
E:\java>java Test2
Test.f(): 6
Test2.f(): 10.0
Test.f(): 6
Test.f(): 6
-----------------------------------
class Test {
final void f(int i, int j){
System.out.println("Test.f(): " + (i+j));
}
}
public class Test2 extends Test {
final void f(double i, double j) {
System.out.println("Test2.f(): " + (i*j));
}
//final void f(int i, int j){} 不可以override
public static void main(String args[]) {
Test2 t = new Test2();
t.f(2,4);
t.f(2.5,4);
Test t2 = new Test2();
t2.f(2,4);
Test t3 = new Test();
t3.f(2,4);
}
}
如果是基本数据类型,则表示是常量
如果是引用变量,则意味着不能让该变量指向其他的对象
如果是类,则表示不允许任何类扩展该类,也就不能声明新的子类继承它了
如果是方法,则该方法不允许进行覆盖,但重载是没问题的。
这样清楚吧? :)
另:方法重载应该指在同一类中定义多个同名的不同方法。
class Test {
final void f(int i, int j){
System.out.println("Test.f(): " + (i+j));
}
}
public class Test22 extends Test {
final void f(double i, double j) {
System.out.println("Test2.f(): " + (i*j));
}//父类方法被子类覆盖
//final void f(int i, int j){System.out.println("Test2.f(): " + (i*j));} //不可以override
public static void main(String args[]) {
Test t = new Test22();
t.f(2,4);
Test22 t1 = new Test22();
t1.f(2.5,4);
Test t2 = new Test22();
t2.f(2,4);
Test t3 = new Test();
t3.f(2,4);
}
}
final 引用 此引用本身不可改变.(不可引用别的对象) 但此对象的内容无影响.
final 方法 不可以重写.
final 类 不能继承.