项目代码
https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/final_
目录
1.final修饰的居性又叫常量,一般用XX_XX_XX_X来命名
2.final修饰的属性在定义时必须赋初值并且以后不能再修改,赋值可以在如下位置之一
5.如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承。
5.一般来说,如果类已经是final类了,就不需要再将方法修饰成final
7.final和static往往搭配使用,效率更高,不会导致类加载底层编译器做了优化处理。
8.包装类(Integer, Double,Float, Boolean等都是fina),String也是final类.
final可以修饰类、属性、方法和局部变量,
在某些情况下,程序员可能有以下需求,就会使用到final
1)当不希望类被继承时,可以用final修饰
2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰
3)当不希望类的的某个属性的值被修改,可以用final修饰.
4)当不希望某个局部变量被修改,可以使用final修饰
- public class Final01 {
- public static void main(String[] args) {
- E e = new E();
- // e.TAX_RATE = 0.09;
- }
- }
- final class A{
-
- }
- // class B extends A{} 1)当不希望类被继承时,可以用final修饰.
- class C{
- // public final void hi(){ //2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰
- // System.out.println("C类的hi方法");
- // }
- }
- class D extends C{
- public void hi(){
- System.out.println("重写了子类的hi方法");
- }
- }
- class E{
- public final double TAX_RATE = 0.08;
- }
- class F{
- public void cry(){
- final double NUM = 0.01;
- // NUM = 0.9;
- System.out.println(NUM);
- }
- }
①定义时:如public final double TAX RATE=0.08;
②在构造器中
③代码块中。
- class AA{
- public final double TAX_RATE1 = 0.08;
- public final double TAX_RATE2;
- public final double TAX_RATE3;
- //①定义时:如public final double TAX RATE=0.08;
- //
- //②在构造器中
- //
- //③代码块中。
- public AA(){
- TAX_RATE2 = 1.1;
- }
- {
- TAX_RATE3 = 10.0;
- }
- }
①定义时 ②在静态代码块 不能在构造器中赋值。
- public class FinalDetail01 {
- public static void main(String[] args) {
- new AA();
- new EE().cal();
- }
- }
- class DD{
- public final void cal(){
- System.out.println("cal()方法");
- }
- }
- class EE extends DD{
-
- }
- public class FinalDetail02 {
- public static void main(String[] args) {
- System.out.println(BBB.num);
- }
- }
- class BBB{
- public final static int num = 10000;//去掉final会执行BBB代码块初始化
- //final和static往往搭配使用,效率更高,不会导致类加载底层编译器做了优化处理。
- static {
- System.out.println("BBB代码块被执行");
- }
- }
请编写一个程序,能够计算圆形的面积。要求圆周率为3.14.赋值的位置3个方式都写一下.
- public class FinalExercise01 {
- public static void main(String[] args) {
- Cirle cirle = new Cirle(6);
- System.out.println(cirle.cal());
- }
- }
- class Cirle{
- private double radius;
- private final double PI = 3.14;
- public Cirle(double radius) {
- this.radius = radius;
- }
- public double cal(){
- return radius * radius * PI;
- }
- }
其实正常来说应该做成静态方法,不创建对象也能计算,但考虑到可能要保存实例的属性,用上面的也对
下面给个static的
- public class FinalExercise01 {
- public static void main(String[] args) {
- System.out.println(Cirle.cal(6));
- }
- }
- class Cirle{
- private final static double PI = 3.14;
- public static double cal(double radius){
- return radius * radius * PI;
- }
- }
下面的那个对 return x + 1 是+符号 没有在改变x