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修饰的变量是一个常量,只能被赋 ...
随机推荐
- vue.js之生命周期,防止闪烁,计算属性的使用,vue实例简单方法和循环重复数据
摘要:今天是比较糟糕的一天没怎么学习,原因是学校的wifi连不上了~~.今天学习一下vue的生命周期,如何防止闪烁(也就是用户看得到花括号),计算属性的使用,vue实例简单方法,以及当有重复数据时如何 ...
- java 的equals 与== ,null与isempty的区别
1 . == 是为了判断等号两边 变量 所对应 的 内存中的 值 是否 相等, 只是 值 的比较. 2. 假如 String s1 = new String("abc") ...
- LeetCode OJ 之 Ugly Number II (丑数-二)
题目: Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime fact ...
- 在无人值守程序(服务)中调用Microsoft Graph
作者:陈希章 发表于 2017年5月31日 什么是无人值守程序(服务) 我在此前用了几篇文章分别介绍了在桌面应用程序(控制台),Web应用程序(ASP.NET MVC),以及PowerSehll脚本中 ...
- Struts2 2.5.12的问题
使用maven搭建的Struts项目,使用Struts 2.5.12会启动报错,应该不是包冲突的问题,感觉是lang3.jar的问题,换回2.5.10.1就没事了. 这点挺奇怪的,不应该是jar包损坏 ...
- Android Studio 快速开发
概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. P ...
- 9.python面向对象编程
面向对象的几个核心特性如下 Class 类一个类即是对一类拥有相同属性的对象的抽象.蓝图.原型.在类中定义了这些对象的都具备的属性(variables(data)).共同的方法 Object 对象 一 ...
- 小白的Python之路 day2 文件操作
文件操作 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...
- php通过system()调用Linux命令问题
最近在做php和linux crontab的联调,发现php在linux下的权限问题需要引起注意,调试问题的过程中发现有许多问题前人说的比较零散,我在这里汇总,顺带抛砖引玉一下. 1.$result= ...
- 贪心算法——Fence Repair(POJ 3253)
题目描述 农夫约翰为了修理栅栏,要将一块很长的木板切割成N块.准备切成的木板长度为L1,L2,L3--LN,未切割前木板的长度恰好为切割后木板长度的总和.每次切断木板时,需要的开销为这块木板的长度.请 ...