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

    作业一:请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?“

    程序源代码;

    public class Lei {

    /**

    * @param args

    */

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    lei1 a=new lei1();

    lei1 b=new lei1();

    b.out();

    }

    }

    class lei1{

    static int n=0;

    lei1(){

    n++;

    }

    public void out(){

    System.out.println("你已经创建了"+n+"个对象!");

    }

    }

    程序结果截图: 

    课后作业二:动手动脑

    (1):以下代码为何无法通过编辑,哪出错了?

    程序源代码:


    public class Test1 {
     public static void main(String[] args){
      Foo obj1=new Foo();
     }

    }
    class Foo{
     int value;
     public Foo(int initvalue){
      value=initvalue;
     }
    }

    错误:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

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

    程序源代码:

    public class Test2 {
    /**
    * @param args
    */
     public static void main(String[] args) {
    // TODO Auto-generated method stub
      InitializeBlockClass obj=new InitializeBlockClass();
      System.out.println(obj.field);//?

      obj=new InitializeBlockClass(300);
      System.out.println(obj.field);
     }
    }
    class InitializeBlockClass{
     {field=200;}
     public int field=100;
     public InitializeBlockClass(int value){this.field=value;}
     public InitializeBlockClass(){}
    }

    运行结果截图:

    结论:

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

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

    (3)请运行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();
      

     }
    }

    程序运行截图:

    结论:

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

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

    程序源代码:

    class Example

     {  

            public static void display()

            {

                 System.out.println("类的方法");

             }

     public void displayOne()

     {

            System.out.println("对象的方法");

     }

      public static void main(String[] args) 

    {

               Example.display();

               Example e=new Example();

               e.displayOne();   

               e.display();

     }

    }

    (5)上述神奇代码(StrangeIntegerBehavior.java)输出诡异的结果,原因何在?

    结论:因为它们调用的Interger类的方法不同

    (6)两对整数明明完全一样,为何一个输出true,一个输出false?

    程序源代码:

    public class test {
    /**
    * @param args
    */
     public static void main(String[] args) {
    // TODO Auto-generated method stub
      Foo obj1=new Foo();
      Foo obj2=new Foo();
      System.out.println(obj1==obj2);
     }
    }
    class Foo{
     int value=100;
    }

    结论:

    引用代表地址,“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。

  • 相关阅读:
    洛谷【P1109 学生分组】 题解
    卡特兰数
    并查集
    深度优先搜索DFS;递归
    【71】序列模型和注意力机制
    c/c++ 常用的几个安全函数
    win32 Ui 编程 收集
    vc获取特殊路径(SpecialFolder)
    std::map 自定义排序
    16-----BBS论坛
  • 原文地址:https://www.cnblogs.com/kangy123/p/5983844.html
Copyright © 2011-2022 走看看