zoukankan      html  css  js  c++  java
  • 课后作业(第6周)

    一、动手动脑

    1、请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。静态初始化块先执行,并按照类的先后,由父类依次执行下来

    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();
            
    
        }
    }
    运行结果:
    Root的静态初始化块
    Mid的静态初始化块
    Leaf的静态初始化块
    Root的普通初始化块
    Root的无参数的构造器
    Mid的普通初始化块
    Mid的无参数的构造器
    Mid的带参数构造器,其参数值:Java初始化顺序演示
    Leaf的普通初始化块
    执行Leaf的构造器

    结论:静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

    2、静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

    public class Text {
        
    
        public static void main(String[] args) {
        int a=1,b=2;
        Text m=new Text();
            System.out.println(m.mm(a,b));
        }
    public int mm(int x,int y) {
        if(x>y) {
            return x;
        }
        else
            return y;
    }
    }
    运行结果:
    2

    3、以下代码为何无法通过编译?哪儿出错了?

    错误:只定义了一个有参数的构造函数。而在主函数中定义的Foo类对象调用的是无参数的构造函数。

    更改后:

     二、课后实验
    使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。

    public class Text{
        private static int n=0;
        public Text()//Text的构造方法
        {
            n++;
        }
        public static int getNum()
        {
            return n;
        }
        public static void main(String[] args) {
            
            Text m1=new Text();
            Text m2=new Text();      
            System.out.println("一共创建了"+Text.getNum()+"个对象");
        }
    
    }
    运行结果:
    一共创建了2个对象
  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/MoooJL/p/11679847.html
Copyright © 2011-2022 走看看