java oop 修饰符&关键字&构造器
一、修饰符
Java中四种访问权限修饰符:
- private
- 缺省(default)
- protected
- public
1.1 修饰类的成员
用来限定对象对该类成员的访问权限。
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
---|---|---|---|---|
private | yes | |||
缺省(default) | yes | yes | ||
protected | yes | yes | yes | |
public | yes | yes | yes | yes |
1.2 修饰类
对于class的权限修饰符,只可以用public和default(缺省)。
- publice类可以在任意地方被访问
- default类只可以被同一个包内部的类访问
二、关键字
2.1 关键字列举
Java中的关键字有很多,如:
- 定义数据类型的关键字:
- byte、short、int、long、float、double、char、boolean
- class、interface、enum
- 用于定义流程控制的关键字
- if、else、switch、case、default、while、do、for
- break、continue、return
- 用于定义访问权限修饰符的关键字 【我更愿意把它归纳为修饰符,但这并不影响,看个人习惯】
- private、protected、public
今天主要讲OOP里面的几个关键字
2.2 this关键字
-
在Java中,this关键字比较难理解,它的作用和其词义很相近。
- 它在方法内部使用,即这个方法所属对象的引用。
- 它在构造器内部使用,表示该构造函数正在初始化的对象。
-
this可以调用类的属性、方法和构造器。
-
什么时候使用this关键字呢?
-
当方法内需要用到调用该方法的对象时,就用this。具体的:我们可以用this来区分属性和局部变量。比如:
this.name=name;
-
2.3 super关键字
- 在Java类中使用super来调用父类中的指定操作:
- super可用于访问父类中定义的属性
- super可用于访问父类中定义的成员方法
- super可用于在子类构造器中调用父类的构造器
- 注意:
- 尤其是父类中出现同名成员时,可以用super表明调用的是父类中的成员
- super的追溯不仅限于直接父类
- super和this的用法很相像,this代表本类对象的引用,super代表父类的内存空间的标识
2.4 this VS super
-
this关键字和super关键字区别
序号 区别点 this super 1 访问属性 访问本类中的属性,如果本类没有此属性则从父类中继续查找 直接访问父类中的属性 2 调用方法 访问本类中的方法,如果本类没有此方法则从父类中继续查找 直接访问父类中的方法 3 调用构造器 调用本类构造器,必须放在构造器的首行 调用父类构造器,必须放在子类构造器的首行
2.5 static关键字
-
我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间中只有一份。
-
使用范围:
在Java类中,可用static修饰
- 属性
- 方法
- 代码块
- 内部类
-
static修饰属性:类变量或者静态变量
被修饰后的成员具备以下特点:
-
随着类的加载而加载。可以通过“类.静态变量”的方式进行调用
-
优先于对象存在
-
修饰的成员,被所有对象所共享
-
访问权限允许时,可不创建对象,直接被类调用
-
由于类只会加载一次,则类变量在内存中也只会存在一份,存在方法区的静态域中。
-
开发中,如何确定一个属性是否要声明为static的?
答:属性是可以被多个对象所共享的,不会随着对象的不同而不同的。
-
-
static修饰方法:静态方法或静态方法
-
随着类的加载而加载。可以通过“类.静态方法”的方式进行调用
-
静态方法中,只能调用静态的方法或属性。非静态方法中,既可以调用非静态方法或属性,也可以调用静态的方法或属性。
-
在静态方法内,不能使用this、super关键字。
-
static修饰的方法不能被重写
-
开发中,如何确定一个方法是否要声明为static的?
-
操作静态属性的方法,通常设置为static的
-
工具类中的方法,习惯上声明为static的。比如:Math、Arrays等
-
-
2.6 final关键字
-
使用范围:
- 类
- 变量
- 方法
-
使用关键字final来修饰表示“最终的”
-
final修饰类:
final修饰的类不能被继承。提高安全性、提高程序的可读性。
如:String类、System类、StringBuffer类
-
final修饰方法:
final修饰的方法不能被子类重写。
如:Object类中的getClass()
-
final修饰变量(成员变量或局部变量)即称为常量。
- 名称大写,且只能被赋值一次
- final标记的成员变量必须在声明时或在每个构造器中或代码块中显示赋值,然后才能使用。
三、构造器
3.1 构造器的特征
- 它具有与类相同的名称。
- 它不声明返回值类型。【与声明为void不同】
- 不能被static、final、synchronized、abstract、native修饰、不能有return语句返回值
3.2 构造器的作用
-
创建对象;给对象进行初始化。如:
Teacher t = new Teacher(); Person p = new Person("Peter",15);