java关键字

1. instanceof

用来测试一个对象是否为一个类的实例。

  • 注意事项:
    (1)Obj必须为引用类型,不能是基本类型。
    (2)obj为null时,将返回false。(java分为两种数据类型:基本数据类型和引用数据类型。并且还有一种特殊的null类型,该类型没有名字。)
    (3)当obj为class接口的实现类或者为class类的直接或者间接子类,返回true。

2. assert

断言是一种软件调试方法。 作用:对一个Boolean表达式进行检查,一个正确运行的程序保证Boolean值为true,若为false,则说明程序不正确,系统需要提供警告信息并且退出程序。

  • assert的表达方式:
    (1)assert expression1
    (2)assert expression1:expression2
    其中expression1标识一个Boolean表达式,expression2表示一个基本类型或者一个对象。
    虽然assert的功能与if判断类似,但是二者存在本质性的区别:assert一般用于调试程序。如果不小心用它来控制流程的业务流程,那在调试之后去掉assert就意味着修改了程序的正常逻辑,而if随机逻辑判断,本身就是用来控制程序流程的。
  • assert的应用范围:
    (1)检查控制流
    (2)检查输入参数是否有效
    (3)检查函数结果是否有效
    (4)检查程序不变量
    在实际开发中,assert用来保证程序的正确性,通常开发和测试使用,为了调高效率,软件发布后,assert默认关闭。

final

  • 根据上下文环境,final的含义存在着细微的区别,但通常它指的是”这是无法改变的“。
  • 编译器常量:必须是基本数据类型,并且以关键字final表示。在对这个常量进行 定义的时候,必须对其进行赋值(可以在编译时执行运算)
  • 当对象引用运用final时,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。
class Value {
    int i;
    public Value(int i) {
        this.i = i;
    }
}
public class FinalData {
    private static Random rand = new Random(47);
    private String id;

    public FinalData(String id) {
        this.id = id;
    }

    //编译器常量
    private final int valueOne = 9;
    private static final int VALUE_TWO = 99;
    //典型的公共常量,定义为public,则可用于包之外。定义为static强调只有一份
    public static final int VALUE_THREE = 39;
    //final修饰的数据在编译时不一定知道它的值
    private final int i4 = rand.nextInt(20);
    private static final int INT_5 = rand.nextInt(20);
    //为了表明final对于引用类型的意义(final修饰的是引用,引用上存的是对象的地址值,所以地址值不能盖面,对象也不能改变)。
    private Value v1 = new Value(11);
    private final Value v2 = new Value(22);
    private static final Value VAL_3 = new Value(33);

    private final int[] a = {1, 2, 3, 4, 5, 6};

    @Override
    public String toString() {
        return id + "; " + "i4=" + i4 + ", INT_5 = " + INT_5;
    }

    public static void main(String[] args) {
        FinalData fd1 = new FinalData("fd1");
        //fd1.valueOne++; 被final修饰的不能被修改
        fd1.v2.i++;
        fd1.v1 = new Value(9);
        for (int i = 0; i < fd1.a.length; i++) {
            fd1.a[i]++;
        }
        System.out.println(fd1);
        System.out.println("Creating new FinalData");
        FinalData fd2 = new FinalData("fd2");
        //为了说明final数值定义为静态和非静态的区别。(静态的只加载一次)
        System.out.println(fd1);
        System.out.println(fd2);
		//结果为:
		/*fd1; i4=15, INT_5 = 18
        Creating new FinalData
        fd1; i4=15, INT_5 = 18
        fd2; i4=13, INT_5 = 18*/
    }
}
  • 空白final:声明为final但又未给定初值的域。但必须在每个构造器中用表达式final进行赋值。
  • final参数:Java允许在参数列表中以声明的方式将参数指明为final,这意味着你无法在方法中更改参数。
  • final方法:把方法锁定,以防任何继承修改它的含义(在继承中使方法行为保持不变,并且不会被覆盖,类中所有的private方法都隐式地指定为final的。)
  • final类:该类不允许继承。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值