Java提供了final关键字来修饰变量、方法和类,系统不允许为final变量重新赋值,子类不允许覆盖父类的final方法,final类不能派生子类。
通过使用final关键字,允许Java实现不可变类,不可变类会让系统更加安全。
自动装箱就是可以直接把一个基本类型值赋给一个包装类实例。
==和equals方法
当使用==来判断两个变量是否相等时:
- 如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只要两个变量的值相等,就将返回true。
- 对于两个引用变量,只有它们指向同一个对象是,==判断才会返回true。
抽象方法和空方法体的方法不是同一个概念。
- public abstract void test();是一个抽象方法,它根本没有方法体,即方法定义后面没有一对花括号;
- public void test(){}方法是一个普通方法,它已经定义了方法体,只是方法体为空,即它的方法体什么也不做,因此这个方法不可以使用abstract来修饰。
抽象类不能用于创建实例,只能当作父类被其他子类继承。
当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写)。而final修饰的类不能被继承,final修饰的方法不能被重写。因此final和abstract永远不能同时使用。
- static和abstract不能同时修饰某个方法,但它们可以同时修饰内部类。
- private和abstract不能同时修饰方法。
内部类比外部类可以多使用三个修饰符:private、protected、static--外部类不可以使用这三个修饰符。
Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例。