Java全面细致讲解final的使用

目录
  • 一、理解
  • 二、作用
    • 1. 修饰-类
    • 2. 修饰-方法
    • 3. 修饰-变量
      • 3.1 修饰-成员变量(属性)
      • 3.2 修饰-局部变量
  • 三、经典题目

一、理解

final:最终的

二、作用

final 可以用来修饰的结构:类、方法、变量

1. 修饰-类

final 用来修饰一个类,表示此类不能被其它类所继承,提高安全性,提高程序的可读性。

比如:String类、System类、StringBuffer类…

代码演示:

final class A{
}
class B extends A{ //错误,不能被继承。
}

2. 修饰-方法

final 用来修饰方法:表明此方法不能被子类重写。

比如:Object类中getClass();

代码演示:

class A {
   public final void print() {
     System.out.println("A");
   }
}
class B extends A {
    public void print() {
    // 错误,不能被重写。
    }
}

3. 修饰-变量

final 修饰的变量(成员变量或局部变量)称为常量。名称大写,且只能被赋值一次。

static final 用来修饰属性:全局常量。

代码演示:

class A {
   private final String INFO = "嘻嘻"; //声明常量
     public void print() {
     //INFO = "哈哈";
     //The final field A.INFO cannot be assigned
     }
}

3.1 修饰-成员变量(属性)

final 标记的成员变量必须在声明(显式初始化)时或在 每个构造器中或代码块中显式赋值,然后才能使用。

如:final double MY_PI = 3.14;

3.2 修饰-局部变量

使用 final 修饰局部变量时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,且不能进行重新赋值。

三、经典题目

//题目一:
public class Test1 {
        public int addOne(final int x) {
         //   return ++x;
         //Cannot assign a value to final variable 'x'
            return x + 1;
        }
}
//题目二:
public class Something {
    public static void main(String[] args) {
       Other o = new Other();
       new Something().addOne(o);
    }
    public void addOne(final Other o) {
       // o = new Other();
       o.i++;
     }
}
class Other {
   public int i;
}
//题目三:
class Root{
	static{
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root(){
		super();
		System.out.println("Root的无参数的构造器");
	}
}
class Mid extends Root{
	static{
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid(){
		super();
		System.out.println("Mid的无参数的构造器");
	}
	public Mid(String msg){
		//通过this调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:"
			+ msg);
	}
}
class Leaf extends Mid{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}
	public Leaf(){
		//通过super调用父类中有一个字符串参数的构造器
		super("小老师ir");
		System.out.println("Leaf的构造器");
	}
}
public class LeafTest{
	public static void main(String[] args){
		new Leaf();
		System.out.println();
		new Leaf();
	}
}
/*output:
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:小老师ir
Leaf的普通初始化块
Leaf的构造器
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:小老师ir
Leaf的普通初始化块
Leaf的构造器
*/

