java中final关键字



package frank;
public class App
{
	public static void main(String[] args)
	{
		Person p = new Person();
		final String s1 = "1";//使用final 把它变成宏变量,仅限直接量。
		//s1 = "1"; 这样子赋值后就不会是宏变量
		final String s2 = "2";//使用final 把它变成宏变量,仅限直接量。
		String s3 = "12";
		String s4 = s1 + s2;//执行宏替换,如果不用final修饰,那么就不会执行宏替换。
		System.out.println(s3 == s4);//输出true,如果不用final变量修饰,那么就不会再编译期间确定值了,最终结果就会使false,所以不会跟s3指向常量池中同一个对象。
	}
}
class Person
{
	public final int age;//只能在普通代码块和构造方法中赋值或者直接量,且只能有一个地方对其赋值。
	public final static int weight;//只能在静态代码块赋值,或者直接量。只能赋值一次。
	{
		age = 20;
	}
	static
	{
		weight = 20;
	}
	public Person()
	{
		//age = 20; 报错
	}
	public void test(final String str)
	{
		//str = "1"; //报错,不能对final修饰的形参重新赋值。
		final String s2;
		s2 = "2";
		//s2 = "3"; //不能对final修饰的局部变量进行第二次赋值。
	}
}

  

如果是final修饰的成员,系统不会给默认值,就算系统给了默认值也是一个没有意义的值。所以在没赋值之前去访问的话就会抛异常。如果在编译期间就能确定的值就是“宏变量”,只能是直接量,例如:final int a = 10;System.out.println(a);相当于System.out.println(10);系统会把实际值传递给方法。

 final修饰方法:一个方法被final修饰后那这个方法就不能被重写,但是可以重载。如果类用final修饰的话表示该类不能被继承。比如:java.lang.Math包下面的类就不能被继承。

 

posted on 2013-08-05 14:09  wp456  阅读(213)  评论(0)    收藏  举报

导航