• Java理论学时第三节。课后作业。


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

      运行结果。

      根据我的总结,它们三个的优先级是:构造方法 字段初始值 初始化块。

    当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

    public class InitializeBlockDemo

    {

      /**

       * @param args

       */

      public static void main(String[] args)

      {

        InitializeBlockClassSon obj=new InitializeBlockClassSon();

        System.out.println(obj.field);

        obj=new InitializeBlockClassSon(300);

        System.out.println(obj.field);

      }

    }

    class InitializeBlockClass

    {

      {

           field = 200;

      }

      public int field;

      public InitializeBlockClass(int value)

      {

        this.field = value;

      }

      public InitializeBlockClass()

      {

      }

    }

    class InitializeBlockClassSon extends InitializeBlockClass

    {

      public int field1 = 1000;

      public InitializeBlockClassSon(int value)

      {

        this.field1 = value;

      }

      public InitializeBlockClassSon()

      {

      }

    }

      运行结果。

      由结果可知,定义的子类不管对其赋不赋值,得到的结果都是父类初始化块的值(前提是父类中没有字段初始值)。

    静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员

    class StaticDemo 

    {

      static int x = 1;

      int y = 2;

      static public void display(int flag)

      {

      System.out.println(x + flag);

      }

      public int getY()

      {

      return y;

      }

    }

    public class ShowStatic

    {

      public static void main(String[] args)

      {

      StaticDemo a = new StaticDemo();

      int flag = a.getY();

      StaticDemo.display(flag);

      }

    }

     因为静态方法在对象初始化的时候就已经被调用,所以直接访问实例变量的时候实例变量还不存在而发生错误。避免的方法是在main函数中定义一个局部变量获取实例变量的值,然后在静态方法中调用局部变量。

    但这只做到了如何在静态方法中访问类的实例成员数据,而不是如何在静态方法中访问类的实例成员。

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

    class Student

    {

      static int number = 0;

      String name;

      public Student()

      {

        number++;

      }

      public Student(String n)

      {

        name = n;

        number++;

      }

      public void showNumber()

      {

        System.out.println("你已经创建了" + number + "对象。");

      }

    }

    public class ShowNumber

    {

      public static void main(String[] args)

      {

        Student a = new Student("ycx");

        a.showNumber();

      }

    }

  • 相关阅读:
    JAVA线程池
    数据库三范式和反三范式
    nvm切换node的版本
    vue源码解析一
    css实现气泡样式
    openlayer 地图实现圈选框选清楚 选择地图区域
    vs code开发常用插件
    记录几个好用的工具
    03 使用css改变页面样式
    02 常用的html元素
  • 原文地址:https://www.cnblogs.com/shenshenxin/p/4885725.html
Copyright © 2020-2023  润新知