zoukankan      html  css  js  c++  java
  • 课后作业3

    1.代码找错(动手动脑)

    package DaiMaZhaoCuo;
    
    public abstract class Test {
    public static void main(String []args) {
        Foo obj1=new Foo();
    }
    }
    public class Foo {
    int value;
    public Foo(int initvalue) {
        value=initvalue;
    }
    }

    Foo类中定义带参的构造函数,而Foo类定义了构造函数系统就不会自动生成构造函数,所以Foo类就没有无参的构造函数,所以初始化会出错。

    2.Java字段初始化规律

    package InitializeBlockClass;
    
    public class InitializeBlockClass {
        {
            field=200;
        }
        public int field=100;
        public InitializeBlockClass(int value) {
            this.field=value;
        }
        public InitializeBlockClass() {
            
        }
        public static void main(String[] args) {
            InitializeBlockClass obj=new InitializeBlockClass();
            System.out.println(obj.field);
            
            obj=new InitializeBlockClass(300);
            System.out.println(obj.field);
        }
    }

    运行结果:

    从运行结果得出,初始化规律为:初始化块和字段的初始值谁排在前面先执行谁,最后执行构造函数。

    3.静态初始化块的执行顺序

    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();
            
    
        }
    }

    运行结果:

    执行顺序为,由父类到子类先执行静态初始化块,而后是普通,无参数和有参构造器。

    4.静态方法访问类的实例成员

    package num;
    
    public class Num {
    public int i=5;
    public static void main(String []args) {
        Num j=new Num();
        System.out.println(j.i);
    }
    }

    运行结果:

     可以在静态方法中定义类的对象,这样就可以调用实例成员了。

  • 相关阅读:
    SEO(Business)
    C#数组去掉重复的元素
    文件创建与文件格式的修改
    Filter(20160815)
    OmniGraffle导入stencils的两个方法以及优质的stencils下载网站推荐
    在Axure RP 8.0 中使用 Font Awesome 图标库完成设计并能在其他未安装该字体的电脑离线预览的方法
    社会性动物(艾略特•阿伦森)
    MacTex 在XeLaTex编译状态下插入的pdf格式图片无法显示问题的解决方案
    Markdown,别来无恙!
    男人来自火星 女人来自金星(约翰·格雷)
  • 原文地址:https://www.cnblogs.com/my---world/p/9825077.html
Copyright © 2011-2022 走看看