final 最终的
修饰类,此类不能被继承。final与访问修饰符public位置随意,在class前即可。public final class A{ }
修饰方法,此方法不能被子类重写,但可以被子类正常继承。 public final void eat(){ }
修饰方法内的局部变量,此局部变量不允许被修改。其中,只要在使用前赋值即可,一旦赋值就不可改变。final int a=10;
修饰类中成员属性,值也不可改变。值的赋值方式有三种:(1)定义直接初始化;(2)在构造代码块中对其赋值;(3)在构造方法中初始化(有多个构造方法,都要赋值)。如果这三种方式都没赋值,则编译出错。如果有多个构造方法,只在其中一个构造方法里赋值也是编译出错的,因为创建对象时不一定会用哪个构造方法,没有赋值的,final变量就无效未初始化了,即出错。
Java包括基本数据类型和引用数据类型。
基本数据类型:int、float、double... 直接赋值 int a=1;
引用数据类型:类、String、System、数组... 实例化方式构造对象,且对象里有很多属性值
final修饰引用数据类型,引用地址不可改,属性值可改。
final Animal animal = new Animal("hh",1);
animal = new Animal(); //编译出错
animal.age=2; //属性值都是可以改的
animal.name="aa";
修饰基本数据类型的变量——初识赋值之后不能更改
修饰引用类型的变量——初识化之后不能再指向另一个对象,但对象的内容是可变的。
final配合static使用
可以修饰方法和变量,其中变量作为全局变量,不允许被修改。可用作只需加载一次,又不需要修改的配置信息。
如:public static final String URL="www.xx.com"; //final和static位置可换,随意
final可提高性能,但会降低可扩展性。
注解
如:@Override 重写方法的注解
重写父类方法时可以用注解快捷方式,选择要重写的方法,快速添加。
注解相当于一个标记,告诉编译器和系统,还可以提示编程以防出错。例如,子类要重写父类的一个方法,加上@Override注解,然而父类忘记写此方法,会提示出错信息。
注解按照运行机制分:
源码注解——给编译器看,注解只在源码中存在,编译成.class文件就不存在了。如:@Override
编译时注解——注解在源码和class文件中都存在。
运行时注解——在运行阶段还起作用,甚至会影响运行逻辑的注解。如: Spring注解:@Autowired
按照来源分:
来自JDK的注解 如:@Override
来自第三方的注解 如:Spring注解:@Autowired
我们自己定义的注解