final的定义:

  在英文层面上,final的意思是"最后的","最终的"意思,在Java中也同样表示出此种含义。

  final的运用对象:

  final适用于修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。

  final修饰类:

  由于final定以后的对象不能进行修改和重载,用final修饰的类不能被继承,即不能拥有自己的子类。如果视图对一个已经用final修饰的类进行继承,在编译期间或发生错误。

  final修饰变量:

  一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。

  这里需要注意以下几个问题:

  1. final修饰的变量,无论是类属性、对象属性、形参还是局部变量,这些变量都是需要进行显示初始化(即为其显示指定初始值)。

  对于final修饰的形参,由于是实参传递过来的,很好理解。

  对于final修饰的局部变量,与未用final修饰的变量一样,都是需要显示初始化。即局部变量都是需要显示初始化的。

  对于一般的类属性和对象属性,由类和对象的初始化过程中可以看出,首先都进行了默认初始化。然后对有显示赋值的变量才再进行显示初始化。

  但对final修饰的类属性和对象属性而言,如果不显示初始化,其默认将是进行默认初始化后的值,这与final本身出发点矛盾,因此,Java语法规定:

  final修饰的类属性和变量属性必须要进行显示初始化赋值。

  另外,无论对于基本数据类型还是引用数据类型,final修饰的变量都是首次显示初始化后值都不能修改。对于基本数据类型,很好理解。对于引用

  数据类型,引用变量指向的是实际的对象,但其存储的是所指向对象的地址,因此,其值不能修改并不意味着其所指向的对象不能修改。

  final赋值:

  Java中没有真正的常量。只有final型的变量,可以当常量来用。
  final型变量,只有两个地方可以赋值:
  1.在定义的时候可以赋值。
  2.在构造函数中可以赋值。如果在定义时赋值了,则在构造函数中不能赋值。包括定义时赋了null值,则在构造函数中也不能再赋值。

例:

    public final String AAAA;
public Doggie(){
AAAA="Good Morning";
}
public final String AAAA="aaaa";

再举一个特殊的例子作为区别对待:

public class Test {

    public static void main(String[] args) {

        String country = "China";
String name = "qqyumidi"; String userInfo = country + name; //编译后此处依然是country和name变量
String user = "China" + "qqyumidi"; //编译后此处直接变成Chinaqqyumidi }
}

另一种写法为:

public class Test {

    public static void main(String[] args) {

        final String country = "China";
final String name = "qqyumidi"; String userInfo = country + name; //编译后此处直接是Chianqqyumidi }
}

Java final修饰符的更多相关文章

  1. Java final 修饰符知识点总结

    final从字面上理解含义为“最后的,最终的”.在Java中也同样表示出此种含义. final可以用来修饰变量(包括类属性.对象属性.局部变量和形参).方法(包括类方法和对象方法)和类. 1. fin ...

  2. JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配

    Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和mu ...

  3. Java中final修饰符深入研究

    一.开篇 本博客来自:http://www.cnblogs.com/yuananyun/ final修饰符是Java中比较简单常用的修饰符,同时也是一个被"误解"较多的修饰符.对很 ...

  4. java中接口的概念及使用(补充final修饰符的使用)

    接口 初期理解,可以是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示 class 用于定义类 interface 用于定义接口 接口定义时,格式特点: 1.接口中常见的 ...

  5. java中static和final修饰符

    static和final修饰符 一.static修饰符 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. ...

  6. Java中的final修饰符

    1.什么时候可以选择final修饰符 如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰. 2.用final修饰的类 首先大家要明白,用final修饰的类是不能被继承的, ...

  7. Java中的(构造方法、方法重载、final修饰符使用及继承和抽象)

    构造方法: 构造方法的名称和类名相同,没有返回类型,参数列表(类型.个数)不同 方法重载:成员方法和构造方法都可以进行重载 方法名相同但是参数列表(类型,个数)不同,成为方法的重载. 继承:直支持单继 ...

  8. java中final修饰符的使用

    1.final修饰符的用法: final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值. final可以修饰方法,被final修饰的方法不能被重写. final可以修饰类,被fi ...

  9. 【Java】final修饰符的使用

    final修饰符的使用 1.修饰类: final修饰的类不能被继承,final修饰的类里面的方法都是(隐式)final方法 2.修饰方法: final修饰的方法不能被重写 3.修饰变量(被修饰的变量一 ...

随机推荐

  1. qq协助

    今天和一个朋友开完笑说让我进他的电脑,从而出现这篇文章!!!!   目前的QQ版本支持远程协助,所以想到通过两个QQ号码完成对另一台电脑的控制第一台电脑:1.自动登录QQ2.打开另一个QQ号码窗口3. ...

  2. 标题编辑 AndroidTagGroup

    地址: https://github.com/2dxgujun/AndroidTagGroup

  3. 1032: [JSOI2007]祖码Zuma

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1032 Description 这是一个流行在Jsoi的游戏,名称为祖玛.精致细腻的背景,外加神 ...

  4. yii隐藏域的使用方法

    <?= $form->field($model, 'time')->textInput()->hiddenInput(['value'=>time()])->lab ...

  5. HTML5 Web Worker的使用

    Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面. 一:如何使用Worker Web Wo ...

  6. 错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    不知怎么本来编译好好的VS2010环境,忽然出现“转换到 COFF 期间失败: 文件无效或损坏”的链接错误.花了好多天,试了好多方法,最终解决了这个问题. 现在罗列一下这几种解决方案: 方案1:点击“ ...

  7. 学习ES6--data2

    变量的解构: let [a, b, c] = [1, 2, 3] 等号左边的值等于等号右边的值,一一对应.假如右边没有相对应的值,如 let [a, b, c] = [1, 2, ] 这时候,c = ...

  8. 如何解决WebService参数传递中文乱码问题

    1,问题由来 我的主要工作是负责统一适配平台这块,主要任务是提供给客户统一的调用接口,客户使用这个接口可以通过我们再调不同厂家的接口.主要流程如下: 现在客户那边传来的请求报文里面包含中文,使用web ...

  9. ContentProvider要点复习

    ContentProvider要点复习 ContentProvider作为四大组件之一,发挥着举足轻重的作用.与之相关联的另外两个类分别是ContentResolver和ContentObserver ...

  10. Fix git 提交代码错误

    今天用git clone下代码,修改,push提交,发现以下错误 [root@localhost gocache]# git push origin master error: The request ...