一、this关键字
1.this表示调用本类属性
只要在类中访问类的属性,一定要加上this关键字。
// this.name 和 this.age 明确表示不会就近取用,而是找类中属性
class Person{
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public void getPersonInfo(){
System.out.println("姓名为" + name + "," + "年龄为" + age);
}
}
public class Test1{
public static void main(String[] args){
Person per1 = new Person("张三", 20);
per1.getPersonInfo();
}
}
输出结果为:
姓名为张三,年龄为20
2.this表示调用本类方法
(1)调用普通方法 this.方法名( 参数 )
当有类的继承关系时,表示本类方法一定要加上 this 关键字
(2)调用构造方法 this( 参数 )
- this 调用构造方法必须放在构造方法首行
- this 调用构造方法不允许成环
3.this表示当前对象
this 表示当前调用该方法的对象(per1里存的就是地址)
二、static 关键字
1.static修饰变量 - 类属性(静态属性)
- static属性称为类属性,保存在全局数据区中(方法区 - 所有对象共享区域),通过类名调用,与对象实例化无关。
- 一旦其中一个对象为static属性赋值,则其余对象也共享该值。描述共享属性使用static修饰属性
- static一般用public修饰
- 调用:类名称 . 属性名
2.static修饰方法 - 类方法(静态方法)
- 通过类名调用,与对象实例化无关。常见于工具类方法
- static 不能用于方法中,即局部变量不能用static修饰
- static 和 private 均不能用于外部类,但可以修饰内部类
三、super关键字
1.super用于方法
(1)用于构造方法
表示调用父类的构造方法,super( 参数列表 )
- 当子类调用父类的无参构造时,super( ) 可写可不写,表示调用父类的无参构造
- 当子类调用父类的有参构造时,super( 参数列表 ) 必须要写,告诉编译器调用的是哪个有参构造
子类构造方法中调用父类构造方法,必须是第一行语句。所以 this( ) 和 super( ) 不能同时使用。
(2)用于普通方法
super . 方法名( 参数列表 )
用于在子类中明确调用父类被覆写的方法
2.super用于属性(了解)
super . 属性名 - 表示调用父类被覆写的属性(即权限不是 private 的属性)
因为属性一般都被封装,没有被覆写的概念,一般都是通过 getter 和 setter 取得和设置属性内容。
3.this 与 super 的区别
区别 | this | super |
概念上 | 访问本类中的属性和方法 | 由子类访问父类中的属性和方法 |
查找范围 | 先查找本类,如果本类没有就调用父类的 | 不查找子类,直接调用父类的 |
特殊 | 表示当前对象 | 五 |
四、final关键字 - 终结器
1.final修饰类(String类以及8大基本数据类型的包装类)
当一个类被final修饰,表示该类不能拥有子类(即该类不允许被extends继承)
一旦一个类被final修饰,该类的所有方法都会默认加上final(成员变量不会加上final)
2.final修饰方法
当一个方法被final修饰,明确表示该方法不允许被覆写
当一个方法被private修饰后,相当于加了一个final关键字
3.final修饰属性 - 常量
(1)final修饰普通数据类型的成员变量(主要用途)
被final修饰的成员变量必须在声明时初始化,并且初始化后值无法被修改;
没有在声明时初始化,可以在构造方法或构造块中初始化。
- final 变量 = 常量(值不能改,每个对象都有自己的final变量,在对象产生时初始化,存放在堆中)
- static final 变量 = 全局常量(所有对象共享此变量,并且在类加载时初始化,效率较高,通过类名调用,存放在全局区)
全局常量命名规范:多个单词全大写,单词间 _ 分隔
// 两种初始化全局常量的方法如下:
class Test{
public final int = 5;
public static final int B = 10; //全局常量
public static final int C;
static{
C = 16;
}
}
(2)final修饰引用数据类型的变量(值不能改,类型也不能改)
// 如下,a的值可以改,但t的值不可以改
class Test{
public int a = 5;
}
public class Work{
public static void main(String[] args){
final Test t = new Test();
t.a = 10;
System.out.println(t.a);
}
}
输出结果为:
10