zoukankan      html  css  js  c++  java
  • 类初始化与实例化过程

    定义接口Person

    package com.test;
    
    public interface person {
    	int test();
    }
    
    定义父类Father
    package com.test;
    
    public class Father implements person{
    	private int i = test();
    	private static int j = cool();
    	
    	static{
    		System.out.println("Father静态代码块1");
    	}
    	
    	Father(){
    		System.out.println("Father无参构造方法...");
    	}
    	Father(String aa){
    		System.out.println("Father带参构造方法...");
    	}
    	static{
    		System.out.println("Father静态代码块2");
    	}
    	{
    		System.out.println("Father普通代码块1");
    	}
    	private static int cool() {
    		System.out.println("Father静态赋值方法cool()");
    		return 0;
    	}
    	@Override
    	public int test() {
    		System.out.println("Father普通赋值方法test()");
    		return 0;
    	}
    }
    
    定义子类Son
    package com.test;
    
    public class Son extends Father {
    	{
    		System.out.println("Son普通代码块1");
    	}
    	private int i = test();
            static{
    		System.out.println("Son静态代码块1");
    	}
    	private static int j = cool();
    	{
    		System.out.println("Son普通代码块2");
    	}
    	
    	public Son(String aa) {
    		System.out.println("Son带参构造方法");
    	}
    	public Son() {
    		System.out.println("Son无参构造方法");
    	}
    	static {
    		System.out.println("Son静态代码块2");
    	}
    	@Override
    	public int test(){
    		System.out.println("Son普通赋值 方法test()重写");
    		return 1;
    	}
    	public static int cool() {
    		System.out.println("Son静态赋值 方法cool()");
    		return 1;
    	}
    	
    	public static void main(String[] args) {
    		Son s1 = new Son();
    		System.out.println("===========================================");
    		Son s2 = new Son("aa");
    		System.out.println("===========================================");
    		Father s3 = new Son("bb");
    	}
    }
    
    执行子类main方法,结果
    Father静态赋值方法cool()
    Father静态代码块1
    Father静态代码块2
    Son静态代码块1
    Son静态赋值 方法cool()
    Son静态代码块2
    Son普通赋值 方法test()重写
    Father普通代码块1
    Father无参构造方法...
    Son普通代码块1
    Son普通赋值 方法test()重写
    Son普通代码块2
    Son无参构造方法
    ===========================================
    Son普通赋值 方法test()重写
    Father普通代码块1
    Father无参构造方法...
    Son普通代码块1
    Son普通赋值 方法test()重写
    Son普通代码块2
    Son带参构造方法
    ===========================================
    Son普通赋值 方法test()重写
    Father普通代码块1
    Father无参构造方法...
    Son普通代码块1
    Son普通赋值 方法test()重写
    Son普通代码块2
    Son带参构造方法
    

    类初始化过程

    • 类实例化的时候,首先要加载并初始化目标类,初始化过程在程序运行期间只在第一次构建对象时执行一次。

    初始化过程加载的是该类所有的static 修饰的 变量、方法、代码块,其执行顺序按照在代码中出现及调用的先后顺序执行。

    类实例化过程

    • 类实例化过程在每次构建对象时候都会执行。

    实例化过程加载的是该类的所有非static修饰的 变量、代码块,以及它们在加载时候涉及到调用的其它方法,它们按照实例化时在代码中调用的先后顺序执行。

  • 相关阅读:
    leetcode_question_67 Add Binary
    几种常用控件的使用方法
    JavaBean讲解 规范
    [置顶] JDK-CountDownLatch-实例、源码和模拟实现
    恋人分手后需要做的不是挽回而是二次吸引
    leetcode_question_70 Climbing Stairs
    偶然碰到的Win7 64位下CHM 的问题解决
    FTP中各文件目录的说明
    深入理解line-height与vertical-align(1)
    行内元素和块级元素
  • 原文地址:https://www.cnblogs.com/jiujianxian/p/11158638.html
Copyright © 2011-2022 走看看