java 关键字
1.this
this表示一个对象的引用,它指向正在执行方法的对象. 特别的, 在构造方法中,通过this关键字调用其他构造方法时,必须放在第一行,否则编译器会报错. 且在构造方法中, 只能通过this调用一次其他构造方法.
2.super
super是指向父类的引用,如果构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。如果父类由没有默认的无参构造方法,编译器就会报错,super()语句必须是构造方法的第一个子句。
定义子类的一个对象时,会先调用子类的构造函数,然后在调用父类的构造函数,如果父类函数足够多的话,会一直调用到最终的父类构造函数,函数调用时会使用栈空间,所以按照入栈的顺序,最先进入的是子类的构造函数,然后才是邻近的父类构造函数,最后再栈顶的是最终的父类构造函数,构造函数执行是则按照从栈顶到栈底的顺序依次执行.
示例如下:
package com.study.keyword;
public class Car {
public static void print(){
System.out.println("我就想打印一行代码");
}
public Car() {
System.out.println("我是车,我能跑");
}
public Car(String name){
System.out.println("我是"+ name +"车,我能跑");
}
public static void run(){
System.out.println("我正在跑 。。。");
}
static {
System.out.println("我是父类车子的默认属性,我觉得我会被先初始化");
}
}
package com.study.keyword;
public class Bike extends Car {
public Bike() {
System.out.println("我是自行车,我跑的不是很快");
}
public Bike(String name) {
System.out.println("我是"+name+",我跑的不是很快");
}
public void run(){
System.out.println("我是自行车,我正在跑");
}
public static void main(String[] args) {
//1.期待结果,先输出先初始化父类狗做方法,子类构造方法,子类run() 方法
Bike bike = new Bike();
System.out.println("--------------");
Bike bike1 = new Bike("改自行车");
bike1.run();
}
}
输出结果
我是父类车子的默认属性,我觉得我会被先初始化
我是车,我能跑
我是自行车,我跑的不是很快
--------------
我是车,我能跑
我是改自行车,我跑的不是很快
我是自行车,我正在跑
代码解释:(代码运行期)只要执行子类方法 父类的static 静态代码块就会执行,执行子类构造方法的时候会默认调用父类的无参构造方法,再执行自己的构造方法,子类的构造方法中不显示的声明父类构造有参构造方法,new 子类的时候就只会调用父类的无参构造方法
3.assert 关键字
assert 是宏,而非"报错"
assert() 的用法像是一种"契约式编程",表达的意思是,程序在我的假设条件下,能够正常良好的运作,其实就相当与一个if 语句
if(假设成立){
程序正常运行
}else{
报错&&终止程序!(避免程序运行引起更大的错误)
}