zoukankan      html  css  js  c++  java
  • 关于类的一些思想

    一:构造函数:

    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,就是定义的对象的个数
    }

  • 相关阅读:
    visio画UML用例图没有include关系的解决方法
    个人推荐-几款好用的App
    win10锁屏壁纸文件夹Assets中无文件问题的解决方法
    云服务器搭建Jupyter-主要部分为配置服务器安全组+添加python3
    开通博客的第一天
    express学习(二)—— Post()类型和中间件
    自定义模块
    命名参数名(含*args , * *kw的区别)
    Python学习之中文注释问题
    Python学习之再议row_input
  • 原文地址:https://www.cnblogs.com/zll20153246/p/5984817.html
Copyright © 2011-2022 走看看