Java SE 自学笔记8 之 final修饰符

来源:互联网 发布:snare for windows 编辑:程序博客网 时间:2024/06/09 21:34
final 修饰符


final 可修饰
-- 变量:成员变量(类变量和实例变量)和局部变量(方法里的局 部变量和代码块的局部变量)
        -- 方法
-- 类


【final 修饰变量】
   
 ★final修饰成员变量

   -- Java 成员变量(Field),默认是可以由系统执行初始化,程序员可以不指定初始值


   -- final 修饰的成员变量(Field)则必须由程序员执行初始化,原因在 于由系统执行的初始化的值是0或者null,而且final修饰的变量的值   不能改变,因此这些变量就失去了         价值;


   1.final修饰实例变量,可在以下3个地方为实例变量指定初始值:定义时指定初始值、初始化块、构造器
     最多只能指定一次初始值,普通方法不允许为final实例变量赋值;

   2.final修饰类变量,可以在以下2个地方为类变量指定初始值:定义时指 定初始值、类(静态)初始化块
     最多只能指定一次初始值,普通类方法、普通方法、普通初始化块不能 为final类变量赋值;




 ★final修饰局部变量

   -- Java 的局部变量,默认 必须由程序员类指定初始值


   -- final修饰的局部变量,任然必须有程序员指定初始值,一旦指定了初 始值后,其值就不能改变


 ★final修饰的变量,会被执行“宏替换”
   -- final修饰的变量,声明时就指定了初始值,而且初始值在编译时就可 以确定,因此可以说这个变量不存在。(所谓“不存在”,就是执行了 “宏替换”--即“查找、替换”);


例如:
     class Final 
{
public static void main(String[] args) 
{
final String s1 = "Hello";
final String s2 = " Java ";
final String s3 = "World!";

        final String s4 = s1 + s2 + s3; 


//finali修饰的变量在编译时会被“宏替换”
//所以以上代码实际上定义了0个变量、1个对象

//这个对象就是 “Hello Java World!”


System.out.println(s4);
}
}


所以以上的代码完全可以等于


class Final 
{
public static void main(String[] args) 
{
System.out.println("Hello Java World!");
}
}


对这个例子,可以用 “Java -c 类名”命令来查看,查看的结果是二者完全一样。








 ★final方法
   -- final修饰的方法不能被重写(Override),其作用在于:禁止父类方法被重写,避免了父类被破坏;


   -- 因为private修饰的方法不能被重写,因此虽然final和private可以一起修饰方法,但是实际意义不大;


 


 ★final类
   -- final 类不能有子类
   -- final 修饰类是为了更加安全,由于没有子类,所以final类的方法和


field就可以被更好的保护;


   -- 典型的,Java中的Strin、Math和所有包装类都是final类。


  
原创粉丝点击