Java学习笔记(十)——类变量和类方法

final关键字

基本介绍

final可以修饰类、属性、方法和局部变量

在某些情况下,可能有以下去修,就会使用到final:

  • 1、当不希望类被继承时,可以用final修饰
  • 2、当不希望父类的某个方法被子类覆盖/重写时,可以用final关键字修饰【访问修饰符 final 返回类型 方法名】
  • 3、当不希望类的某个属性的值被修改,可以用final修饰。【public final double TAX_RATE = 0.1】
  • 4、当不希望某个局部变量被修改,可以用final修饰
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.learn.static_.final_;

public class final01 {
public static void main(String[] args) {
E e = new E();
//e.AGE = 12;//加了final后就不可以修改
}
}

final class A{}

//class B extends A{}

class C{
public final void hi(){}
}

class D extends C{
// @Override
// public void hi() {
// super.hi();
// }
}

class E{
public final int AGE = 10;
}

class F{
public void cry(){
final double NUM = 0.0;
//NUM = 0.9;//final修饰的局部变量也不能修改
}
}

final使用细节

  • 1、final修饰的属性又叫敞亮,一般用XX_XX_XX命名
  • 2、final修饰的属性在定义时,必须赋初值,并且以后不能再修改,赋值可以在如下位置之一:
    • (1)定义时
    • (2)在构造器中
    • (3)在代码块中
  • 3、如果final修饰的属性是静态的,则初始化的位置只能是:
    • (1)定义时
    • (2)在静态代码块 不能再构造器中赋值
  • 4、final类不能继承,但是可以实例化对象
  • 5、如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承。
  • 6、一般来说,如果一个类是final类了,就没有必要再修饰为final方法了。
  • 7、final不能修饰构造方法(构造器)
  • 8、final和static往往搭配使用,效率更高。因为不会导致类的加载,底层编译器做了优化。
  • 9、包装类(Integer,Double,Float,Boolean都是final),String也是final类,这些类是不能被继承的。

抽象类

引出

当父类的某些方法,需要声明,但又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。

1
2
3
4
5
6
7
abstract public class Abstact01 {
String name ;
int age;
abstract public void cry();
}
//当一个类中存在抽象方法时,需要将该类声明为abstact类
//一般来说,抽象类会被继承,由其子类来实现抽象方法

抽象类介绍

  • 1、抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()
  • 2、抽象类,是面试比较喜欢问的知识点,在框架和设计模式使用较多。

抽象类细节

  • 1、抽象类不能被实例化
  • 2、抽象类不一定要包含abstact方法
  • 3、一旦类包含了abstact方法,则这个类必须被声明为abstact
  • 4、abstract只能修饰类和方法,不能修饰属性和其他的。
  • 5、抽象类可以有任意成员【因为抽象类还是类】,比如:非抽象方法,构造器、静态属性等
  • 6、抽象方法不能有主体,即不能实现:
1
abstract void hi(){}//错误,不能有主体{}
  • 7、如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstact类
  • 8、抽象方法不能使用private、final和static等修饰,因为这些关键字都是和重写相违背的