zoukankan      html  css  js  c++  java
  • 课后练习

    当一、动手动脑

    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的构造器

    得出的结论:当个模块同时存在时 首先执行静态模块中的内容,其次执行父类非静态代码块和构造方法,最后执行子类非静态代码块和构造方法。

    静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加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

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

    错误:定义的obj1,调用的是无参的构造函数;

    而定义的构造函数是有参的;

    更改:

    主函数内 定义一个变量整型变量 int a; 

    int a=0;

    Foo obj1=new Foo(a);

    课后实验

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

    package zzm;
    public
    class Text{ private static int n=0; public 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个对象。

  • 相关阅读:
    poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)
    poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
    poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
    hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
    hdu 1025 上面n个点与下面n个点对应连线 求最多能连有多少条不相交的线 (LIS)
    Gym 100512F Funny Game (博弈+数论)
    UVa 12714 Two Points Revisited (水题,计算几何)
    UVa 12717 Fiasco (BFS模拟)
    UVa 12718 Dromicpalin Substrings (暴力)
    UVa 12716 && UVaLive 6657 GCD XOR (数论)
  • 原文地址:https://www.cnblogs.com/zzmds/p/11712605.html
Copyright © 2011-2022 走看看