zoukankan      html  css  js  c++  java
  • 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();

      }

    }

  • 相关阅读:
    TC(Total Commander)文件管理神器
    友盟 集成测试
    Channel SDK (渠道SDK) for Unity
    Prefab Assist插件
    Android资源(图片)命名规范
    FragmentTransaction的commit的异步操作
    面试2
    Git中.gitignore文件不起作用的解决以及Git中的忽略规则介绍
    Android必知必会-Android Studio修改包名
    Http标准协议Android网络框架——NoHttp
  • 原文地址:https://www.cnblogs.com/shenshenxin/p/4885725.html
Copyright © 2011-2022 走看看