zoukankan      html  css  js  c++  java
  • 对象实例化过程

    对象实例化过程:

    1.看类是否已加载,未加载的话先初始化类。

    2.在堆内存中分配空间。

    3.初始化父类的属性

    4.初始化父类的构造方法

    5.初始化子类的属性

    6.初始化子类的构造方法

    实例:

    package com.xm.load;
    
    public class Animal {
    
        static String str = "I`m a animal!";
    
        public String str1 = "I`m 10 years old @Animal";
    
        static {
            System.out.println(str);
            System.out.println("加载父类静态代码块");
        }
    
        static void doing() {
            System.out.println("This ia a Animal!");
        }
    
        public Animal() {
            doing();
            System.out.println(str1);
            System.out.println("Animal 对象实例化");
        }
    
    
    }
    
    class Dog extends Animal{
    
        static String str = "I`m a dog!";
    
        private String str1 = "I`m 10 years old @Dog";
    
        static {
            System.out.println(str);
            System.out.println("加载子类静态代码块");
        }
    
        static void doing() {
            System.out.println("This ia a dog!");
        }
    
        public Dog() {
            doing();
            System.out.println(str1);
            System.out.println("Dog 对象实例化");
        }
    
    
        public static void main(String[] args) {
            new Dog();
        }
    }
    
    

    运行结果:

    I`m a animal!

    加载父类静态代码块

    I`m a dog!

    加载子类静态代码块

    This ia a Animal!

    I`m 10 years old @Animal

    Animal 对象实例化

    This ia a dog!

    I`m 10 years old @Dog

    Dog 对象实例化

    我们来看一下,重写过的父类方法,在加载父类时的情况。

    实例:

    package com.xm.load;
    
    public class Animal {
    
        static String str = "I`m a animal!";
    
        public String str1 = "I`m 10 years old @Animal";
    
        static {
            System.out.println(str);
            System.out.println("加载父类静态代码块");
        }
    
        static void doing() {
            System.out.println("This ia a Animal!");
        }
    
        public void todoing() {
            System.out.println(str1);
            System.out.println("加载子类的重写方法");
        }
    
        public Animal() {
            doing();
            todoing();
            System.out.println("Animal 对象实例化");
        }
    
    
    }
    
    class Dog extends Animal{
    
        static String str = "I`m a dog!";
    
        private String str1 = "I`m 10 years old @Dog";
    
        static {
            System.out.println(str);
            System.out.println("加载子类静态代码块");
        }
    
        static void doing() {
            System.out.println("This ia a dog!");
        }
    
        public void todoing() {
            System.out.println(str1);
            System.out.println("加载子类的重写方法");
        }
    
        public Dog() {
            doing();
            System.out.println("Dog 对象实例化");
        }
    
    
        public static void main(String[] args) {
            new Dog();
        }
    }
    
    

    结果:

    I`m a animal!

    加载父类静态代码块

    I`m a dog!

    加载子类静态代码块

    This ia a Animal!

    null

    加载子类的重写方法

    Animal 对象实例化

    This ia a dog!

    Dog 对象实例化

    由此可见,null代表着加载父类构造方法时,调用的todoing( )方法是子类的方法,且子类的属性的初始化过程发生在父类构造方法之后。

  • 相关阅读:
    网页制作之JavaScript部分3--事件及事件传输方式(函数调用 练习题 )重要---持续更新中
    网页制作之JavaScript部分 2
    网页制作之JavaScript部分 1
    css之display:inline-block与float区别(可以尝试用一下)
    边框圆角化方式(原文链接http://www.cnblogs.com/SJP666/p/4678730.html)
    网页制作之html基础学习5-background-position用法
    网页制作之html基础学习4-格式与布局
    网页制作之html基础学习3-css样式表
    网页制作之html基础学习2-标签
    程序员的成长必备
  • 原文地址:https://www.cnblogs.com/TimerHotel/p/java_newObject.html
Copyright © 2011-2022 走看看