Java关键字介绍之final

在Java中声明属性、方法和类时,可使用关键字final来修饰。final变量即为常量,只能 赋值一次;final方法不能被子类重写;final类不能被继承。

1.final成员

声明 final 字段有助于优化器作出更好的优化决定,因为如果编译器知道字段的值不会 更改,那么它能安全地在寄存器中高速缓存该值。final 字段还通过让编译器强制该字段为 只读来提供额外的安全级别。

1.1关于final成员赋值

1)在java中,普通变量可默认初始化。但是final类型的变量必须显式地初始化。

2)final 成员能且只能被初始化一次。

3)final成员必须在声明时(在final变量定义时直接给其赋值)或者在构造函数中被初 始化,而不能在其它的地方被初始化。

示例1 Bat.java

public class Bat {
   final double PI = 3.14; // 在定义时赋值
   final int i; // 因为要在构造函数中进行初始化,所以此处便不可再赋值
   final List<Bat> list; // 因为要在构造函数中进行初始化,所以此处便不 可再赋值
   Bat() {
    i = 100;
    list = new LinkedList<Bat>();
   }
   Bat(int ii, List<Bat> l) {
    i = ii;
    list = l;
   }
   public static void main(String[] args) {
    Bat b = new Bat();
    b.list.add(new Bat());
    // b.i=25;
    // b.list=new ArrayList<Bat>();
    System.out.println("I=" + b.i + " List Type:" + b.list.getClass());
    b = new Bat(23, new ArrayList<Bat>());
    b.list.add(new Bat());
    System.out.println("I=" + b.i + " List Type:" + b.list.getClass());
   }
}

结果:

I=100 List Type:class java.util.LinkedList
I=23 List Type:class java.util.ArrayList

在main方法中有两行语句注释掉了,如果你去掉注释,程序便无法通过编译,这便是说, 不论是i的值或是list的类型,一旦初始化,确实无法再更改。然而b可以通过重新初始化来 指定i的值或list的类型。

时间: 2024-11-02 02:28:38

Java关键字介绍之final的相关文章

Java关键字介绍之static

1.关键字static(先记住这些,再往下看) 1)静态方法和静态变量是属于某一个类,而不属于类的对象. 2)静态方法和静态变量的引用直接通过类名引用. 3)在静态方法中不能调用非静态的方法和引用非静态的成员变量.反之,则可以. 4)静态变量在某种程序上与其他语言的全局变量相类似,如果不是私有的就可以在类的外部进行访问. 2.何时使用static 在我们创建一个类的实例时(对象),通常使用new方法,这样这个类的数据空间才会被创建,其方法才能被调用. 但是,有时候我们希望一个类虽然可以被创建n个

Java面向对象编程中final关键字的使用方法详解_java

在Java中通过final关键字来声明对象具有不变性(immutable),这里的对象包括变量,方法,类,与C++中的const关键字效果类似. immutable指对象在创建之后,状态无法被改变 可以从三个角度考虑使用final关键字: 代码本身:不希望final描述的对象所表现的含义被改变 安全:final对象具有只读属性,是线程安全的 效率:无法修改final对象本身,对其引用的操作更为高效 final 变量定义final Object a,则a只能被初始化一次,一旦初始化,a的数据无法修

向Java开发者介绍Scala

Scala结合了面向对象编程与函数编程思想,使用一种能够完全兼容Java.可以运行在Java虚拟机上的.简洁的语法.对于函数编程风格的支持,尤其是对于Lambda表达式的支持,能够有助于减少必须要编写的逻辑无关固定代码,也许让它可以更简单的关注要面对的任务本身,而相对的Java中对Lamdba表达式的支持要到预定于2012年发布的JavaSE8才会实现.本文就是对于Scala介绍. 相关厂商内容 Flash Builder 4.5高级版试用版免费高速下载 QClub(北京站)--<云计算与虚拟化

Java 语法介绍(一):Java语言的基本组成

Java语言主要由以下五种元素组成:标识符.关键字.文字.运算符和分隔符.这五种元素有着不同的语法含义和组成规则,它们互相配合,共同完成Java语言的语意表达.下面我们分别予以讲解. 1:标识符 变量,类和方法都需要一定的名称,我们将这种名称叫做标识符.Java中对标识符有一定的限制.首先:所有的标识符的首字符必须是字母(大小写).下划线_或美元符¥:其次标示符是由数字(0--9),所有从A--Z的大写字母.a--z的小写字母和下划线_.美元符¥和所有在十六进制0xc0前的ASCII码等构成:第

java关键字(详解)

基本类型 1 boolean 布尔型 2 byte 字节型 3 char 字符型 4 double 双精度 5 float 浮点 6 int 整型 7 long 长整型 8 short 短整型 9 null 空 10 true 真 11 false 假 程序控制语句 1 break 跳出中断 2 continue 继续 3 return 返回 4 do 运行 5 while 循环 6 if 如果 7 else 否则 8 for 循环 9 instanceof 实例 10 switch 观察 11

Java基础-09总结final,多态,抽象类,接口

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. /* final可以修饰类,方

java并发多线程 关于final和Volatile 的问题

问题描述 java并发多线程 关于final和Volatile 的问题 @Immutable class OneValueCache { private final BigInteger lastNumber; private final BigInteger[] lastFactors; /** 如果在构造函数中没有使用 Arrays.copyOf()方法,那么域内不可变对象 lastFactors却能被域外代码改变 那么 OneValueCache 就不是不可变的. */ public On

Java 关键字super和this的使用及区别

"this",作为一个特殊的关键字,它的规则如下: 1.可以表示构造函数传递.this(a,b)表示调用另外一个构造函数.这里面的this就是一个特殊语法,不是变量,没有什么类型.  2.可以在一个类的非static成员内部使用,表示当前这个对象.此时,this就是一个final的普通变量,它有静态类型,就是这个类本身:它有动态类型,就是当前这个对象的类型.你可以对它调用成员函数,把它传递给别的函数等. "super"和"this"类似,但是也有

我的Android进阶之旅------&amp;gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai",