java 语法 —— final
- final 成员变量的初始化问题;
1. 实现特别的约束和限制
指向一个 static 型私有成员(仅调用一次),
public class Coffee { private static long counter = 0;
private final long id = counter++; public String toString() {
return getClass().getSimpleName() + " " + id;
}
}
final 修饰的引用,不可以再指向别的引用,但 final 修饰的引用,其指向的对象,其值却可以修改,相当于常量指针(const int*,指针是常量,不可以再指向别的内存,指向的内存却可以继续修改),而不是指针常量(const* int)。
2. final 的作用
- 防止其他人覆盖该方法;
- 可以有效地关闭动态绑定,或者说告诉编译器不需要对其进行动态绑定;
- 在 Java 中,除了 static 方法和 final 方法(private 方法属于 final 方法),其他所有的方法都是后期绑定(也叫动态绑定);
- 绑定的含义即是:将一个方法调用同一个方法主体关联起来;
- 动态绑定(后期绑定):在运行时根据对象的类型进行绑定;
- Java 中的多态便是通过动态绑定实现的;
3. public final
public class Pair<K, V> {
public final K key;
public final V val;
public Pair<K, V>(K k, V v) {
key = k; val = v;
}
}
- key 和 value,成员变量都是 public 和 final 的,是为了使 Pair 成为只读的数据传输对象(或信使);
4. 一些细节问题
private 方法属于 final 方法,final 方法在编译期即已绑定;
public class PrivateOverride {
private void f() {
System.out.println("private f()");
} public static void main(String[] args) {
PrivateOverride p = new Derived();
p.f();
}
} class Derived extends PrivateOverride {
public void f() {
System.out.println("public f()");
}
}期望输出 public f(),但由于 private 方法被自动认为是 final 的,且对导出类是屏蔽的。在此种情况下,Derived 类中的 f() 方法是一个全新的方法。只有非 private 方法才可以被覆盖,但还需要密切注意覆盖 private 方法的现象,这时虽然编译期不会报错,失去了多态机制,也不会按照所期望的来执行。因此,在派生类中,对于基类的 private 方法,最好采用不同的名字。
5. final 修饰对象引用(或数组)
final 修饰对象引用,并非说对象其自身不可被修改,而是对象引用恒定不变,也即一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象(对象本身却是可以被修改的,事实上,Java 并未提供使任何对象恒定不变的途径)。这一限制同样适用于数组,因数组也是对象。
来看 final 修饰这样一个简单的对象引用:
final Test t = new Test();
t.setValue(10); // 修改其内部成员变量的值,是被允许的;
t = new Test(); // final 修饰的对象引用,不可以再指向别的对象;
首先来看数组的例子
final 修饰对象引用,或者数组(数组也是一种引用),此对象引用不可以再指向别的对象。
final int[] b = {1,2};
b[1]++; // 允许,b[1] == 3,数组内部的元素可变
b = new int[3]; // 不允许,
java 语法 —— final的更多相关文章
- Java关键字final、static
一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...
- 【转】Java关键字final、static使用总结
转自:http://lavasoft.blog.51cto.com/62575/18771/ Java关键字final.static使用总结 一.final 根据程序上下文环境, ...
- Java关键字final、static使用总结
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方 ...
- 转!Java关键字final、static使用总结
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可 ...
- Java关键字final、static使用总结(转)
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方 ...
- (转)Java关键字final、static使用总结
一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. fin ...
- [Java] 关键字final、static使用总结
一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率.final ...
- 【JAVA】final修饰Field
一.简介 final修饰符可以用来修饰变量.方法.类.final修饰变量时一旦被赋值就不可以改变. 二.final成员变量 成员变量是随类初始化或对象初始化而初始化的.当类初始化的时候,会给类变量分配 ...
- java 关键字final static native详解
java 关键字native static final详解 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义, ...
随机推荐
- UVM基础之--------uvm_root
uvm_root 是uvm的顶层实例扮演了一个top-level and phase controller 的作用,对于component来说.该类不需要用户实例化,他是一个自动实例化了的类,用户直接 ...
- Sql Server 优化 SQL 查询:如何写出高性能SQL语句
1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...
- 网络中 ping 不通 路由表
不管是在window还是在linux中,我们经常会遇到ping不通的问题. 这里的原因很多,比如不同的网段交换机做了一些限制等,这些问题是我们人工不能解决的. 但是,当你发现各自的网关是可以ping的 ...
- 检索COM类工厂中CLSID 为 {000209FF-0000-0000-C000-000000000046}的组件时失败, 原因是出现以下错误: 80070005
主要问题原因是Word权限配置问题 解决方案: 控制面板-管理工具-组件服务-计算机-我的电脑-DCOM配置 在列表中找到microsoft word97-2003 document 右键选择属性,选 ...
- 转:selenium自动化脚本错误总结
https://blog.csdn.net/zxy987872674/article/details/53141118
- javascript 大数据处理方法
随着前端的飞速发展,在浏览器端完成复杂的计算,支配并处理大量数据已经屡见不鲜.那么,如何在最小化内存消耗的前提下,高效优雅地完成复杂场景的处理,越来越考验开发者功力,也直接决定了程序的性能. 本文展现 ...
- Centos7安装gitlab服务器
1.先按照官方教程 https://about.gitlab.com/downloads/#centos7 大概内容如下: 1. Install and configure the necessary ...
- Opencv学习之路——自己编写的HOG算法
#include<opencv2\core\core.hpp> #include<opencv2\highgui\highgui.hpp> #include<opencv ...
- HDU - 1087 Super Jumping!Jumping!Jumping!(dp求最长上升子序列的和)
传送门:HDU_1087 题意:现在要玩一个跳棋类游戏,有棋盘和棋子.从棋子st开始,跳到棋子en结束.跳动棋子的规则是下一个落脚的棋子的号码必须要大于当前棋子的号码.st的号是所有棋子中最小的,en ...
- 51nod挑的部分5级题
最近心情不好所以写代码来获得快落 4级题有点难做?然后就开始挑简单的5级题开始写 然后准备记录一些自己没有做出来 参考讨论区或者博客才做出来的题目 51nod_1189 阶乘分数 这个题参考了讨论区 ...