JavaSE-学习笔记,主要内容为 static 关键字、面向对象三大特性(封装、继承、多态)-继承相关知识,访问修饰符,final关键字。
1. static 关键字
- 静态(static)可以修饰属性和方法。
- 称为静态属性(类属性)、静态方法(类方法)。
- 静态成员是全类所有对象共享的成员。
- 在全类中只有一份,不因创建多个对象而产生多份。
- 不必创建对象,可直接通过类名访问。
1.1 静态属性
- 静态属性,不再属于对象。
- 非静态属性(实例属性)属于对象,随着对象的创建而产生,每个对象的属性值都是独立的。
静态属性是属于类的,只有一份(节省内存)。应该由类来访问,但是对象也可以访问,所有的对象共享着一份数据。
非静态属性由对象访问:对象.属性
–> 赋值,取值
静态属性由类访问:类名.静态属性
–> 赋值,取值
静态属性可以和final
搭配使用,形成静态常量。
1.2 静态方法
形成了静态方法。属于类而不再属于对象,通过类名来调用即可,通过对象也可以调用 。
- 在静态方法中:只能访问属于类的资源,不能访问属于对象的资源(因为静态资源会直接被加载到内存中,而非静态资源不一定被 new 出来
- 可以访问静态属性
- 可以访问静态方法
- 不能直接访问非静态属性
- 不能直接访问非静态方法
1.3 静态代码块
代码块:使用{}
包裹起来的一段代码。
- 普通代码块:
{}
包裹起来一段代码。注意作用域。 - 构造代码块:写在类里,方法外的代码块,就叫构造代码块。当创建对象的时候,随着构造函数的调用而执行。而且优先于构造函数执行。构造函数被多次调用,那么构造代码块也被多次调用。
- 静态代码块:用 static 关键字修饰的代码块。在类第一次使用的时候执行,优先于main的执行。只执行一次。例如连接数据库的驱动等。
- 同步代码块:多线程。
优先级别:静态代码块 > 构造代码块 > 构造方法
2. 继承
2.1 概念
继承的概念:描述两个类的关系的。在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类(派生类,SubClass),现有类被称作父类(超类,SuperClass),子类会自动拥有父类所有非私有的属性和方法。
意义:
- 避免重复的代码。(从子类的角度)
- 扩展类的功能。(从父类的角度)
继承性:子类,父类。存在继承关系。
- 子类对象,可以直接访问父类的非私有的属性和方法。(避免重复代码)
- 子类也可以新增自己的属性和方法。(扩展类的功能)
- 子类可以重新实现父类已有的方法。(扩展类的功能)
2.2 语法
语法结构
1 | class SuperClass { |
extends
关键字:表示两个类是继承关系。
2.3 继承中的构造方法
示例
1 | public class Animal { |
2.4 super 关键字
子类对象的创建过程:
子类的构造方法中,默认先调用父类的无参构造方法。如果没有显示的调用,那么隐含 super();
的调用。
super
关键字- 可以访问父类的属性
- 可以访问父类的方法
- 指代父类的构造方法, 如果有多个,靠参数来区分。要放在第一行进行调用
this
关键字:作为本类的对象- 访问本类的属性。如果在继承中,本类没有这个属性,那么再从父类中寻找对应的属性
- 访问本类的方法
- 可以指代本类的构造方法:
this()
。要放在第一行进行调用
this
与 super
对比
比较内容 | this |
super |
---|---|---|
访问属性时 | 首先在子类中匹配,如果没有就在父类中匹配 | 直接访问父类的属性 |
访问方法时 | 首先在子类中匹配,如果没有就在父类中匹配 | 直接访问父类中的方法 |
调用构造方法时 | 通常用于在本类中的一个构造方法中通过this() 调用本类的另一个构造方法 |
调用父类的构造方法 |
特殊作用 | 指自身的引用 | 无 |
注意:
this
,super
关键字,均不能出现在static
方法中。
2.5 方法重写(重点)
表示方法重写的关键字:override
概念:继承关系中,子类将父类已有的方法重新实现,叫做方法的重写。
- 规则
override
只存在于继承关系中。- 子类重写的方法的声明(方法的返回值、参数列表、方法名),必须和父类一致。
- 注意:子类重写的方法的返回类型可以是父类方法返回类型的子类
- 子类重写方法的访问权限,不能比父类更加严格。
- 重写的方法,不能抛出比父类更大的异常(子类抛出的异常更精确)。
易混概念:重载
overload
重载:一个方法,因为参数不同,执行的具体的方法也不同。
- 规则
- 重载的方法与原方法处于同一个类中。
- 方法名必须一致。
- 参数列表必须不同:顺序,个数,类型。
比较内容 | 重写 | 重载 |
---|---|---|
注解 | @Override |
无 |
范围 | 继承(子类) | 同一个类中 |
对方法的要求 | 和父类的方法名一致,参数列表一致,返回类型一致 | 方法名一致,参数列表不同,返回值类型无要求 |
对访问权限的要求 | 不能比父类的访问权限更严格 | 对访问权限无要求 |
3. 访问修饰符
访问权限:对类,方法,变量,常量等访问位置的限定。通过访问权限修饰符来实现。
在Java中,可以在类、类的属性以及类的方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。
private
:私有的,限制在当前类中才能访问。default
:无修饰符,就是default。同类,同包。protected
:受保护的,同类,同包,不同包(仅限于子类访问)public
:公共的,同类,同包,不同包。
访问权限:private < default < protected < public
4. final 关键字
- final可修饰的内容:
- 类(最终类)
- 方法(最终方法)
- 变量(最终变量)
final 修饰类:此类不能被继承。String、Math、System 均为 final 修饰的类,不能被继承。
final 修饰方法:此方法不能被覆盖。意为最终方法,不支持子类以覆盖的形式修改。
final 修饰变量:此变量值不能被改变(常量)。所有 final 修饰的变量只能赋值一次,值不允许改变。
- final 修饰基本类型:值不可变。
- final 修饰引用类型:地址不可变。
- 静态常量不会隐式地提供默认值,必须手动赋予初始值。