本文目的:
旨在总结所学的理论知识,通过自己写demo小例,强化所学的基础理论知识,已达到温故而知新的目的。希望对刚接触java,还比较懵圈的朋友,有一个综合性的代码来解释实例化过程,这将帮助你理解代码的来去有很大的帮助。
结论:
1.父类静态方法和静态代码块,按在代码中出现的顺序依次执行。
2.子类静态方法和静态代码块,按在代码中出现的顺序依次执行。
3. 父类的构造方法和代码块,按在代码中出现的顺序依次执行。父类构造方法中调用自己未实现的抽象方法时,可以在子类还未实例化前调用子类的实现方法(简单说:就是可以先于子类用子类的方法,即使子类还没有初始化)
4.子类的构造方法和代码块,按在代码中出现的顺序依次执行。
5.执行子类成员变量和成员方法,按在代码中出现的顺序依次执行。(特殊有一点:如果是引用对象,且是同一个父类,则不会执行静态代码部分)
代码实现如下:
1 父类:Animal类
public abstract class Animal {
{//父类代码块
System.out.println("执行Animal的代码块");
}
static{ //父类静态代码块
System.out.println("执行Animal的静态代码块");
}
//父类的构造方法:依次在调用父类的几个成员方法
public Animal(){
System.out.println("我是Animal父类");
eat();
say();
sleep();
}
public abstract void eat();
public abstract void say();
public abstract void sleep();
}
2 子类1:猫类
public class Cat extends Animal {
{ // 代码块
System.out.println("执行cat的代码块");
}
static {// 静态代码块
System.out.println("执行cat的静态代码块");
}
// 猫类的构造方法:里面依次在注入属性值和调用成员方法
public Cat() {
System.out.println("执行构造方法实例化一只小猫");
System.out.println("猫类要开始吃叫睡和有名字:");
this.setName("小花猫");
sleep();
this.setAge(1);
this.setDog(new Dog());
eat();
say();
}
// 三个属性:分别为String类型,int类型和引用类型
private String name;
private int age;
private Dog dog;
// 猫吃的方法
@Override
public void eat() {
System.out.println("小猫吃");
}
// 猫叫的方法
@Override
public void say() {
System.out.println("小猫叫");
}
// 猫睡觉的方法
@Override
public void sleep() {
System.out.println("小猫睡");
}
// 以下是set get方法
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("在给小猫设置名字");
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
System.out.println("在给小猫设置年龄");
this.age = age;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
System.out.println("在给小猫设置dog对象属性");
this.dog = dog;
}
}
3 子类2: 狗类
public class Dog extends Animal {
{
System.out.println("执行Dog的代码块");
}
static{
System.out.println("执行Dog的静态代码块");
}
public Dog() {
System.out.println("实例化一只小狗");
}
@Override
public void eat() {
System.out.println("小狗吃");
}
@Override
public void say() {
System.out.println("小狗叫");
}
@Override
public void sleep() {
System.out.println("小狗睡");
}
}
4 测试类:
public class demo {
public static void main(String[] args) {
Cat cat =new Cat();
System.out.println("------------------华丽丽的分割线----------------");
Dog dog =new Dog();
}
}
5 测试结果:
执行Animal的静态代码块
执行cat的静态代码块
执行Animal的代码块
我是Animal父类
小猫吃
小猫叫
小猫睡
执行cat的代码块
执行构造方法实例化一只小猫
猫类要开始吃叫睡和有名字:
在给小猫设置名字
小猫睡
在给小猫设置年龄
执行Dog的静态代码块
执行Animal的代码块
我是Animal父类
小狗吃
小狗叫
小狗睡
执行Dog的代码块
实例化一只小狗
在给小猫设置dog对象属性
小猫吃
小猫叫
——————华丽丽的分割线—————-
执行Animal的代码块
我是Animal父类
小狗吃
小狗叫
小狗睡
执行Dog的代码块
实例化一只小狗
6 结论
结果与上述情况吻合,希望此例对大家有帮助