zoukankan      html  css  js  c++  java
  • 第4章 初始化和清除(下)

    4.4 成员初始化

    局部变量在使用之前必须初始化。

    package com.sunny.hello.c4;
    
    
    public class Test {
        void f() {
            int i;
            //i++; 编译错误,因为i未初始化
        }
    }

    但是,若将基本类型设为一个类的数据成员,情况则会变得稍微有些不同。由于任何方法都可以初始化或使用那个数据,所以在正式使用前,若还是强迫程序员将其初始化为一个适当的值,就可能不是一种实际的做法。然而,若为其赋予一个垃圾值,同样

    是非常不安全的。因此,一个类的所有基本类型数据成员都会保证获得一个初始值。

    package com.sunny.hello.c4;
    
    
    public class InitialValues {
    
        public static void main(String[] args) {
            Measurement d = new Measurement();
            d.print();
        }
    }
    class Measurement {
        boolean t;
        char c;
        byte b;
        short s;
        int i;
        long l;
        float f;
        double d;
        void print() {
            System.out.println("Data type Inital value
    "
                    + "boolean " + t + "
    "
                    + "char " + (int)c + " 
    "
                    + "byte " + b + "
    "
                    + "short " + s + " 
    "
                    + "int " + i + "
    "
                    + "long " + l + " 
    "
                    + "float " + f + " 
    "
                    + "double " + d + "
    ");
        }
    }

    运行结果:

    Data type Inital value
    boolean false
    char 0 
    byte 0
    short 0 
    int 0
    long 0 
    float 0.0 
    double 0.0

      4.4.1 规定初始化

    class Measurement {
        boolean b = true;
        char c = 'x';
        byte B = 47;
        short s = 60;
        int i = 999;
        long l = 1;
        float f = 3.14f;
        double d = 3.14159;
        Depth o = new Depth();
        
        // ...
    }
    
    class Depth {
        
    }

      4.4.2 构建器初始化

    1.初始化顺序

    package com.sunny.hello.c4;
    
    
    public class OrderOfInitialization {
    
        public static void main(String[] args) {
            Card t = new Card();
            t.f();
        }
    }
    
    class Tag {
        Tag(int marker) {
            System.out.println("Tag(" + marker + ")");
        }
    }
    
    class Card {
        Tag t1 = new Tag(1);
        Card() {
            System.out.println("Card()");
            t1 = new Tag(33);
        }
        Tag t2 = new Tag(2);
        void f() {
            System.out.println("f()");
        }
        Tag t3 = new Tag(3);
    }

    运行结果:

    Tag(1)
    Tag(2)
    Tag(3)
    Card()
    Tag(33)
    f()

    在执行Card这个类的构造函数之前,会对Card类中所有的成员变量进行初始化。

    package com.sunny.hello.c4;
    
    
    public class StaticInitialization {
    
        public static void main(String[] args) {
            System.out.println("Creating new Cupboard() in main");
            new Cupboard();
            System.out.println("Creating new Cupboard() in main");
            new Cupboard();
            t2.f2(1);
            t3.f3(1);
        }
        static Table t2 = new Table();
        static Cupboard t3 = new Cupboard();
    }
    class Bow {
    
        Bow(int marker) {
            System.out.println("Bow(" + marker + ")");
        }
    
        void f(int marker) {
            System.out.println("f(" + marker + ")");
        }
    
    }
    class Table {
    
        static Bow b1 = new Bow(1);
        Table() {
            System.out.println("Table()");
            b1.f(1);
        }
        void f2(int marker) {
            System.out.println("f2(" + marker + ")");
        }
        static Bow b2 = new Bow(2);
    }
    class Cupboard {
    
        Bow b3 = new Bow(3);
        static Bow b4 = new Bow(4);
        Cupboard() {
            System.out.println("Cupboard()");
            b4.f(2);
        }
        void f3(int marker) {
            System.out.println("f3(" + marker + ")");
        }
        static Bow b5 = new Bow(5);
    }

    运行结果:

    Bow(1)
    Bow(2)
    Table()
    f(1)
    Bow(4)
    Bow(5)
    Bow(3)
    Cupboard()
    f(2)
    Creating new Cupboard() in main
    Bow(3)
    Cupboard()
    f(2)
    Creating new Cupboard() in main
    Bow(3)
    Cupboard()
    f(2)
    f2(1)
    f3(1)

    4.5 数组初始化

    4.5.1 多维数组

    4.6 总结

  • 相关阅读:
    洛谷 P1604 B进制星球
    629D
    。。。。。
    新安排
    计算几何的两道题
    cf C题
    昨天
    最近几天的安排
    最近几天
    杂论——持续更新。
  • 原文地址:https://www.cnblogs.com/sunnyDream/p/8034351.html
Copyright © 2011-2022 走看看