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

  运行结果。

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

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

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理论学时第三节。课后作业。的更多相关文章

  1. java理论学时第七节。课后作业。

    对AboutException.java的理解.在try中如果发出某类系统识别的错误,会以throw的形式抛出,在catch中可以将其截获,不显示在前端,可以选择执行别的代码. ArrayIndexO ...

  2. Java理论学时第五节。课后作业。

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路:先声明一个数组,再利用for循环对每一个元素赋随机生成的值,在求所有数的和,再根据要 ...

  3. Java理论学时第四节。课后作业。

    请查看String.equals()方法的实现代码,注意学习其实现方法. public class StringEquals { public static void main(String[] ar ...

  4. Java理论学时第六节。课后作业。

    package Fuction; class Grandparent { public Grandparent() { System.out.println("GrandParent Cre ...

  5. Java理论学时第二节。课后作业。

    枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象,相同的值则引用同一个对象. 可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals ...

  6. Java理论学时第一节。课后作业。

    设计思路:用nextFloat()函数将从键盘输入的值分别赋给多个变量,然后直接输出相加结果. 流程图: 源代码: 实验结果:

  7. 大道至简第一章和java理论学时第一节。感受。

    这周上了本学期的第一节java课程.课件上说了一些学习java的基本思想.举了个“愚公移山”的例子.这可能就像刚接触一门新的语言,来练习输出“HelloWorld”一样,已成惯例. “愚公移山”的这个 ...

  8. java第十二周课后作业0523

    1.编写一个程序,实现字符串大小写的转换并倒序输出.要求如下(1)使用for循环将字符串“ Hello world”从最后一个字符开始遍历(2)遍历的当前字符如果是大写字符,就使用 toLower C ...

  9. JAVA第三周课后作业

    JAVA课后作业 一.枚举类型 代码: enum Size{SMALL,MEDIUM,LARGE}; public cl ass EnumTest { public static void main( ...

随机推荐

  1. Ubuntu安装UFW防火墙

    sudo apt-get install ufw 一般用户,只需如下设置:sudo apt-get install ufw sudo ufw enable sudo ufw default deny ...

  2. 为Linux虚拟机设置网络

    安装虚拟机的时候为了使用方便我们除了需要设置静态ip为了能够让虚拟机也能够上网我们需要设置虚拟机网络 当然也可以使用虚拟机和主机共享上网,这个比较简单,这里就不说了,现在我们来通过桥接的方式为虚拟机设 ...

  3. 20.Mysql锁机制

    20.锁问题锁是计算机协调多个进程或线程并发访问某一资源的机制. 20.1 Mysql锁概述锁类型分为表级锁.页面锁.行级锁.表级锁:一个线程对表进行DML时会锁住整张表,其它线程只能读该表,如果要写 ...

  4. L1-006 连续因子(20)(思路+测试点分析)

    L1-006 连续因子(20 分) 一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序 ...

  5. 搭建自己的代理服务 proxy nginx squid ss5 s(shadow)s(socks)

    标签: nginx / squid / 负载均衡 / ss 4090 1. nginx (forward) nginx自己熟悉,经常用来做负载均衡的反向代理, 这里搭建一个正向代理(forward) ...

  6. Linux使用touch批量修改文件/文件夹时间戳

      Linux下touch是一个非常有用的命令. touch语法结构如下: touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间 ...

  7. Common tasks that you can perform with the Groovy Script test step

    https://support.smartbear.com/readyapi/docs/soapui/steps/groovy.html Get test case object To obtain ...

  8. PHP使用swoole来实现实时异步任务队列

    转载来自第七星尘的技术博客的<PHP使用swoole来实现实时异步任务队列> 关于异步任务队列 用户打开了我们的网站.他要做的就是勾选需要发邮件的代理商列表,然后把结算邮件发出去.假如我们 ...

  9. jquery plugin 之 form表单验证插件

    基于h5表单验证系统.扩展了对easyui组件的支持 先上图: 提示样式用到了伪对象的 {content: attr(xxx)}函数方法,实现提示信息能动态切换. 1.关键属性说明: type: 表单 ...

  10. 提升HTML5的性能体验系列之二 列表流畅滑动

    App的顶部一般有titlebar,下面是list.常见的一个需求是要在list滚动时,titlebar不动.这个简单的需求,实现起来其实并不简单. 在普通web上的做法是使用div的滚动条,把lis ...