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的更多相关文章

  1. Java基础:关键字final,static

    一 . final 含义:adj.最后的,最终的; 决定性的; 不可更改的.在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了 ...

  2. Java基础(basis)-----关键字final和static的作用

       1.关键字final      final修饰类:这个类就不能被继承      final修饰方法:不能被重写      final修饰属性:此属性就是一个常量,一旦初始化后,不可再被赋值.习惯 ...

  3. Java基础-synchronized关键字的用法(转载)

    synchronized--同步 顾名思义是用于同步互斥的作用的. 这里精简的记一下它的使用方法以及意义: 当synchronized修饰 this或者非静态方法或者是一个实例的时候,所同步的锁是加在 ...

  4. Java基础super关键字、final关键字、static关键字、匿名对象整理

    super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...

  5. Java基础学习笔记十 Java基础语法之final、static、匿名对象、内部类

    final关键字 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后,就可以对 ...

  6. Java基础之关键字,标识符,变量

    Java基础 首先,来看一下Java基础知识图解,以下便是在java学习中我们需要学习设计到的一些知识(当然不是很完全). 这些都是接下来在以后的学习中我们会学到的一些知识. 1 关键字 首次先来学习 ...

  7. Java杂谈5——关键字final与volatile

    Final关键字 在Java语言中,随着语境的不同final关键字所代表的语义会有一些细微的差异.总的来说,final关键字表达的含义是“禁止修改”,这层有点类似于C++中的const关键字.之所以要 ...

  8. Java基础之关键字

    一.Java关键字总览 基本数据类型(9):boolean.char.byte.short.int.long.float.double.null 变量引用(2):super.this 类.方法.变量修 ...

  9. Java面向对象之关键字final 入门实例

    一.基础概念 1.关键字final可以修饰类.函数.变量. 2.关键字final修饰的类不可以被继承. 3.关键字final修饰的方法不可以被覆盖. 4.关键字final修饰的变量是一个常量,只能被赋 ...

随机推荐

  1. 解决zabbix中文显示乱码问题

    中文显示问题,图表乱码 解决办法: [root@zabbix ~]# cd /usr/share/zabbix/include/ [root@zabbix include]# vim locales. ...

  2. 基于iTextSharp的PDF文档操作

    公司是跨境电商,需要和各种物流打交道,需要把东西交给物流,让他们发到世界各地.其中需要物流公司提供一个运单号,来追踪货物到达哪里?! 最近在和DHL物流公司(应该是个大公司)对接,取运单号的方式是调用 ...

  3. inotify软件部署及实时同步

    声明:博主使用的是CentOS6.9的系统 参考资料: https://github.com/rvoicilas/inotify-tools/wiki http://www.ibm.com/devel ...

  4. SAML2.0 协议初识(一)

    一.什么是 SAML 协议? SAML 即安全断言标记语言,英文全称是 Security Assertion Markup Language.它是一个基于 XML 的标准,用于在不同的安全域(secu ...

  5. 使用Dagger2做静态注入, 对比Guice.

    Dagger 依赖注入的诉求, 这边就不重复描述了, 在上文Spring以及Guice的IOC文档中都有提及, 既然有了Guice, Google为啥还要搞个Dagger2出来重复造轮子呢? 因为使用 ...

  6. Effective Java 第三版——2. 当构造方法参数过多时使用builder模式

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  7. Java----list常用方法汇总

    package ListTest; import java.util.ArrayList; import java.util.Iterator ; import java.util.List; /** ...

  8. openstack-glance API 镜像管理的部分实现和样例

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限.错误之处在所难免.欢迎指正. 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  9. Xcode6 UIWebView与JavaScript交互(issue fix)

    这篇文章中,有介绍UIWebView与JavaScript交互,在UIWebView截获JavaScript请求处理.从app的角度,这是JavaScript的Hook请求. 在Xcode6之前的Ap ...

  10. Qt之QHeaderView加入复选框

    简述 前面分享了QTableView中怎样加入复选框. 本节主要介绍QTableView中的表头-QHeaderView加入复选框的功能,以下以水平表头为例.垂直表头相似! 简述 效果 QHeader ...