精华内容
下载资源
问答
  • 构造方法执行顺序

    千次阅读 2018-06-19 06:51:34
    在调用子类构造器之前,...指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。...

    在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。


    静态块:用static申明,JVM加载类时执行,仅执行一次
    构造块:类中直接用{}定义,每一次创建对象时执行
    执行顺序优先级:静态块>main()>构造块>构造方法
    静态块按照申明顺序执行,所以先执行publicstaticB t1 = newB();该语句创建对象,则又会调用构造块,输出构造块
    接着执行public static B t1 = new B();输出构造块
    再执行
    static
    {
    System.out.println("静态块");
    }输出静态块
    最后main方法执行,创建对象,输出构造块。

    public class B
    {
        public static B t1 = new B();
        public static B t2 = new B();
        {
            System.out.println("构造块");
        }
        static
        {
            System.out.println("静态块");
        }
        public static void main(String[] args)
        {
            B t = new B();
        }
    }
    

    展开全文
  • 继承中的构造方法执行顺序 在子父类中,创建子类对象,调用子类的构造方法, 在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,则默认调用父类无参构造。 为什么要调用父类构造...

    继承中的构造方法执行顺序

    在子父类中,创建子类对象,调用子类的构造方法,

    在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,则默认调用父类无参构造。

     

    为什么要调用父类构造?

     因为需要给父类的成员变量初始化。肯定会先把父类的构造执行完毕,在去执行子类构造中的其他代码。

     

    super(实参列表);语句   在子类的构造方法中使用,用来调用父类中的构造方法(具体哪一个由传递的参数决定),并且只能在构造方法第一行使用

    this(实参列表); 语句    在类的构造方法中使用,用来调用本类中的其它构造方法(具体哪一个由传递的参数决定),并且只能在构造方法的第一行使用

     

    例如:下面这个例子中,首先调用子类的无参构造,因为第一行是this语句,所以这里不调用父类的无参构造。(第一行是this或super都不调用),然后执行this(1),调用的子类的有参构造,但是子类的有参构造第一行代码没有调用父类的构造或子类的其他构造,所以默认调用父类的无参构造。所以最终的输出结果为:“我是父类的无参构造”--->“我是子类的有参构造”--->“我是子类无参构造”

    package com.itheima;
    
    public class ExtendsDemo6 {
    	public static void main(String[] args) {
    		Zi z=new Zi();
    	}
    }
    
    class Die {
    	public Die() {
    		System.out.println("我是父类无参构造");
    	}
    
    	public Die(int num) {
    		System.out.println("我是父类有参构造");
    	}
    }
    
    class Zi extends Die {
    	public Zi() {
    		this(1);
    		System.out.println("我是子类无参构造");
    	}
    
    	public Zi(int num) {
    		System.out.println("我是子类有参构造");
    	}
    }
    展开全文
  • static语句 构造语句 构造方法执行顺序

    先看一到面试题:

    package com.szn.test;
    
    class ClassA {
    	// 加载
    	private static int valueStaticA = 10;
    	static {
    		System.out.println("I'm static classA " + valueStaticA);
    	}
    
    	// 实例化
    	private int valueA = 100;
    	{
    		System.out.println("I'm classA " + valueA);
    	}
    
    	C c = new C();
    	// 会循环调用
    	// ClassA a = new ClassA();
    	public ClassA() {
    		valueA = 101;
    		System.out.println("I'm classA constructor " + valueA);
    	}
    }
    
    class C {
    	C() {
    		System.out.println("C");
    	}
    }
    
    public class ClassB extends ClassA {
    	static {
    		System.out.println("I'm static classB");
    	}
    
    	{
    		System.out.println("I'm classB");
    	}
    
    	C c = new C();
    
    	public ClassB() {
    		System.out.println("I'm classB constructor");
    	}
    
    	public static void main(String[] args) {
    		new ClassB();
    		// System.out.println(classA.class);
    	}
    
    }
    

    执行结果是:






    执行结果是:

    I'm static classA 10
    I'm static classB
    I'm classA 100
    C
    I'm classA constructor 101
    I'm classB
    C
    I'm classB constructor

              结果说明, 1,先执行ClassA的静态语句块,再执行ClassB的静态语句块;

                              2,再执行ClassA的构造语句块,执行完后再执行ClassA的构造方法;
                              3,再执行ClassB的构造语句块,执行完后再执行ClassB的构造方法。

             首先看下java类的加载,java的类加载是由类加载器完成的。类加载器不会一下子把所有的类都加载进java虚拟机中,而是在第一次使用到类时才会加载。使用到类包括使用到类的.class,创建类的对象,使用类的子类(这种情况会先初始化父类再初始化子类),使用到类的静态方法或者静态变量。在例子中,new ClassB() 会导致ClassB及其父类ClassA的加载。其中,首先加载的是ClassA,之后是ClassB。这是由于

           接着说下java类加载的流程,java类经过编译生成字节码后,java虚拟机将字节码读入内存中,并对字节码进行校验,经过准备(为类的静态变量分配内存,并将其初始化为默认值)、解析(把类中的符号引用转换为直接引用)、初始化,完成加载。
           静态变量存储在静态存储区,全局变量如果为基本类型,存储在栈中,如果是对象,则在堆内存中创建对象,并将对象在堆内存中的地址存放在栈中。
       (未完 待续)
           


    展开全文
  • 经理招聘,让我看了下面试题,有道涉及static方法与构造方法执行顺序问题。我又添加了个构造代码块,给大家详细解释一下 class A { //直接在类中定义且没有加static关键字的代码块称为{}构造代码块,加了...

    经理招聘,让我看了下面试题,有道涉及static方法与构造方法执行顺序问题。我又添加了个构造代码块,给大家详细解释一下

     

    class A {
        //直接在类中定义且没有加static关键字的代码块称为{}构造代码块,加了static关键字的static{}成为静态代码块
        // 静态内容是随着类的加载而加载的,因此执行顺序static代码块>构造方法
        public A() {// 构造方法。在该类被实例化的时候被执行
            System.out.print("1");
        }
        {// 构造代码块在类实例化时被调用,每次创建对象都会被调用,执行次序构造代码块>构造函数。
            System.out.print("2");
        }
        static {// 静态代码块,在该类被加载入JVM时,被执行,且只会被执行一次。不能被继承。
            System.out.print("3");
        }
    }
    
    class B extends A {
        static {
            System.out.print("4");
        }
        {
            System.out.print("5");
        }
        public B() {
            // 默认super();继承父类构造方法.且为子类无参构造第一行
            System.out.print("6");
        }
    }
    
    public class Hello {
        public static void main(String[] args) {
            A ab = new B();// 声明父类型子对象,new的B类,但B继承自A类,加载B类时先加载A类
            //A静态>B静态>A构造代码块>A构造方法>B构造代码块>B构造
            ab = new B();
        }
    }
    View Code

     

    转载于:https://www.cnblogs.com/yanan7890/p/8473510.html

    展开全文
  • 文章目录1、谈谈static的那些事1.1static的特点:1.2静态变量1.3静态方法1.4静态代码块1.5静态内部类2、静态代码块、构造代码块、构造方法执行顺序 前言:之前写过一篇关于static关键字的博客,说实话现在回过头来再看...
  • JAVA父子类构造方法执行顺序 一、问题引入 先看下面一段代码: public class T08_NEWCLASS { } 很简单的一个类,当我们把它编译后再看class文件,会发现多了一个 构造方法(java类会默认继承Object 类) ...
  • JAVA 初始化块 静态初始化块 构造方法执行顺序 类初始化顺序如下 父类的静态初始化块 子类的静态初始化块 父类的初始化块 父类的构造器 子类的初始化块 子类的构造器 代码演示 创建父类 ClassA,子类ClassB继承自...
  • Java代码块,静态代码块,构造方法执行顺序父类子类main结果总结顺序 父类 class A { { System.out.println("A:代码块"); } static { System.out.println("A:静态代码块"); } A() { System.out.println("A...
  • static、static代码块、成员变量初始化、构造方法执行顺序 static代码块、成员变量初始化、构造方法执行顺序(先执行static代码块,再初始化成员变量,再执行构造方法) public class Test{ public static void ...
  • 构造代码块 和 构造方法 执行顺序

    千次阅读 2019-01-03 11:42:57
    构造代码块:定义在类的成员位置,直接使用{ },...当构造代码块执行结束之后,开始执行构造方法本身的代码内容 格式: public class ClassName{ // 构造代码块 { // 执行语句 } } 构造代码块和构造方法执...
  • 普通代码块只有在创建对象时会执行,并且执行顺序优先于构造方法 执行顺序:静态代码块和静态变量 -> 普通代码块 -> 构造方法 public class Parent { static String name = "parent"; static { System....
  • 有关静态代码块,构造代码块,main函数,构造函数,静态方法执行顺序 静态代码块是最先执行的,这里有可能会和静态方法联系起来,静态代码块和静态方法都会在类加载的时候,被加载,但是静态代码块会直接执行(且只...
  • 子类的构造方法总是先调用父类的构造方法 子类的构造方法没有明显地指明使用父类的哪个构造方法(没有super关键词),子类默认调用父类不带参数的构造方法。 如果父类没有不带参数的构造方法(父类只定义了带参数的...
  • java 静态块 非静态块 构造方法 执行顺序 public class Test { public Test() { System.out.println("构造方法"); } { System.out.println("非静态块按顺序1"); } static { System.out....
  • Java中一般有会区分静态代码块、构造代码块、构造函数执行顺序 静态代码块依赖于类而生存的, 类加载时候最先执行,只执行一次 构造代码块存在于类之下,依赖于对象而生存,不管是创建有参或者无参构造,每次创建...
  • 验证子类继承父类中的static模块、构造方法执行顺序 验证java多态性
  • 如果一个类,则执行顺序为: 静态代码块和静态方法初始化-类非静态方法-构造方法 public class StaticDemo { StaticDemo(){ System.out.println("构造"); } static { System.out.println("静态"); } { ...
  • package org.deng.learn.basic.extendslearn; public class Father { static { System.out.println("父类静态代码块1"); } private static int age = 10;... //静态代码块的执行和静态变量的初始化按顺序执行.
  • public class Father { static { System.out.println("父类静态... System.out.println("父类构造方法"); } public static void main(String[] args) { new Son(); } } class Son extends Father { stat
  • java静态代码块和构造方法执行顺序 2010-03-12 15:54:01|分类: java |字号订阅 先看看下面几个类,然后判断它们的输出 public class A...
  • * 继承中,static代码块,代码块,构造方法执行顺序问题 */ public class Test { @SuppressWarnings("unused") public static void main(String[] args) { Sun t = new Sun(); } } class Father{ { ...
  • 执行顺序跟代码顺序一致。2、类实例化时,初始化变量、执行代码块、执行构造。其中初始化变量和代码块的顺序跟代码顺序一致。执行构造是在最后。3、实例化子类时,会先调用父类的构造方法。调用构造方法之前,会先...
  • 静态代码块和构造方法执行顺序 1.当父类与子类都有静态代码块和构造函数的时候,执行顺序如下: 1)父类静态代码块 > 子类静态代码块 2)父类构造函数 > 子类构造函数(先有父亲,后有孩子) 3)如果是多级继承关系的...
  • 静态代码块,局部代码块,构造方法,静态成员变量执行顺序一.理解执行顺序1.简单的执行顺序2.继承中的执行顺序3.静态初始化顺序执行二.对于执行顺序的练习 一.理解执行顺序 1.简单的执行顺序 父类A public class A { ...
  • import java.lang.reflect.... * 验证静态代码块和构造代码块执行顺序 * * 1.加载父类静态代码块 * 2.加载子类静态代码块 * 3.加载父类构造代码块 * 4.父类构造方法 * 5.子类构造代码块 * 6.子类构造方法
  • Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题
  • 静态代码块先于构造块,构造方法执行,而且只在类加载时候执行一次,后面在类实例化的时候会先执行构造块,而且每 执行实例化一个对象,就会执行一次构造块,执行完构造块会执行构造方法。 public class ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,513
精华内容 1,805
关键字:

构造方法执行顺序