码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础系列--final关键字

时间:2018-02-28 12:51:20      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:不同   继承   构造器   eth   static   对象   string类   pos   方法调用   

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8482909.html

一、概述

  final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。

  有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。

二、作用

2.1 final修饰变量

  变量被final修饰就会变成为常量,常量被保存在方法区中。

  变量一旦被final修饰,必须手动进行初始化,未进行初始化的final常量是无法通过编译的。

  如果只有final修饰的变量的初始化可以采用:

    --定义时赋值

    --代码块赋值

    --构造器赋值

  如果被static和final同时修饰的变量的初始化可以采用:

    --定义时赋值

    --静态代码块赋值

  一旦final变量被static修饰,那么它就脱离了对象的组织(代码块、构造器都是对象的组织),升级为类的组织,所以需要在类级别的静态代码块中进行初始化。

1 public class FinalTest {
2     final int i = 1;
3     int j = 2;
4     static int m = 3;
5     static final int n = 4;
6 }

  或

 1 public class FinalTest {
 2     final int i;
 3     int j;
 4     static int m;
 5     static final int n;
 6     {
 7         i = 1;
 8     }
 9     static {
10         n = 3;
11     }
12 }

  如果将上面的代码改成:

1 public class FinalTest {
2     final int i;
3     int j;
4     static int m;
5     static final int n;
6 }

  上面代码第2行和第5行会报错,原因就是未进行初始化。

  那么我们总结下final和static的现象,用于区分二者:

    static修饰将内容脱离对象成为类成员。

    final修饰将内容改造成必须被手动初始化的成员,一旦赋值,不再改变。

  二者可以同时存在,各起各的作用。

2.2 final修饰方法

  被final修饰的方法,可以被子类继承,但是不能被子类重写,也就是说这个方法在此以后其内部的实现就是固定不变的了,不能被改变。

2.3 final修饰类

  被final修饰的类,被称之为最终类,其不再拥有子类,不可再进行扩展,最常见的final类就是String类。

  String类被final修饰之后,其每个对象都是不变的,一旦定义就不再发生改变。

2.4 final修饰局部变量

  final修饰的局部变量,如果方法的参数被final修饰,那么这个参数的值在从方法调用时赋值开始就不能再改变,不能被重新赋值(不能改成他值)。

  最常使用的地方就是局部内部类在访问方法的局部变量的情况下,这些局部变量就需要使用final修饰,因为当局部内部类访问局部变量时,会放大局部变量的作用域,局部变量一般在方法结束时就失效了,但是却有可能任然被内部类的对象持有使用。将该局部变量定义为final之后,它不再保存于栈空间,而是保存在方法区中,自然不会因为方法的结束而丢失。

1     public void outMethod(){
2        final int s = 1;
3         class innerClass{
4             public void innerMethod(){
5                 System.out.println(s);
6             }
7         }
8     }

  如果去掉第2行的final,第5行就会报错。

 

Java基础系列--final关键字

标签:不同   继承   构造器   eth   static   对象   string类   pos   方法调用   

原文地址:https://www.cnblogs.com/V1haoge/p/8482909.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!