• 类与对象课后作业


    1.查询“你已经创建了多少个对象?

    源代码:

     1 public class How {
     2      public static void main(String[] args) {
     3          a1 b1 = new a1();
     4          a1 b2 = new a1();
     5          a1 b3 = new a1();
     6         //我已经创建了3个对象,接下来调用a1类的静态变量查询创建了多少对象
     7          System.out.println("我已经创建的对象个数为: "+a1.value);
     8      }
     9 }
    10 class a1 { 
    11    public static int value=0; 
    12     a1() { 
    13        //构造函数,每创建一个实例value就增加1 
    14        value=value+1; 
    15      }
    16 }

    结果截图:

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

    解释:

    因为Foo没有定义。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

     

    2、使用上页幻灯片中定义的类,以下代码输出结果是什么?

    总结:

    1)执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

    2)类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

    4、请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

    代码:

     1 package demo;
     2 class Root
     3 {
     4     static{
     5         System.out.println("Root的静态初始化块");
     6     }
     7     {
     8         System.out.println("Root的普通初始化块");
     9     }
    10     public Root()
    11     {
    12         System.out.println("Root的无参数的构造器");
    13     }
    14 }
    15 class Mid extends Root
    16 {
    17     static{
    18         System.out.println("Mid的静态初始化块");
    19     }
    20     {
    21         System.out.println("Mid的普通初始化块");
    22     }
    23     public Mid()
    24     {
    25         System.out.println("Mid的无参数的构造器");
    26     }
    27     public Mid(String msg)
    28     {
    29         //通过this调用同一类中重载的构造器
    30         this();
    31         System.out.println("Mid的带参数构造器,其参数值:" + msg);
    32     }
    33 }
    34 class Leaf extends Mid
    35 {
    36     static{
    37         System.out.println("Leaf的静态初始化块");
    38     }
    39     {
    40         System.out.println("Leaf的普通初始化块");
    41     }    
    42     public Leaf()
    43     {
    44         //通过super调用父类中有一个字符串参数的构造器
    45         super("Java初始化顺序演示");
    46         System.out.println("执行Leaf的构造器");
    47     }
    48 
    49 }
    50 
    51 public class TestStaticInitializeBlock
    52 {
    53     public static void main(String[] args) 
    54     {
    55         new Leaf();
    56         
    57 
    58 }

    结果截图:

    总结:静态初始化块只执行一次。创建子类型的对象时,也会导致父类型的静态初始化块的执行。

     

  • 相关阅读:
    [Python] 登录人人网2011版
    [WPF] 自定义窗体样式
    [Python] 控制台输入密码的方法
    [Python] 字符串加密解密
    [WPF] 模仿AMD LIVE! EXPLORER界面
    [Python] Visual Studio 2008 集成 IronPython 开发环境
    mysql表类型(存储引擎)
    logstash收集nginx访问日志
    linux设置开机启动脚本
    logstash安装log4j插件
  • 原文地址:https://www.cnblogs.com/ray-freedom/p/6048010.html
Copyright © 2020-2023  润新知