zoukankan      html  css  js  c++  java
  • 03 类与对象 课后作业2

    【验证1】:

    ClassAndObjectTest.java:

    实验截图:

    【验证2】:

    Demo: ObjectEquals.java:

    实验截图:

    【验证3】:

    TestStaticInitializeBlock.java:

    实验截图:

    【动手动脑1】:

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

    结论:

    系统默认的是引用Foo类,而不是Foo方法

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

     【自找麻烦】

    如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?

     

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

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

    【动手动脑2】:

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

     

    静态初始化块的执行顺序:

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

    【一个有趣的问题】:

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

    请编写代码验证你的想法。

    想法:在静态方法中,创建类的一个对象,通过对象调用没有附加static关键字的字段或方法

    代码:

    import java.util.Scanner;

    public class VisitUnstatic
    {
     private int x=0,y=0;
     Scanner input=new Scanner(System.in);
     public void setNumber()
     {
      x=input.nextInt();
      y=input.nextInt();
     }
     public static void getNumber(int a,int b)
     {
      VisitUnstatic obj=new VisitUnstatic();
      obj.setNumber();
      a=obj.x;
      b=obj.y;
      System.out.println(a);
      System.out.println(b);
     }

     public static void main(String[] args)
     {
      int c=0;int d=0;
      VisitUnstatic p1=new VisitUnstatic();
      p1.getNumber(c, d);
     }

    }

    【Integer的“诡异”特性”】:

    StrangeIntegerBehavior.java:

    测试结果:

    提示:
     使用javap来分析生成class文件,看它调用了Interger类的哪个方法,然后打开JDK源文件查看源码,就可以找到答案。

    调用了Integer.valieOf方法;因为从-127到128之间的Integer数,Java在Integer中有事先缓存好的原型对象,每次返回的都是同一个Integer对象,只有不在这个范围的数才会新创建出一个Integer,最后所指都不是同一个对象,所以比较的不是同一个对象。

  • 相关阅读:
    mysql的sql执行计划
    JMX
    用 Cobertura 测量测试覆盖率
    javap反汇编的使用
    Java ASM 技术简介
    基于Java Instrument的Agent实现
    浮动的同级盒子顶对齐
    子绝父相布局
    相对定位,绝对定位和固定定位
    嵌套的定位盒子如何居中?
  • 原文地址:https://www.cnblogs.com/DaisyYuanyq/p/7699357.html
Copyright © 2011-2022 走看看