构造函数之初始化操作(1)

全局变量和局部变量的区别:全局变量是作用,在定义的时候可以不给于初始值;而局部变量作用于当前的方法,在定义的是要对齐进行设置初始值。当你定义一个局部变量的时候,若你没有给它进行初始化的操作是,系统会给出一条提示信息,提示你定义的变量没有进行初始化。例:

void example(){
    int i;
    i++;
}

如上面代码当编译器在执行i++的时候,编译器会提示你i没有进行初始化操作。
如果我们将一个基本数据类型定义为成员变量,结果会有点小小的不同,原因是因为任何的方法都可以初始化这个成员边变量,如果要求我们在使用前为其赋予一个合适的值,那是不太现实的,如果我们赋予一个没有用的值,这样也是不安全的。所以,一个类中的所有的基本数据类型的成员变量都会保证获得一个初始值。例:

class Measurement{    
    boolean t;    
    char c;    
    byte b;    
    short s;    
    int i;    
    long l;    
    float f;   
    double d;
    void print(){
        System.out.println("数据类型 \t 值如下 \n" +
                            "boolean \t"+ t +"\n" +
                            "char \t" +c +"\n"+
                            "byte \t" +b +"\n"+
                            "short \t" +s +"\n"+
                            "int \t" +i +"\n"+ 
                           "long \t" +l +"\n"+
                            "float \t" +f +"\n"+
                            "double \t" +d +"\n");
    }
}
public class initialValues {
    public static void main(String[] args){
        Measurement d =new Measurement();
        d.print();   
   }
}

这个例子向我们显示了基本数据类型成员变量的默认的初始值,其中char的值为空,没有数据打印出来。
构造函数的初始化:
1、初始化的顺序:在一个类里面成员变量初始化的顺序是由变量在类中 定义的顺序决定的,即使变量的定义在各种方法之间,它们 仍会在这些方法调用之前进行初始化操作。例:

    class Score{
            Score(int score){ 
               System.out.println("score("+score+")"); 
           }
        }
    class Stu{
        Score sc = new Score(1);//在构造函数之前
        Stu(){
            //在构造函数中
            System.out.println("Stu()");
             sc3 = new Score(33);//从新初始化sc3
        }
        Score sc2 = new Score(2);//在构造函数之后
        void f(){
            System.out.println("f()");
        }
        Score sc3 = new Score(3);//在结束部分
    }
public class Example {
    public static void main(String[] args) {
        Stu st = new Stu();
        st.f();
    }
}

在上述代码中我们故意在构造函数之前、构造函数中、构造函数之后和结束部分定义了变量,它的输出结果为:

score(1)
score(2)
score(3)
Stu()
score(33)
f()

先输出的是我们定义的变量,这就证明了我们在类里面定义的变量会在调用方法之前得到初始化的操作。
2、静态数据的初始化:如果数据是静态的,如果它是一个基本数据类型的变量,而且我们没有对它进行初始化赋值,这样的话他会获得与自己数据类型相同的标准的初始值;如果它是指向一个对象,除非新建一个对象,并将这两个对象相连接起来,否则的话它会得到一个空值。如果想在定义的时候初始化,但是由于static的值只有一个储存区域,这样的话我们就会想我们到底在什么时候对这个储存区域进行初始化的操作呢?

class Queue{
    //创建一个队列的类
    Queue(int marker){
        System.out.println("marker("+marker+")");
    }
    void ming(int marker){
        System.out.println("marker("+marker+")");
    }
}
class Maidan{
    static Queue q1 =new Queue(1);
    Maidan(){
        System.out.println("Maidan()");
        q2.ming(1);
    }
    void ming2(int marker){
        System.out.println("ming2("+marker+")");
    }
    static Queue q2 = new Queue(2);
}
class Scl{
    Queue q3 =new Queue(3);
    static  Queue q4 = new Queue(4);
    Scl(){
        System.out.println("Scl()");
        q4.ming(2);
    }
    void ming3(int marker){
        System.out.println("ming3("+marker+")");
    }    
static Queue q5 =new Queue(5);
}
public class Example2 {
    public static void main(String[] args) { 
       System.out.println("在main方法中创建学校类");
        new Scl();
        System.out.println("在main方法中创建学校类");
        new Scl();
        maidan.ming2(1);
        scl.ming3(1);
    }    
static Maidan maidan =new Maidan();
static Scl scl = new Scl();
}

Queue允许我们检查一个类的创建过程,而Maidan和Scl可以定义位于Queue中的static成员变量。
static的初始化只有在必要的时候才会进行,上述代码中如果我们不定义Maidan类或者我们不调用Maidan.q1或者Maidan.q2的话static Queue q1和q2永远不会被创建;只有我们访问了一次static之后,它们才会被创建并且static对象不会重新初始化。所以它们初始化的顺序是首先static,然后是非static对象
3、明确进行的静态初始化:

class Exmple{
    static int i;
    static {
          i=47;
      }
}

java允许我们将其他的static的初始化操作划分到类里面的静态块里面处理。上述代码中一个方法它只有一个static关键字,后面跟随一个方法主体,它和其他的static初始化一样,只会被执行一次。
4、 非静态实例的初始化:针对每个非静态对象的初始化,java1.1提供一种类似于的语法格式。实例化从句

{
  c1 = new Mug(1);
  c2 = new Mug(2);
  System.out.println("c1和c2是构造函数");
}

他看起来和静态初始化很像,只是没有static关键字,匿名内部类的初始化的语法格式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容