Java 基础总结--初始化顺序1

来源:互联网 发布:表达无网络的图片大全 编辑:程序博客网 时间:2024/05/22 02:03
package com.zghw.base;//遇见new、静态变量的设置和取值、静态方法调用时,都会触发初始化public class Initial {/** * 1.成员变量在使用前都会先赋上默认初始值 boolean =false short =0 int =0 float =0.0 double * =0.0 long =0 refrence =null char = *  * @param args */private boolean t;private char c;private short s;private int i;private float f;private double d;private long l;private Initial r;/** * 打印没有指定初始化的类变量值 */void print() {System.out.println("boolean =" + t);System.out.println("short =" + s);System.out.println("int =" + i);System.out.println("float =" + f);System.out.println("double =" + d);System.out.println("long =" + l);System.out.println("refrence =" + r);System.out.println("char =" + c);}// ////////////////////////////** * 2.直接在成员变量后边赋值 *  * @param args */private boolean tt = true;private char cc = 'a';private short ss = 0xff;private int ii = 11;private float ff = 1.5f;private double dd = 1.36253;private long ll = 12356465l;void print2() {System.out.println("boolean tt=" + tt);System.out.println("short ss=" + ss);System.out.println("int ii=" + ii);System.out.println("float ff=" + ff);System.out.println("double dd=" + dd);System.out.println("long ll=" + ll);System.out.println("refrence rr=" + this);System.out.println("char cc=" + cc);}// ///////////////////////////////////////////** * 3.无法阻止默认初始化的进行,以保证你在使用前得到保证。 *  * @param args */private int a;private String b;private long lo = 23423l;/** * 构造函数在未初始化成员变量前,是jvm自动初始化了成员变量,无法阻止 */public Initial() {System.out.println("before init a=" + a + " , b=" + b + " ,lo=" + lo);a = 4;b = "ss";lo = 5465l;System.out.println("after init a=" + a + " , b=" + b + " ,lo=" + lo);System.out.println("house");w3 = new Window("33");}// /////////////////////////////////////////////////// 4.成员变量在构造函数和方法之前先初始化class Window {Window(String mark) {System.out.println("window " + mark);}}// 在构造函数后的变量Window w1 = new Window("1");Window w2 = new Window("2");void f() {System.out.println("f()");}// 在方法f()后的变量Window w3 = new Window("3");// Window不管在构造函数前,还是方法后都会先初始化 w1 w2 w3// //////////////////////////////////////////////////////////public static void main(String args[]) {Initial r = new Initial();// r.print();// r.print2();r.f();}}

package com.zghw.base;import com.zghw.base.staticx.Cupborad;import com.zghw.base.staticx.Table;/** * 遇见new、静态变量的设置和取值、静态方法调用时,main 方法 反射,及父类都会触发初始化 *  * @author zghw * 首先在调用main方法前,发现当前类InitialStatic未加载,则开始加载 * 加载完成后,进行初始化首先初始化静态变量和静态块并赋值。 * 在加载静态变量 Table t 和 Cupborad c 开始类加载 Table Cupborad Bowl类,并进行初始化 * 先加载类中的静态变量然后在加载实例变量,最后调用构造函数完成初始化。 * 然后开始main方法调用,连续创建了两个Cupborad实例,但Cupborad中的静态变量仅在第一次初始化了, * 因为对象实例中的static变量是使用的同一份值。 * 每创建一个对象实例都会在堆上分配一份空间,并且实例变量有各自的副本。 * 静态变量的初始化优先于实例变量的初始化 * */public class InitialStatic {public static void main(String args[]){System.out.println(" create cupboard in main");new Cupborad();System.out.println(" create cupboard in main");new Cupborad();t.f2(1);c.f3(1);}//遇见new、静态变量的设置和取值、静态方法调用时,都会触发初始化static Table t=new Table();static Cupborad c =new Cupborad();}/** * //初始化成员变量顺序//先初始化静态成员变量,初始化静态变量是按照代码顺序//然后初始化实例变量,初始化实例变量是也是按照代码顺序//然后调用构造方法//最后调用方法//静态变量只初始化第一次,以后创建对象就不会初始化静态变量了//实例变量每次在创建对象实例时都会重新创建 */

package com.zghw.base.staticx;public class Cupborad {//初始化成员变量顺序//先初始化静态成员变量,初始化静态变量是按照代码顺序//然后初始化实例变量,初始化实例变量是也是按照代码顺序//然后调用构造方法//最后调用方法//静态变量只初始化第一次,以后创建对象就不会初始化静态变量了//实例变量每次在创建对象实例时都会重新创建private Bowl bowl3 = new Bowl(3);private static Bowl bowl4 = new Bowl(4);public Cupborad() {System.out.println("Cupborad");bowl4.f1(2);}public void f3(int marker) {System.out.println("f3 " + marker);}private static Bowl bowl5 = new Bowl(5);}

package com.zghw.base.staticx;public class Bowl {public Bowl(int marker){System.out.println("Bowl "+marker);}public void f1(int marker){System.out.println("f1 "+marker);}}

package com.zghw.base.staticx;public class Table {private static Bowl bowl1=new Bowl(1);public Table(){System.out.println("Table");bowl2.f1(1);}public void f2(int marker) {System.out.println("f2 " + marker);}private static Bowl bowl2=new Bowl(2);}


0 0
原创粉丝点击