22.3 Extends 构造方法的执行顺序】的更多相关文章

/** 1.有子父类继承关系的类中,创建父类对象未调用,执行父类无参构造* 2.有子父类继承关系的类中,创建子类对象未调用,执行顺序:默认先调用 父类无参构造---子类无参构造* 在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,则默认调用父类无参构造** * 为什么要调用父类构造? * 因为需要给父类的成员变量初始化 * 肯定会先把父类的构造执行完毕,在去执行子类构造中的其他代码 * */ 1.创建子类对象,使用子类无参构造,子类无参构造第一行代码没有调用其他构造.…
Java Object 构造方法的执行顺序 @author ixenos 为了使用类而做的准备工作包括三个步骤 1)加载:类加载器查找字节码(一般在classpath中找),从字节码创建一个Class对象 2)链接:验证字节码,为静态域(只是static修饰的域,不包含static final )分配存储空间,解析此类对其他类的所有引用 3)初始化:若该类有超类,对其初始化,执行静态初始化器和静态初始化块. 类初始化时构造方法执行顺序 对于某一个子类时: (1)初始化对象的存储空间为零或null…
今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必这个大多数学java的都做过,不知道是否都理解了) class Fu{ static { System.out.println("Fu static code"); } { System.out.println("Fu code"); } public Fu(){ Sy…
Java(静态)变量.(静态)代码块.构造方法的执行顺序 总结 1.父类静态变量和静态代码块(先声明的先执行); 2.子类静态变量和静态代码块(先声明的先执行); 3.父类的变量和代码块(先声明的先执行); 4.父类的构造方法; 5.子类的变量和代码块(先声明的先执行); 6.子类的构造方法. 注意事项 1.非静态代码块于构造方法之前执行,并且每次实例化对象之前都会先执行非静态代码块,静态代码块于非静态代码块之前执行; 2.在类第一次被调用时,加载该类,静态代码块只执行一次; 3.静态代码块只能…
1.静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了.1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值.2.构造代码块:是独立的,必须依附载体才能运行,Java会把构造代码块放到每种构造方法的前面,用于实例化一些共有的实例变量,减少代码量.3.构造方法:用于实例化变量.1是类级别的,2.3是实例级别的,自然1要优先23.在就明白一点:对子类得主动使用会导致对其父类得主动使用,所以尽管实例化的是子类,但也会导致父类的初…
本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ static { System.out.println("执行Person静态代码块"); } { System.out.println("执行Person构造代码块"); } public Person(){ System.out.println("执行Person构…
写了许久的代码,却把一些基础的东西都给忘了,今天无聊就顺手写了个,然后测试下,发现跟我记忆中的竟然有些出入,作为一个两年的开发,我感觉自己很失败啊. 父类pojo: public class Pojo { static { System.out.println("父类的静态代码块"); } { System.out.println("父类的代码块"); } Pojo() { System.out.println("父类的无参构造方法"); } P…
JAVA中的静态代码块 构造代码块 构造方法执行顺序: 静态代码块(类加载时执行)>>构造代码块>>构造方法 下面展示一个简单的例子,推荐大家动手运行一遍: public class Main { public static void main(String[] args) { son s = new son(); } } /*父类*/ public class father { private static String faterstaticArea = "fathe…
1:访问修饰符 private     同类中 默认        同类        同包 protect    同类         同包      子类 public     同类        同包        子类         其它任何地方 2:导包 当两个类同名时  需要进行导包以区分, 3:继承 1)继承成员变量,但与访问修饰符有关系. 4:继承中的构造方法 1)子类中的构造方法默认调用父类的无参构造,如果用super在子类构造中调用父类的有参构造就会将父类的无参构造覆盖,如…
子类A继承父类B,A a=new A(); 正确的执行顺序是:父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数 也就是说非静态初始化块的执行顺序要在构造函数之前. class FatherStaticTest { static { System.out.println("执行父类的静态代码块."); } FatherStaticTest() { System.out.println(&qu…
Son子类 public class Son extends Parent { static String y ="son的static属性"; public static void main(String[] args) { new Son(1); } public Son(int x) { System.out.println("I'm son 的构造器--"); } { System.out.println("son普通代码块--"); }…
分析:当执行new Child()时,它首先去看父类里面有没有静态代码块,如果有,它先去执行父类里面静态代码块里面的内容,当父类的静态代码块里面的内容执行完毕之后,接着去执行子类(自己这个类)里面的静态代码块,当子类的静态代码块执行完毕之后,它接着又去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法:父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块.子类的非静态代码块执行完毕再去执行子类的构造…
一.先执行内部静态对象的构造方法,如果有多个按定义的先后顺序执行:静态对象在构造的时候也是也先执行其内部的静态对象. 二.再调用父类的构造方法(父类还有父类的话,从最开始的基类开始调用),如果没有明显指定调用父类自定义的构造方法,那么编译器会调用默认的父类构造方法super().但是如果要调用父类自定义的构造方法,要在子类的构造方法中明确指定. 三.按声明顺序将成员引用对象变量初始化. 四.最后调用自身的构造方法. 下面以一个例子来说明代码如下: class Animal{ String nam…
在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1.子类的构造方法中必须调用其基类的构造方法(显示或隐式) 1.1.若是显示调用,则可以通过 super(argument_list) 来调用,且super调用必须在首行以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化(this关键字可以调用本类中的其他构造器,也必须在首句,因此thi…
package test; class Parent{ { System.out.println("父类普通代码块"); } static{ System.out.println("父类静态代码块"); } public Parent(){ System.out.println("父类默认构造代码方法"); } } class Child extends Parent{ { System.out.println("\t子类普通代码块&q…
静态代码块 -- >构造代码块 --> 构造方法静态代码块:只执行一次构造代码块:每次调用构造方法都执行 http://blog.csdn.net/wuhaiwei002/article/details/55226155 JAVA是一门面向对象的编程语言,这里考虑“类”里面在程序开始执行时的执行顺序. 先看一个实例: class Person{ static { System.out.println("执行Person静态代码块"); } { System.out.prin…
1.父类 public class Person { private String name = "李四"; private int age; public Person() { System.out.println("Person的构造方法执行了!"); System.out.println(this.getClass().hashCode()); } public Person(String name, int age) { this.name = name;…
要明白子类和父类的初始化执行顺序,只需要知晓以下三点,就不会再弄错了. 1.创建子类对象时,子类和父类的静态块和构造方法的执行顺序为:父类静态块->子类静态块->父类构造器->子类构造器.深入理解为什么是这个顺序,可以看我这篇文章:从京东面试题看java类和对象的初始化 2.静态变量的声明和赋值,声明会在静态块之前,赋值运算将会合并到静态块中,顺序和源代码中的顺序一致.举例如下:源代码 [Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 p…
/* 代码块:在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同,可以分为 局部代码块:局部位置,用于限定变量的生命周期. 构造代码块:在类中的成员位置,用{}括起来的代码.每次调用构造方法执行前,都会先执行构造代码块. 作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化. 静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰了. 作用:一般是对类进行初始化. 静态代码块,构造代码块,构造方法的执行顺序? 首先执行静态代码块 接着执行构造…
先看看下面几个类,然后判断它们的输出public class A { static{System.out.print(1);}public A(){System.out.print(2);}} public class B extends A{ static{System.out.print("a");}public B(){System.out.print("b");}} public class C { public static void main(Strin…
一个类中执行顺序: 静态变量静态代码块代码块构造方法 子类和父类执行顺序: 父类静态变量父类静态代码块子类静态变量子类静态代码块父类代码块父类构造方法子类代码块子类构造方法 直接看代码,一目了然. public class Test { public static void main(String[] args) { new A(); /* 结果: * A静态变量 A静态代码块 A代码块 A构造方法 * */ new B(); /* * 结果: * A静态变量 A静态代码块 B静态变量 B静态代…
注:下列代码中的注释都是JUnit4单元测试运行结果. 首先,没有父类的(父类是Object)的类A package Static.of; public class A { { System.out.println("我是父类-----大括号中的代码"); } static{ System.out.println("我是父类-------static代码块"); } public A(){ System.out.println("我是父类A--------…
在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class A { public A() { System.out.println("class A"); } { System.out.println("I'm A class"); } static { System.out.println("class A stat…
静态代码块   static{ 代码 } 随着类的加载而加载,随类的消失而消失,存在于类中,方法外,最先执行,且只加载1次,可用来加载驱动及初始化对象属性. 构造代码块   {   } 也存在于类中,方法外,由多个构造方法中相同的代码存放到一个代码块中调用执行,由于构造方法执行. 具体执行顺序参考下面代码. 例: public class Demo4 { static{ System.out.println("Demo静态代码块执行了"); } { System.out.println…
一:静态代码块 注意是代码块,不是静态函数.函数要调用才执行,代码块加载就执行,一般是静态变量的声明与初始化.被static修饰的代码块(赋值.输出操作等).类中静态语句块仅在类加载时被执行一次 如 static int a=1: static { int b=2; System.out.print(b);} 二:构造代码块 构造代码块是指不在类的任何一个方法中的代码.一般为全局变量的声明与初始化.顺序执行的输出语句等等.如果没有static修饰的话,这些代码按照编码时顺序执行. Java会把构…
结论:执行的大致顺序如下, (1) 在一个不存在继承的类中:初始化static变量,执行static初始化块-->初始化普通成员变量(如果有赋值语句),执行普通初始化块-->构造方法 (2)在一个存在继承的类中:初始化父类static成员变量,运行父类static初始化块-->初始化子类static成员变量,运行子类static初始化块-->初始化父类实例成员变量(如果有赋值语句),执行父类普通初始化块-->父类构造方法-->初始化子类实例成员变量(如果有赋值语句)及普…
说实话,这块真的不好理解啊~都怪jvm  执行顺序搞这么复杂,哼╭(╯^╰)╮ 但是  我们能怎么办,只能研究呗!!! !:首先,毫无置疑的,静态代码块在加载时就执行了,所以肯定是最先执行的.... 2:老师是不是说过,非静态代码块是在每次实例化对象时被调用的,那问题就来了,是非静态代码块中的内容先执行的,还是构造方法中的内容执行的呢? 其实:在Child Child = new Child()时,new Child()时就会创建一个对象了,但是这个对象还不会执行构造方法中的内容,然后带着这个创…
UI程序的一般执行顺序: 先进入main里面,执行函数UIApplicationMain(),通过该函数创建应用程序对象和指定其代理并实现监听,当执行函数UIApplicationMain()时还会做一次跳转,跳转至AppDelegate UIApplicationMain() 函数的三大功能: 1.创建应用的UIApplication对象 2.指定应用程序的代理对象,代理的主要作用:监听应用程序是如何运行的. 3.建立事件循环(runloop:这个循环是一个死循环).作用:一旦用户操作应用程序…
http://www.cnblogs.com/naruto469/p/3608459.html public class Print { 2 3 public Print(String s){ 4 System.out.print(s + " "); 5 } 6 } 1 public class Test1 { 2 3 public static Print obj1 = new Print("1"); 4 5 public Print obj2 = new Pri…
无意中看到下面一个题目,大家一起来看看最后的输出结果是什么.反正我看完之后,用IDE测试后感觉知识点得到巩固了. /** * 函数执行顺序测试 * Created by 萌小Q on 2017/5/17 0017. */ public class ExeSeqTest { public static void main(String [] args){ System.out.println(new B().getValue()); } static class A{ protected int…