abstract(抽象)
被abstract修饰的类,称为抽象类。
- abstract修饰类,此类不能new对象。
- 可被子类继承,提供共性属性和方法。
- 可声明为引用,更自然的使用多态
- 抽象方法必须在抽象类中
- 抽象类中可以没有抽象方法,也可以有非抽象方法
static(静态)
可以修饰属性、方法、代码块、内部类
静态方法:通过类名.方法名调用
-
静态方法只能调用静态的属性和静态的方法
-
静态方法中不能使用this和super关键字
-
抽象方法不能使用static修饰
-
静态方法不能被重写,但是可以被继承
静态代码块 -
静态代码块在类加载的时候就执行
-
优先于动态代码块
-
只会被执行一次。
类加载的时机: -
创建对象
-
创建子类对象
-
调用静态属性和方法
-
Class.forName(“类的全限定名”); 全限定名:包名+类名
final(最终)
final可修饰的内容:
- 类(最终类)
- 方法(最终方法)
- 变量(最终变量)
实例常量: - 实例常量不再提供默认值,必须手动赋予初始值。
- 赋值时机:显示初始化、动态代码块、构造方法。(静态常量不直接赋值是要在静态代码块中赋值)
- 注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值。
- 基本类型的值不能改,引用类型的地址不能改
小练习
四个售票员循环卖100张票
import java.util.Random;
public class Conductor {
String name;
static int tickets=100;
public Conductor() {
super();
}
public Conductor(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void maipiao() {
tickets--;
System.out.println("售货员"+getName()+"卖出一张票");
System.out.println("还剩"+tickets+"张票");
}
public static void main(String[] args) {
Conductor c1 =new Conductor("张三");
Conductor c2 =new Conductor("李四");
Conductor c3 =new Conductor("王二狗");
Conductor c4 =new Conductor("蔡徐坤");
Random r=new Random();
while(tickets>0) {
int x=r.nextInt(4);
switch (x) {
case 0:
c1.maipiao();
break;
case 1:
c2.maipiao();
break;
case 2:
c3.maipiao();
break;
case 3:
c4.maipiao();
break;
default:
break;
}
}
}
}