java类初始化优先级】的更多相关文章

父类静态变量.父类静态代码块.子类静态变量.子类静态代码块.父类非静态变量.父类非静态代码块.父类构造函数.子类非静态变量.子类非静态代码块.子类构造函数…
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public HelloA(){//构造函数 } 关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的.2.构造函数的作用是用于给对象进行初始化.3.一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次. 构造代码块 {//构造代码块 }…
Java类初始化 成员变量的初始化和构造器 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值 对于  char.short.byte.int.long.float.double等基本数据类型的变量来说会默认初始化为0(boolean变量默认会被初始化为false) 对于引用类型的变量,会默认初始化为null 如果类内没有显示的定义构造器,则编译器会自动创建一个无参构造器,但是如果类内显示定义了构造器,则编译器不会再自动创建无参构造器 类初始化的顺序 当程序需要…
微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static {} 圈起来的方法块 普通属性: 未带static定义的属性 普通方法块: {} 圈起来的方法块 构造函数: 类名相同的方法 方法: 普通方法 初始化顺序 public class LifeCycle { // 静态属性 private static String staticField = get…
以下内容来自周志明的<深入理解java虚拟机>: 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制. 到了初始化阶段,才真正开始执行类中定义的Java程序代码(或者说是字节码). 在准备阶段,变量已经赋过一次系统要求的初始值,而在初始化阶段,则根据程序员通过程序制定的主观计划去初始化类变量和其他资源,或者可以从另外一个角度来表达:初始化阶段是执行类构造器<clinit>()方法的过程.…
Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论:     1 .继承体系的所有静态成员初始化(先父类,后子类)     2 .父类初始化完成(普通成员的初始化-->构造函数的调用)     3 .子类初始化(普通成员-->构造函数)     Java初始化顺序如图:   代码演示: class Sample {       Sample(String s)       {         …
原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量->子类静态变量初始化块->父类变量初始化->父类变量初始化块->父类构造方法->子类变量初始化->子类变量初始化块->子类构造方法 --------------------------…
1. Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: (1)静态变量 (2)静态初始化块 (3)变量 (4)初始化块 (5)构造器 由此得出Java继承类初始化顺序结论: (1)继承体系的所有静态成员初始化(先父类,后子类) (2)父类初始化完成(普通成员的初始化-->构造函数的调用) (3)子类初始化(普通成员-->构造函数)     2. Java初始化顺序如图:   代码演示: class Sample {       Sample(String s)       {…
测试代码: package com.test.ClassLaoderTest; public class test1 { public static String s_variable = "静态变量"; public String init_variable = "公开的变量"; private String p_variable = "私有的变量"; //静态代码块 static { System.out.println(s_variable…
一.概述 了解类的初始化顺序,可以更灵活.方便的构造一个类. 二.类初始化顺序 2.1 示例 public class InitialOrderTest { public static void main(String[] args) { new InitialOrderTest(); } // 变量 public FieldClass field = new FieldClass("变量"); // 初始化块 { System.out.println("初始化块"…
public class test { /** * java类的初步学习: *   学会使用和类名相同的两种构造方法,对公共类方法的调用: */ public static void main(String[] args) { Point point = new Point(100,27); //注意:打印对象的方法 System.out.print(point); //为什么它没有调用toString方法也可以呢? //System.out.print(point.toString()); /…
1.类初始化过程 一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 一个子类要初始化需要先初始化父类 一个类初始化就是执行<client>()方法(编译器生成的字节码) <client>()方法由静态类变量显示赋值代码和静态代码块组成 类变量显示赋值代码和静态代码块代码从上到下顺序执行 <client>()方法只执行一次 2.实例初始化过程 实例初始化就是执行<init>()方法 <init>()方法可能重载有多个,…
1.类初始化过程 2.实例初始化过程 3.方法的重写…
一.类初始化过程 1.一个类要创建实例需要先创建和加载 (1) main方法所在的类需要先加载和实例化 2.一个子类要初始化,需要先初始化父类 3.一个类初始化就是执行<clinit>方法 (1) <clinit>() 方法由静态类变量显示赋值代码和静态代码块组成. (2) 静态类变量赋值海马和静态代码块从上到下顺序执行 (3)<clinit>() 方法只执行一次 二.实例初始化过程(有父类时,父类先开始初始化) 1.实例初始化就是执行<init>()方法…
代码如下: java笔试题public class Mapplication { private static int n; private static Mapplication m1 = new Mapplication("m1"); private static Mapplication m2 = new Mapplication("m2"); private static int i = print("i"); private int j…
最近发现微信群里面有些群友在讨论类的初始化顺序,如类的静态变量.成员变量.静态代码块.非静态代码块.构造器,及继承父类时,它们的初始化顺序都是怎样的,下面我通过例子来说明这个情况,以免被人误导. 示例1:测试单类的初始化顺序 public class ClassInitOrderTest { public static String staticField = "static field"; static { System.out.println(staticField); Syste…
在复习Thinking in java的过程中看到了相关内容,顺便整理一下,像下面一样的代码具体的执行顺序(ABCD都是类) public class A { public A(String text){ System.out.println("A was built :"+text); } D b1=new D("d in A"); static{ System.out.println("A Static Code out of constructor&…
main -> (静态变量.静态代码块) ->main函数体 -> (类变量.初始化块.实例化引用的类) -> 构造函数 初始化块与实例化引用的类 的调用顺序 按程序的编写上下顺序执行. 1.begin 2.public static XXX xx; 3.static{} 4.public XXX XX; 5.{} 6.new 7.构造 8.done;…
总的来说: 父类静态代码块->子类静态代码块->子类main()方法->父类构造块->父类构造方法->子类构造块->子类构造方法 注意,就算是静态的方法也需要调用才能使用,初始化只涉及到属性和构造块.构造方法,不涉及到一般的方法. package com.tonyluis; class superClass { public superClass() { System.out.println("构造方法"); } { System.out.print…
public class Base { private String baseName = "base"; public Base() { callName(); } public void callName() { System.out.println(baseName); } static class Sub extends Base { private String baseName = "sub"; public void callName(){ Syste…
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来分析的文章更是鲜有所见. 本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成 JVM 字节码后,对 JVM 执行过程的关键点进行全面解析,并在文中穿插入了相关 JVM 规范和 JVM 的部分内部理论知识,以理论与实际结合的方式介绍对象初始化和类初始化之间的协作以及可能存在的…
类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只能被JVM调用,专门承担初始化工作. 初始化一个类必须保证其直接超类已被初始化. 并非所有类都拥有<clinit>()方法.以下类不会拥有<clinit>方法: 该类既没有声明任何类变量,也没有静态初始化语句. 该类声明了类变量,但没有使用类变量初始化语句或静态初始化语句初始化. 该类…
Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就 是解决上面3个问题的. 若有不正之处,请多多谅解并欢迎各位能够给予批评指正,提前谢谢各位了. 1. Java虚拟机加载.class过程 虚拟机把Class文件加载到内存,然后进行校验,解析和初始化,最终形成java类型,这就是虚拟机的类加载机制.加载,验证,准备,初始化这5个阶段的顺序是确定的, 类的加载过程,必须按照这种顺序开始.这些…
Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类InitialOrderWithoutExtend中包含了静态成员变量(类变量)SampleClass 类的一个实例,普通成员变量SampleClass 类的2个实例(在程序中的顺序不一样)以及一个静态代码块,其中静态代码块中如果静态成员变量sam不为空,则改变sam的引用.main()方法中创建了2个主…
Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就 是解决上面3个问题的. 若有不正之处,请多多谅解并欢迎各位能够给予批评指正,提前谢谢各位了. 1. Java虚拟机加载.class过程 虚拟机把Class文件加载到内存,然后进行校验,解析和初始化,最终形成java类型,这就是虚拟机的类加载机制.加载,验证,准备,初始化这5个阶段的顺序是确定的, 类的加载过程,必须按照这种顺序开始.这些…
原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-clobj-init/index.html 由一个单态模式引出的问题谈起 类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来分析的文章更是鲜有所见. 本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成 JVM 字节码后,…
面试的时候,经常会遇到这样的笔试题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和静态块,它们只包含一些简单的输出字符串到控制台的代码,然后让我们写出正确的输出结果.这实际上是在考察我们对于类的初始化知识的了解. 首先,我们先看看下面的代码,这就是很经典的考察方式. public class InitField { public static void main(String[] args) { SuperInitField p = new SuperInitField();…
1.令人混淆的构造器 代码如下格式: public class Confusing { private Confusing(Object o) { System.out.println("Object"); } private Confusing(double[] dArray) { System.out.println("double array"); } public static void main(String[] args) { new Confusing…
Java类的初始化顺序   在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行.   以下为代码验证阶段,一共三个类:基类(Base).子类(Sub)和工具类(Log,输出日志). package com.kobe.practice.order; public class Sub extends Base { public static void main(String[] args) { Sub sub = n…
先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() { callName(); } // 成员方法 public void callName() { // TODO Auto-generated method stub System.out.println("basename:" + baseName); } //静态内部类 static…