abstract、static 、final分别是是什么?用法是什么?——Java三大修饰符:abstract、static 、final
Java修饰符
一、abstract
-
抽象的意思
-
可以修饰的内容
(1)类
(2)方法 -
抽象类
概念: 被 abstract 修饰的类称为抽象类
语法:public abstract class 抽象类类名{}
-
抽象方法
抽象⽅法 : 被abstract 修饰的⽅法
语法:访问修饰符 abstract 返回值类型 ⽅法名(参数列表); abstract 访问修饰符 返回值类型 ⽅法名(参数列表);
-
特点
1.当⼀个类中存在抽象⽅法 那么这个类也必须是抽象的 2.⼀个抽象类中可以有抽象⽅法也可以有⾮抽象⽅法(抽象类中可以定义任何的成员 属性 构造方法 成员方法 抽象方法) 3.如果⼀个类继承了抽象类,这个类如果不想成为抽象类,那么这个类必须实现抽象类中的所有抽象⽅法 4.抽象类不能创建对象,但是可以声明引⽤,抽象类的对象是存在的,是由⼦类创建⼦类对象时调⽤⽗类构造⽅法创建的,是⽆法⾃⼰
⼿动去new抽象类的对象的 5. private 和 abstract 不同同时修饰方法 因为矛盾
设计模式
设计模式: 就是在实际开发中,总结的一套解决问题的固定套路,经过总结,最后就形成了设计模式23种(常用).
模版设计模式
把抽象类整体看成是一个模板,模板中不能决定的东西使用抽象方法表示,让使用模板的类【抽象类的子类】去重写抽象方法实现需求
二、static
(1)成员变量
(1)成员方法
(1)代码块
概述: static 修饰的成员变量称为 静态变量 类变量 静态属性
成员变量: 定义在类的成员位置的变量。 实例变量: 就是现在说的成员变量 ---> 非静态变量 静态变量: 被static 修饰的实例变量 ----> 静态变量
在实际的开发中不会特意的区分 实例变量 和 静态变量,经常使用成员变量来默认表示 实例变量
语法:
访问修饰符 static 数据类型 变量名 = 变量值;
static 访问修饰符 数据类型 变量名 = 变量值;
特点:
(1)被所有对象共享
(2) 可以使用 类名.属性名访问
(3)也可以通过对象的引用进行访问 (不推荐)
语法:
访问修饰符 static 返回值类型 ⽅法名(形参列表){
⽅法的实现;
}
static 访问修饰符 返回值类型 ⽅法名(形参列表){
⽅法的实现;
}
特点:
1.静态的⽅法中 不可以直接访问⾮静态的成员(成员变量 和 成员⽅法)
2.如果要访问⾮静态的成员 必须创建对象 通过引⽤去访问
3.静态⽅法可以通过 类名.⽅法名() 直接访问 也可以通过引⽤去访问(不建议)
4.静态的⽅法可以被继承 静态的⽅法不能被⾮静态的⽅法所覆盖 当子类的静态方法和父类中的静态方法语法上能形成重写的语法但是也不能构成重写,
重写注解@Override 不能通过。
静态方法的调用 不符合多态的特点 (引⽤是什么类型 调⽤的⽅法就是这个类型中的⽅法)
5.在静态⽅法中是不可以使⽤ this 和 super 关键字 因为 this 和 super都是和对象有关的,⽽静态的成员和对象⽆关 先于对象存在
分类:
(1)局部代码块
局部代码块: 定义在方法中
作用:用来限定局部变量的作用域
(2)动态代码块 ---> 构造代码块
动态代码块(构造代码块 初始代码块): 定义在类中方法外 ---> 成员位置
作用:用于在创建对象时 和成员变量 按照从上向下的顺序进行初始化操作,可以将所有构造方法中共同的代码放到动态代码块中。
(3)静态代码块
静态代码块: 被static修饰的动态代码块
作用:在 类加载时 和静态属性按照顺序进行执行,为类进行初始化操作,一般用于加载驱动等资源。 ----> jdbc
类加载:
当jvm第⼀次使⽤⼀个类时 读⼊这个类中的信息(包名 类名 属性 ⽅法 静态的变量 静态的⽅法 )并保存在虚拟机中的过程叫做类加载。
在一个程序运行周期内,类加载只进⾏⼀次。
类加载时机:
1. 第一次创建对象的时候
2. 第一次通过类名访问类中的静态成员(静态变量 静态方法)时
3. 子类进行类加载首先会先进行父类的类加载
三、final
1、概述
含义:最终的
2、可以修饰的内容
(1)修饰变量(局部变量 成员变量(实例变量 静态变量(类变量)))
(2)修饰方法(成员方法)(静态方法)
(3)修饰类(普通类)
3、修饰变量
(1)修饰局部变量
特点: final 修饰的局部变量只能赋值一次,一旦赋值其值不可以改变
(2)修饰成员变量
特点:
1.final修饰的实例变量没有默认值
2.final修饰的实例变量只能赋值⼀次
3.final修饰的实例变量可以在构造⽅法中初始化/构造代码块中/直接赋值 ,但是当使用构造方法赋值的时候要保证每个构造都必须能够为这个变量初始化
(3)修饰静态变量
特点:
1.final修饰的类变量没有默认值
2.final修饰的类变量可以通过静态代码块进⾏初始化/ 也可直接进行初始化
3. 只能赋值一次
4、修饰方法
修饰成员方法和静态方法
1.final修饰的成员⽅法&静态 可以重载
2.final修饰的成员⽅法 不可以被重写
3. final修饰的静态方法 本来可以形成一个符合重写语法的方法,但是被final修饰之后,也不能定义符合重写语法的方法了.
5、修饰类
语法:
final class Animal{}
特点:
final修饰的类没有⼦类 俗称断⼦绝孙类 不能被继承
Java中常见的被final修饰的类 : String Math System