到此这篇关于Java全面细致讲解final的使用的文章就介绍到这了,更多相关Java final内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java基础教程之final关键字浅析

    前言 前面在讲解String时提到了final关键字,本文将对final关键字进行解析. static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final关键字及其用法. final从总体上来说是"不可变的",可用于修改类.方法.变量. 一. final类 final修饰的类,该类不能被继承.当你确认一个类永远不会被继承或不想被继承,那么就可以用final修饰. 同样,对于

  • Java基础之关键字final详解

    Java-关键字:final 1 .final可以用来修饰的结构: 类.方法.变量 2.final 用来修饰一个类: 此类不能被其他类所继承 比如:String类.System类.StringBuffer类 3.final 用来修饰方法: 表明此方法不可以被重写 比如:Object类中getClass(); 4.final 用来修饰变量,此时的"变量"就称为是一个常量 4.1 final修饰属性: 可以考虑赋值的位置有:显示初始化.代码块中初始化.构造器中初始化 4.2 final修饰

  • 详解Java中的final关键字

    1 修饰属性或者变量 无论属性是基本类型还是引用类型,作用都是变量里面存放的"值"不可变 经常和static关键字一起使用,作为常量 1 基本类型,变量放的是实实在在的值,如1,"abc"等 2 引用类型,变量放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,即它只能指向初始时指向的那个对象,而不关心指向的对象内容的变化 所以修饰的变量必须被初始化 public static final String LOAN = "loan&quo

  • 详解Java关键字final

    一.常见问题 所有的final修饰的字段都是编译期常量吗? 如何理解private所修饰的方法是隐式的final? 说说final类型的类如何拓展?比如String是final类型,我们想写个MyString复用所有String中方法,同时增加一个新的toMyString()的方法,应该如何做? final方法可以被重载吗?可以 父类的final方法能不能够被子类重写?不可以 说说final域重排序规则? 说说final的原理? 使用 final 的限制条件和局限性? 二.final修饰类 当某

  • Java中final关键字的使用与注意总结

    前言 在java中可以将实例域定义为final.在构建对象是必须初始化这样的值.必须确保在每个构造器执行之后,这个域的值被设置,并且在后面的操作中不再对其修改.使用final声明变量之后,这个值就不能修改,一般final类型的变量都被声明为静态变量,而且是公有类型的,它在内存中被放在一个特有的公共区域. 也就是说,在Java语法中规定,final修饰的成员变量必须有程序员显式地指定初始值. 定义格式为: public  static  final  double pi = 3.1415926:

  • Java中final关键字和final的4种用法

    目录 1.final 定义 2.final 的 4 种用法 2.1.修饰类 2.2.修饰方法 2.3.修饰变量 2.4.修饰参数 3.final 作用 重要说明:本篇为博主<面试题精选-基础篇>系列中的一篇,查看系列面试文章请关注我. Gitee 开源地址:gitee.com/mydb/interv- 1.final 定义 final 翻译成中文是"最终"的意思,它是 Java 中一个常见关键字,使用 final 修饰的对象不允许修改或替换其原始值或定义. 比如类被 fin

  • Java基础之final关键字作用案例

    final关键字的作用 final关键字可以用来修饰引用.方法和类. 1.final关键字修饰类 当用final关键字修饰一个类后,这个类不能被继承.代码示例如下:  所以当定义一个类时,需要想好该类将来是否会被继承. 2.final关键字修饰方法 当用final关键字修饰一个方法后,这个方法不能被重写.代码示例如下:  注意:一个类的private方法会隐式的被指定为final方法. 3.final关键字修饰变量 final关键字修饰的变量初始化后不能再被修改.代码示例如下: 如果是引用类型的

  • java关键字final用法知识点

    inal:最终的,确保使用前是被赋值得,一旦赋值后不可修改. 1 数据 ①局部变量 基本数据类型: 可以先定义后赋值,但要保证在使用前是已被赋值的,一旦赋值后不可修改: 引用数据类型: 可以先定义后赋值,但要保证在使用前是已被赋值的,一旦赋值后不可修改: 引用内容不可修改,但备用用的对象内容可以被修改: ②成员变量 必须保证成员变量在使用前被赋值: 成员变量赋值的方式有两种,1声明变量时赋值,2构造函数中赋值: public static void main(String[] args) { /

  • 全面解析java final关键字

    根据上下文环境,Java 的关键字 final 的含义有些微的不同,但通常它指的是"这是不能被改变的".防止改变有两个原因:设计或效率.因为这两个原因相差很远,所以有可能误用关键字 final. 以下几节讨论了可能使用 final 的三个地方:数据.方法和类. 1)final 数据 对于编译时常量这种情况,编译器可以把常量带入计算中,可以减少了一些运行时的负担.在 Java 中,这类常量必须是基本类型,而且用关键字 final 修饰.你必须在定义常量的时候进行赋值. 带有恒定初始值的

  • Java全面细致讲解final的使用

    目录 一.理解 二.作用 1. 修饰-类 2. 修饰-方法 3. 修饰-变量 3.1 修饰-成员变量(属性) 3.2 修饰-局部变量 三.经典题目 一.理解 final:最终的 二.作用 final 可以用来修饰的结构:类.方法.变量 1. 修饰-类 final 用来修饰一个类,表示此类不能被其它类所继承,提高安全性,提高程序的可读性. 比如:String类.System类.StringBuffer类… 代码演示: final class A{}class B extends A{ //错误,不

  • Java全面细致讲解类与对象

    目录 类和对象的关系 类和对象的实例化 static关键字 private实现的封装 构造方法 this关键字 代码块 匿名对象 小结 类和对象的关系 类就是一类对象的统称.对象就是这一类具体化的一个实例. (对象是类的实例化) 对象是什么? 此对象非彼对象!!!说到对象就要提到过程. 面向过程:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题.面向过程注重的是过程,在整个过程中所涉及的行为,就是功能. 面向对象:JAVA是基于面向对象的,关注的是对象,将一件事情

  • Java全面细致讲解Wrapper的使用

    目录 一.概述 二.作用 三.使用 1. 基本数据类型-包装类的实例(装箱) 2. 包装类-基本数据类型(拆箱) 3. String-基本数据类型/包装类 4. 基本数据类型/包装类-String 5. 转换图 四.经典题目 一.概述 针对八种基本数据类型定义相应的引用类型—包装类(封装类). 二.作用 有了类的特点,就可以调用类中的方法,Java才是真正的面向对象. 八种基本数据类型与其包装类的对应关系: 基本数据类型 包装类 byte Byte short Short int Integer

  • Java全面细致讲解==和equals的使用

    目录 equals与== 1. ==的使用 1.1 概述 1.2 代码演示 2. equals的使用 2.1 概述 2.2 代码演示 3. ==和equals的区别 3.1 概述 3.2 代码演示 上篇博文:Java-多线程的使用 equals与== 1. ==的使用 1.1 概述 用于基本类型比较值时:只要两个变量的值相等,即为true. 用于引用类型比较引用(是否指向同一个对象)时,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体,只有指向同一个对象时,==才返回true. 用

  • Java全面细致讲解Cookie与Session及kaptcha验证码的使用

    目录 Cookie 1. 概念 2. 创建Cookie 3. 服务器获取Cookie 4. Cookie的修改 5. Cookie的生命控制 6. Cookie的有效路径Path 7. Cookie应用-免用户名密码登录 Session 1. 概念 2. 创建和获取Session 3. Session域数据的存取 4. Session的生命周期的控制 5. 浏览器和Session的关联 kaptcha验证码 1. 使用 2. 验证码的切换 Cookie 1. 概念 是服务器通知客户端保存键值对的

  • Java超详细分析讲解final关键字的用法

    目录 基本介绍 final细节01 final细节02 基本介绍 final 可以修饰类.属性.方法和局部变量. 在某些情况下,程序员可能有以下需求,就会使用到final: Base Sub 类 1)当不希望类被继承时,可以用final修饰. 2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字 修饰.[案例演示:访问修饰符 final 返回类型方法名] 3)当不希望类的的某个属性的值被修改,可以用final修饰.[案例演示: public final dou

  • java中单例模式讲解

    目录 WHAT WHY HOW 饿汉式 实现一:静态实例参数与静态代码块 实现二:静态内部类 懒汉式 错误一:单线程实现 错误二:同步方法 错误三:同步代码块之单次检查 错误四:同步代码块之双重检查 正确:双重检查+阻止重排序 枚举 场景 个人认为单例模式是设计模式中最简单也是最常用的一种,是对有限资源合理利用的一种方式.这个模式看似简单,但是其中蕴含了关于并发.类加载.序列化等一系列深层次的知识,如果理解不够深,就有可能在高并发时遇到难以预期的异常,或者会造成资源浪费. 所以本文会从将目前Ja

  • Java 超详细讲解抽象类与接口的使用

    目录 一.抽象类 1.抽象类的语法 2.抽象类的特性 3.抽象类的作用 二.接口 1.接口的概念 2.接口使用 3.接口特性 4.实现多个接口 5.接口间的继承 6.常用的接口 (1)Comparable接口 (2)Cloneable接口 三.Object类 一.抽象类 在Java中,如果一个类被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,抽象方法不用给出方法体. 1.抽象类的语法 //抽象类:被abstract修饰的类 public abstract cl

  • Java 超详细讲解异常的处理

    目录 1.异常的概念和体系结构 1.1异常的概念 1.2异常的体系结构及分类 2.异常的处理 2.1防御式编程 2.2异常地抛出 2.3异常的捕获 (1)异常声明throws (2)try-catch捕获并处理 (3)finally 2.4异常的处理流程 3.自定义异常类 1.异常的概念和体系结构 1.1异常的概念 Java中,在程序执行过程中发生的不正常行为称为异常.比如之前一直遇到的: (1)算数异常 System.out.prinntln(10/0); (2)数组越界异常 int[] ar

  • Java 深入探究讲解简单工厂模式

    目录 1. 简单工厂介绍 2. 简单工厂类图UML 3. 简单工厂角色说明 4. 代码实现 5. 优缺点 6. 使用场景 1. 简单工厂介绍 简单工厂有一个具体的工厂类,可以生产不同的产品,属于创建型设计模式. 注意:简单工厂模式 不属于23种设计模式之列 2. 简单工厂类图UML 3. 简单工厂角色说明 简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类的创建产品类的方法可以被外界直接访问,创建所需的产品对象. 抽象产品(Product):是简

随机推荐