java基础只关键字final
final关键字简述####
final关键字是在编写java程序中出现频率和很高的关键字,如果想要更好的编写java程序,那么掌握final关键字的运用是非常必要的。让我们先看一下final关键字可以修饰的地方有哪些
- final关键字修饰在类上
- final关键字修饰在方法上
- final关键字修饰在成员变量上
- final关键字修饰匿名内部类方法上
鉴于本人知识结构有限,若有错误忘不吝赐教,甚为感谢。#####
- final关键字修饰在类上
当final关键字修饰在类上时代表该类是不可被继承,我们非常熟悉的String、Integer等都是由final修饰类,《java编程思想》里有阐述过String等基本类型的封装类之所以用final修饰就是不希望String类被其他类继承从而改变String类特性。
public final class FinalKeyWordTest {
public FinalKeyWordTest(){}
public void myFinalMethod(){
System.out.println("this final");
}
}
class MyTest1 extends FinalKeyWordTest{ //编译错误}
- final关键字修饰在方法上
当final修饰在方法上时代表该该方法不允许被覆盖(重写)。《java编程思想》写到:使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。
如果想要禁止子类覆盖某一个父类方法,那么使用final去修饰它是最好的办法
public class FinalKeyWordTest {
public FinalKeyWordTest(){}
public final void myFinalMethod(){
System.out.println("this final");
}
}
class MyTest1 extends FinalKeyWordTest{
@Override
public final void myFinalMethod(){//编译错误
System.out.println("this sub final");
}
}
- final关键字修饰在成员变量上
用final修饰成员变量是最常见的运用方式,对于一个final修饰的变量:
1.如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改。
public class FinalKeyWordTest {
public final int i; //编译错误
}
public class FinalKeyWordTest {
public final int i;
public FinalKeyWordTest(){
this.i = 1;
}
}
//编译是正确的
2.如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
public class FinalKeyWordTest {
public static void main(String[] args) {
final MyTest1 m = new MyTest1();
m = new MyTest1(); //编译错误
}
}
public class FinalKeyWordTest {
public static void main(String[] args) {
final MyTest1 m = new MyTest1();
System.out.println(++ m.c);
}
}
class MyTest1{
int c = 0;
}
//正确
- final关键字修饰匿名内部类方法上
此处待整理状态,目前没有查到更多的资料显示为什么匿名内部类方法参数必须要final修饰,到是有查过几篇博客说的都很笼统,有的博客说匿名内部类方法参数之所以用final修饰 是不希望在方法内修改参数数据从而影响外部调用类方法执行。这么说其实不是很全面,我们知道java当中参数专递如果是基本数据类型那么是按值传递,如果是引用类型则是按引用传递。那么参数不管是 基本数据类型,还是引用类型 这说的都没有道理,如果参数是基本数据类型 内部类方法修改参数内容,外部类是根本获取不到的,如果参数是引用数据类型,内部类方法可以修改引用里的属性变量 从而是可以破坏外部调用类执行的
java基础只关键字final的更多相关文章
- Java基础:关键字final,static
一 . final 含义:adj.最后的,最终的; 决定性的; 不可更改的.在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了 ...
- Java基础(basis)-----关键字final和static的作用
1.关键字final final修饰类:这个类就不能被继承 final修饰方法:不能被重写 final修饰属性:此属性就是一个常量,一旦初始化后,不可再被赋值.习惯 ...
- Java基础-synchronized关键字的用法(转载)
synchronized--同步 顾名思义是用于同步互斥的作用的. 这里精简的记一下它的使用方法以及意义: 当synchronized修饰 this或者非静态方法或者是一个实例的时候,所同步的锁是加在 ...
- Java基础super关键字、final关键字、static关键字、匿名对象整理
super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...
- Java基础学习笔记十 Java基础语法之final、static、匿名对象、内部类
final关键字 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后,就可以对 ...
- Java基础之关键字,标识符,变量
Java基础 首先,来看一下Java基础知识图解,以下便是在java学习中我们需要学习设计到的一些知识(当然不是很完全). 这些都是接下来在以后的学习中我们会学到的一些知识. 1 关键字 首次先来学习 ...
- Java杂谈5——关键字final与volatile
Final关键字 在Java语言中,随着语境的不同final关键字所代表的语义会有一些细微的差异.总的来说,final关键字表达的含义是“禁止修改”,这层有点类似于C++中的const关键字.之所以要 ...
- Java基础之关键字
一.Java关键字总览 基本数据类型(9):boolean.char.byte.short.int.long.float.double.null 变量引用(2):super.this 类.方法.变量修 ...
- Java面向对象之关键字final 入门实例
一.基础概念 1.关键字final可以修饰类.函数.变量. 2.关键字final修饰的类不可以被继承. 3.关键字final修饰的方法不可以被覆盖. 4.关键字final修饰的变量是一个常量,只能被赋 ...
随机推荐
- Java Random介绍
一.简介 Random类位于java.util包下,此类的实例用于生成伪随机数流.之所以称之为伪随机,是因为真正意义上的随机数(或者称为随机事件)在某次产生过程中是按照实验过程表现的分布概率随机产生的 ...
- ORACLE SQL 整理
1.查询字段中含有小写字母的数据 SELECT MATERIALCODE FROM RFXITEMATTENDCODE WHERE REGEXP_LIKE(MATERIALCODE,'([a-z])' ...
- linux下yum安装redis以及使用
1.yum install redis --查看是否有redis yum 源 2.yum install epel-release --下载fedora的epel仓库 3. yum ...
- SQL-Oracle内实现柱形图式的效果
在SQL SERVER内有一个函数replicate()可以实现柱形图效果,本质上是利用字符重复出现的次数来控制柱形图的长短,效果如图: 如果要在Oracle内实现相同的效果,则需要自己写一个函数: ...
- day2、Linux别名
Linux中修改配置别名 ####用到的命令: alias是用来查看系统中有什么别名 source 让配置生效 临时取消别名的方法 unalias 临时取消别名 \cp /mnt/test.txt / ...
- GPU版的tensorflow在windows上的安装时的错误解决方案
1.用vs编译cuda的sample时会提示找不到"d3dx9.h"."d3dx10.h"."d3dx11.h"头文件的错误,如果没有安装这 ...
- strus2项目中百度编辑器运用的几点细节
百度编辑器的运用可以参考我之前写的一篇文章,在java项目中加入百度富文本编辑器.这篇文章是以maven+spring mvc项目进行的,总得来说配置比较简单,但是如果是想在strus2项目中配置ue ...
- mongodb 3.4 集群搭建:分片+副本集
mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...
- Linux服务器配置(一)
Linux服务器配置(一) jdk,tomcat,nginx记录 最近公司买了三台服务器System x3650 M5用来跑公司的项目.现,记录一下真机部署与后期维护历程~ 因为系统是服务器买来就装好 ...
- .Net6种成员的可访问性
CLR术语 C#术语 描述 Private private 成员只能由定义类型或任何嵌套类型访问 Family protected 成员只能由定义类型,任何嵌套类型或者不管在任何程序集中声明的派生类型 ...