java的问题,那几个变量为什么要在前面假如final呢?

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class getSum {

//构造方法开始

getSum(){
JFrame sum = new JFrame("加法计算器"); //标题
sum.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭方法
sum.setSize(500,200);//大小
Container c = sum.getContentPane();
c.setLayout(new FlowLayout());//流式布局

//一共有三个文本框,分别是可编辑的两个输入数字,不可编辑的一个显示"+"

/*----------------------------------------疑问区----------------------------
//这里是第一个,t[]为什么非要设置成final呢?自己写的,怎么看都不用加- -
final JTextField t[] = {
new JTextField(10),new JTextField("+",5),
new JTextField(10)};

//增加一个文本框显示结果

//这里也是,为什么加final.....
final JTextField theSum = new JTextField(10);

----------------------------------------------------------------------------*/

//增加等于号的按钮并且用匿名内部类的方法实现相加的动作
JButton equal = new JButton ("=");
equal.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int first = Integer.parseInt(t[0].getText());
int second = Integer.parseInt(t[2].getText());
int he = first + second;
theSum.setText(""+he);
}
});

//将组件们添加进去
c.add(t[0]);
c.add(t[1]);
c.add(t[2]);
c.add(equal);
c.add(theSum);

t[1].setEditable(false);//设置"+"不可编辑

sum.setVisible(true);//设置可见

}
}
顺便,大家对我写的这程序有什么建议吗,随便给点哈,追加分。
还有,得到文本框中的数字的方法还有其他的吗?感觉这个很麻烦。而 getCode()方法每次只能得到一个按键,郁闷。
/*-----------------------------------------------------*/
一楼的哥们,说的有道理,可是为什么书中的例子,别人写的代码中都不用加final呢?他们也用的是匿名内部类的方法啊。求解答下 :)

在方法参数前面加final关键字就是为了防止数据在方法体中被修改。这里主要分两种情况:第一,用final修饰基本数据类型;第二,用final修饰引用类型。
第一种情况,修饰基本类型(非引用类型)。这时参数的值在方法体内是不能被修改的,即不能被重新赋值。否则编译就通不过。例如:
public void testInt(final int param1) {
param1 = 100;
}

在方法体内修改了基本数据类型变量的值,在Eclipse中则会提示:“ The final local variable param1 cannot be assigned. It must be blank and not using a compound assignment.“

第二种情况,修饰引用类型。这时参数变量所引用的对象是不能被改变的。作为引用的拷贝,参数在方法体里面不能再引用新的对象。否则编译通不过。例如:
public void testFinal2(final Object param2) {
param2 = new Object();
}
在方法体内修改了参数的引用,在Eclipse中则会提示:“ The final local variable param2 cannot be assigned. It must be blank and not using a compound assignment.“
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-24
1.final能干啥?
final修饰符 可以修饰 类 方法 属性
当修饰类时,该类不能被继承
当修饰方法时,该方法不能重写
当修改属性时,该属性不能变更堆栈地址(说白了就是不能再用=了)
所以final是个锁
2.为什么有些地方必须要用final,貌似楼主对这个很疑惑,我这两天正好在整理内部类的资料,我把代码发出来 你看看

===========以下为代码,我顺带说明了为什么要用final
class AnonymousOuter{
int outerInt;
Object anonymousMethod(){
int methodInt = 0;
final int finalMethodInt = 1;
return new Object(){
int innerInt;
/**
* 测试访问属性
*/
void testAccessProperty(){
System.out.println(innerInt);
//**
//匿名内部类看作类MethodOuterClass中的一个属性,其生命周期与类AnonymousOuter的对象一致;
System.out.println(outerInt);
//**/

/**
//以下这种方法不正确
//从生命周期的角度来说,methodInt的生命周期仅在代码块的范围内,当JVM执行到代码块结束时,属性methodInt的生命周期结束,此时匿名不在生命周期中
System.out.println(methodInt);
//**/

//**
//当属性被定义为final时,该属性被锁定不能修改其值;如果被内部类方法使用的话,该属性会作为内部类的一个不可变更值的属性。
System.out.println(finalMethodInt);
//**/

}

/**
* 测试创建对象
*/
void testCreateObject(){
AnonymousOuter outer = new AnonymousOuter();
Object inner = outer.anonymousMethod();
}
};
}
}
=====================
顺带补充一下:
你认为内部类、匿名类可以直接访问外部类的属性;
访问方法内部类、匿名内部类访问方法内的变量 需要使用final本回答被提问者采纳
第2个回答  2010-12-04
你在匿名内部类里面使用了方法中的临时变量,那个变量就需要加final修饰。
因为如果不加final,那个变量的生命将在方法结束时结束,但那个匿名内部类的对象仍然存在,它就需要访问一个已经不存在了的变量。加了final后生命周期延长,就不会有这个问题了。

其他建议,使用通用的java编程风格,比如类名首字母大写。本回答被网友采纳
第3个回答  2010-12-04
final 定义的为常量,常量是不能修改的
第4个回答  2010-12-04
final修饰符标示该变量是不可变的
相似回答