目录
代码块
代码块分类:
1:局部代码块
出现在方法中,限定生命周期,使用完就释放。
2:构造代码块
出现在类中方法外,优先于构造方法执行,每次调用都执行。
3:静态代码块
出现在类中方法外,用static关键字修饰,随着类的加载而加载,多次调用只执行一次。且在静态代码块中只能访问静态成员。
4:同步代码块(待更新)
例:
class Student {
static {
System.out.println("Student 静态代码块"); // 3
}
{
System.out.println("Student 构造代码块");// 4 6
}
public Student() {
System.out.println("Student 构造方法");// 5 7
}
}
class StudentDemo {
static {
System.out.println("StudentDemo的静态代码块"); //执行顺序 1
}
public static void main(String[] args) {
System.out.println("我是main方法"); // 2
Student s1 = new Student();
Student s2 = new Student();
}
}
继承
概述:当多个类中出现了相同的成员变量和成员方法,只需要把这些相同的内容抽取到一个类中,其他类就可以共同访问这个类中的内容,即为继承。
格式:class 类1 extends 类2
类2 称为超类、父类或基类
类1 称为子类或派生类
继承的优点:提高了代码的复用性和维护性
继承的缺点:增加了耦合性
开发的原则:高内聚、低耦合。 内聚:程序内部独立完成某些功能的能力。
耦合:类与类之间的关系
继承的特点:1:只能继承一个父类
2:可以多层继承 (儿子—父亲—爷爷)
继承的注意点:1:不能继承private修饰的成员。
2:子类不能继承父类的构造方法,但可以用super关键字调用。
super
super为父类的一个引用,可以通过super调用父类的成员和构造方法。
super.成员变量
super.成员方法
调用构造方法
无参:super()
有参:super(x,y)
注意点:子类的所有构造方法(创建子类对象)都会先调用父类的构造方法。
因为子类继承父类,就必须调用父类的构造方法来对父类进行初始化,只有父类的数据初始化完,子类才能继承和使用。
super()和this()不能同时出现
例
public class Test {
public static void main(String[] args) {
Son son = new Son(); //调用无参构造
Son son1 = new Son(5); //调用有参构造
}
}
class Father extends Object {
int num = 20;
double price = 8.2;
public Father() {
super();
System.out.println("父类的空参构造执行了");
}
public Father(int num) {
super();
System.out.println("父类的有参构造执行了");
}
}
class Son extends Father {
int num = 14;
int b = 60;
public Son() {
this(8); //调用本类自己的构造方法
System.out.println("子类的空参构造执行了");
}
public Son(int num) {
super(5); //调用父类有参构造
System.out.println("子类的有参构造执行了");
}
}
结果
父类的有参构造执行了
子类的有参构造执行了
子类的空参构造执行了
父类的有参构造执行了
子类的有参构造执行了