Java instanceof 和 final关键字的使用

本文详细解析了Java中instanceof关键字的用法,以及final关键字在类、属性、方法和变量上的不同含义。讲解了如何避免基础类型错误并介绍了final在类继承、常量定义和并发安全中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

instanceof

在Java中可以使用instanceof关键字判断一个引用是否在一个指定类型里面,返回Boolean结果
如:

Animal dog1 = new Dog();
Animal cat = new Cat();
Dog dog2 = new Dog();

if(cat instanceof Cat) // 返回true
if(cat instanceof Animal) // 返回true
if(dog1 instanceof Cat) // 返回false
if(dog2 instanceof Dog) // 返回true 

注意,基础数据类型不能使用instanceof

int a = 100;
System.out.println(a instanceof Object); // 报错
System.out.println(null instanceof Object); //false

null 不属于任何类型,类也不能为null

final

final关键字用于修饰类,属性,参数,变量和方法,表示最终的
final修饰的结果:

  • 修饰类,表示该类为最终类,不能被继承
  • 修饰属性,表示该属性的值不能发生变化
  • 修饰方法,表示该方法不能被重写,重载不受影响
  • 修饰参数和变量,表示参数或者变量不能被更改

修饰类

final修饰的类不能被继承

public final class A{}

public class B extends A{}  //报错

final修饰的类里面的所有方法都默认为final方法

修饰方法

使用final修饰的方法不能被子类重写,但是不影响当前类的重载


public class A{
    public final void method(){}
    // 重载1
    public final void method(int i){}
    // 重载2
    public void method(int i, double j){}
}public class B extends A{
    @Override 
    public final void method(){}  // 报错
    
    @Override 
    public final void method(int i){}  // 报错
    
    // 可以重写
    @Override 
    public void method(int i, double j){}
}

修饰属性

final修饰的属性表示常量,也就是不允许被修改的,只允许有三种赋值方法:

  • 定义的时候赋值 public final int a = 666;

  • 在构造函数中赋值
    final int a;
    public A(){ a = 666 ;}

  • 在初始化块和构造函数中进行初始化

public class A{
    public final int a = 666;
    public final int b;
    public final int c;
    public final double d; // 报错 不允许没有赋值的final属性,没有默认值
    {
        b = 666;
    }
    public A(){
        c = 888;
    }
}

修饰变量

final可以修饰参数或者变量,实质上参数即局部变量。和修饰成员属性一样,final修饰变量有两种类型,表示的意义一样,但是操作不通

  • 修饰基本类型变量,表示变量的值不可改变
  • 修饰引用类型变脸时,变量指向的兑现地址不可改变,但是对象内容可以改变

如:

final int a = 1; //a的值初始化之后不可改变

final int[] b = new int[] {1,2,3};
b = new int[] {4,5,6} //报错,无法更改对象地址
b[0] = 111; // 可以更改对象内容
b[1] = 222;
b[3] = 333;

静态常量

结合 static final 关键字可以用来定义静态常量,也就是编译器常量

public class A{
    public static final int CONSTANT = 100;
    private static final int CONSTANT_SOMETHING;
    static {
        CONSTANT_SOMETHING = 123;
    }
}

编译器常量对程序的运行速度有自动优化,推荐使用
注意静态常量通常使用全大写字母加下划线,普通常量和普通变量使用相同命名规则

final 的应用:

  1. 如果没有明确需要开放继承,那么尽量使用 final 修饰类
  2. 私有 private 方法默认是 final 最终的,无需添加 final 关键字
  3. 仅初始化一次的只读属性优先使用 final 修饰,如果是常量则使用 static final
  4. 提倡使用 final 修饰变量,大部分情况下编译器会自动优化
  5. 如果可以,优先使用 final 修饰属性,特别在多线程中具有先天并发特性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩尼诗道-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值