• 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,最后所指都不是同一个对象,所以比较的不是同一个对象。

  • 相关阅读:
    【POI】POI读取xlsx单元格内小数精度问题
    【html】xlsx文件实现预览,浏览器实现xlsx文件的预览,前端实现xlsx文件的预览
    【git】【IDEA】git执行clone报错error: RPC failed; curl 18 transfer closed with outstanding read data remaining 解决方案
    【linux】切换到root用户,并重置root用户密码
    【centOS】centOS7 下载
    【网络】网络记事
    【linux】linux命令lsof和grep命令的配合使用---linux根据端口查看PID,根据PID关键字高亮显示
    npm与cnpm切换使用
    替换swagger-ui,选择款神器—knife4j
    解决nginx反向代理webservice的soap:address location问题
  • 原文地址:https://www.cnblogs.com/DaisyYuanyq/p/7699357.html
Copyright © 2020-2023  润新知