final修饰属性,则该属性不可再次改变,而且在初始化中必须在属性或者是构造方法中其中且中有一个中初始化它。
final修饰方法,则该方法不可被重写。(@override)
final修饰类,则不可被继承。(extends)
1:当内部类需要引用外部类的局部变量或者是传入的参数时那么该变量必须被定义为final:防止该变量在内部类和外部类表现为两个变量的情况发生,防止内部类对引用的变量进行重定向。
public class HttpUtils {
public static void getNewsJSON(final String url){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection con=null;
con=(HttpURLConnection) new URL(url).openConnection();
}
}).start();
}
public HttpUtils() {
// TODO Auto-generated constructor stub
}
}
在这里如果不把url定义为final那么就会认为在内部中的url和外部类的参数不是同一个。
2 其他情况:当你不让别人继承一这个类的时候, 用final 修饰该类. 当一个方法不想让别人重写的时候可以把这个方法用final修饰. 当定义一个常量的时候可以用final 修饰。
有时候我们再Java的方法里把参数定义为final主要原因如下:
作为一个正式的方法参数是一个局部变量,只有当它们被声明为final时,才可以从内部匿名类访问它们。这样可以避免在方法体中声明另一个本地最终变量。