• 关于类的一些思想


    一:构造函数:

    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Foo objl=new Foo();//应该改为:Foo objl=new Foo(家一个整数)
    
        }
    
    }
    class Foo{
        int value;
        public Foo(int initValue)
        {
            value=initValue;
        }
    }

    在定义objl的时候没有正确利用构造函数,构造函数有参数时,必须赋予初值。

    二:类的成员的初始化

    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Foo objl=new Foo();
            System.out.println(objl.value);
            Foo obj=new Foo(300);
            System.out.println(objl.value);
    
        }
    
    }
    class Foo{
        {
            value=200;
        }//初始化块
        public int value=100;//字段的初始化
        public Foo(int initValue)
        {
            this.value=initValue;
        }//构造函数
        public Foo()
        {
            
        }
    }

    从上面的程序中可以看到,类的成员初始化有很多,但是具体遵循哪一种,谁说了算?我们来看结果

    我们可以看到是字段的初始化说了算,因此在同一个类中对成员的初始化有很多时,我们只看字段的初始化。

    三:静态初始化块的执行顺序

    class Root
    {
        static{
            System.out.println("Root的静态初始化块");
        }
        {
            System.out.println("Root的普通初始化块");
        }
        public Root()
        {
            System.out.println("Root的无参数的构造器");
        }
    }
    class Mid extends Root
    {
        static{
            System.out.println("Mid的静态初始化块");
        }
        {
            System.out.println("Mid的普通初始化块");
        }
        public Mid()
        {
            System.out.println("Mid的无参数的构造器");
        }
        public Mid(String msg)
        {
            //通过this调用同一类中重载的构造器
            this();
            System.out.println("Mid的带参数构造器,其参数值:" + msg);
        }
    }
    class Leaf extends Mid
    {
        static{
            System.out.println("Leaf的静态初始化块");
        }
        {
            System.out.println("Leaf的普通初始化块");
        }    
        public Leaf()
        {
            //通过super调用父类中有一个字符串参数的构造器
            super("Java初始化顺序演示");
            System.out.println("执行Leaf的构造器");
        }
    
    }
    
    public class TestStaticInitializeBlock
    {
        public static void main(String[] args) 
        {
            new Leaf();
            
    
        }
    }

    运行结果为:

    可以看出在类中静态初始块的顺序为:先调用静态初始块,其他初始化则是同时调用,静态初始化块只执行一次,创建子类型的对象时,也会导致父类型的静态初始化块的执行。

    四:利用静态使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。

    public class Chaxun {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Kehou m1=new Kehou();//定义1次
            Kehou m2=new Kehou();//定义2次
            Kehou m3=new Kehou();//定义3次
    
        }
    
    }
    class Kehou{
        static int a=0;
        public Kehou()
        {
            a++;
            System.out.println("你已经创建了"+a+"个对象");
        }//每定义一个对象就让a+1,就是定义的对象的个数
    }

  • 相关阅读:
    存储引擎-Buffered tree
    存储引擎-Bitcast
    飞锐GIS开发基础系列
    arcgisserver
    综​合​管​网​方​案​说​明
    Leaflet交流
    .NET开源工程推荐(Accord,AForge,Emgu CV)
    GIS科研站
    C语言I博客作业008
    预习原码补码
  • 原文地址:https://www.cnblogs.com/zll20153246/p/5984817.html
Copyright © 2020-2023  润新知