final含义
final是Java中的一个保留关键字,可以声明成员变量、方法和类。一旦你将引用声明为final类型,你将不能再改变这个引用了。编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。
final变量
凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫做final变量。下面是final修饰变量的例子:
final int constValue = 1; // constValue = 2; The final local variable constValue cannot be assigned.
补充点:
final方法
final也可以声明方法。方法名前面加上final关键字,代表这个方法不可以被子类重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变该方法,你就可以将该方法声明为final类型。
final声明的方法比非final的方法快,因为在编译的时候就已经静态绑定了,不需要在运行时再动态绑定。下面是final方法的例子:
public class Person { public final void printName() { System.out.println("wangzhengyi"); } }
final类
使用final来修饰的类叫做final类。final类通常功能是完整的,它们不能被继承。Java中许多类是final的,例如String类。
不可变类的一个好处就是它自身是线程安全的,你不需要考虑多线程环境下的线程安全问题。要创建不可变类,需要实现如下几个步骤:
注意:浅拷贝和深拷贝的区别:
浅拷贝(浅克隆):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,只复制对象的基本类型,对象类型仍属于原来的引用。
深拷贝(深克隆):被复制的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,不仅复制对象的基本类型,同时也复制原对象中的对象。
不可变类示例:
import html" target="_blank">java.util.HashMap; import java.util.Iterator; public class FinalClassExample { private final int id; private final String name; private final HashMap<Integer, String> hMap; public int getId() { return id; } public String getName() { return name; } /** * 可变对象的访问方法:返回对象的拷贝 * @return */ public HashMap<Integer, String> gethMap() { return (HashMap<Integer, String>)hMap.clone(); } /** * 实现深拷贝的构造器 */ public FinalClassExample(int id, String name, HashMap<Integer, String> map) { this.id = id; this.name = name; HashMap<Integer, String> tMap = new HashMap<Integer, String>(); int key; Iterator<Integer> iterator = map.keySet().iterator(); while (iterator.hasNext()) { key = iterator.next(); tMap.put(key, map.get(key)); } this.hMap = tMap; } /** * 实现浅拷贝构造器 */ /* public FinalClassExample(int id, String name, HashMap<Integer, String> map) { this.id = id; this.name = name; this.hMap = map; } */ }
final关键字好处
使用final关键字的优势如下:
本文向大家介绍详解Java编程中static关键字和final关键字的使用,包括了详解Java编程中static关键字和final关键字的使用的使用技巧和注意事项,需要的朋友参考一下 Java static关键字以及Java静态变量和静态方法 static 修饰符能够与变量、方法一起使用,表示是“静态”的。 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以st
本文向大家介绍Java中的final关键字深入理解,包括了Java中的final关键字深入理解的使用技巧和注意事项,需要的朋友参考一下 java final关键字详解: 前言: Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的
本文向大家介绍举例讲解Java中final关键字的用法,包括了举例讲解Java中final关键字的用法的使用技巧和注意事项,需要的朋友参考一下 1. final variable final variable 就是一个常量,一旦被初始化就不可以被改变。 输出: (1)Blank final variable 在声明时未初始化的 final variable 被称作 blank final vari
本文向大家介绍详解java中的synchronized关键字,包括了详解java中的synchronized关键字的使用技巧和注意事项,需要的朋友参考一下 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到
本文向大家介绍Java中的关键字synchronized 详解,包括了Java中的关键字synchronized 详解的使用技巧和注意事项,需要的朋友参考一下 在并发编程中,synchronized关键字是常出现的角色。之前我们都称呼synchronized关键字为重量锁,但是在JDK1.6中对synchronized进行了优化,引入了偏向锁、轻量锁。本篇介绍synchronized关键字的使用方
本文向大家介绍详解java中的static关键字,包括了详解java中的static关键字的使用技巧和注意事项,需要的朋友参考一下 Java中的static关键字可以用于修饰变量、方法、代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解。 静态资源(静态变量与静态方法) 被static关键字修饰的变量和方法统一属