zoukankan      html  css  js  c++  java
  • 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个对象

  • 相关阅读:
    前端学习 -- Css -- 盒子模式
    前端学习 -- Css -- 文本样式
    Shell脚本学习
    前端学习 -- Css -- 行间距
    前端学习 -- Css -- 字体的几个属性学习
    前端学习 -- Css -- 字体分类
    前端学习 -- Css -- 字体
    前端学习 -- 颜色
    前端学习 -- 长度单位
    前端学习 -- Css -- 定义列表
  • 原文地址:https://www.cnblogs.com/ICDTAD/p/11751606.html
Copyright © 2011-2022 走看看