码迷,mamicode.com
首页 > 其他好文 > 详细

类与对象的动手动脑

时间:2017-10-19 21:06:01      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:实例   initial   技术分享   因此   查询   直接   images   定义   代码   

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

技术分享

原因:调用的new Foo是函数Foo(),所以括号里面应该有一个int型变量参数,比如写一个1

技术分享

2.进行实验,根据下列代码的输出结果,自行总结java字段初始化的规律。

技术分享

结果:技术分享

对此结果的分析:

  1. 类开始的  {  field=200}是类的初始化块,用大括号“{}”直接包裹的,是做为类的成员,这种“没有名字”的成员大多是初始化的字段。
  2. 后面的  public int field=100;是类在定义的时候进行的初始化,函数到这里的field=100.

        3.所以在主函数中的System.out.println(obj.field);输出的filed=100.

        4.obj=new InitializeBlockClass(300); System.out.println(obj.field);是调用了构造函数,使用构造函数进行了初始化,赋值300,故输出的filed=300.

对规律进行的总结:

  1. 执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
  2. 执行类的构造函数。
  3. 类的初始化块不接受任何的参数,而且只要一创建类的对象,他们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

 3.请运行以下程序,观察输出结果,总结出“静态初始化块的执行顺序”。

技术分享

技术分享

结果:

技术分享

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

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

父类的静态初始化块

子类的静态初始化块

父类的初始化块

父类的构造函数

子类的初始化块

子类的构造函数

 

4.一个有趣的问题

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

技术分享

结果:

技术分享

要在静态方法中访问类的实例成员,需要先用new,创建一个对象,然后再通过这个对象去调用成员的方法和变量。

 

5.程序

使用类的静态字段和构造函数,我们可以跟踪某个类的所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。

 

 技术分享

结果:

技术分享

 

类与对象的动手动脑

标签:实例   initial   技术分享   因此   查询   直接   images   定义   代码   

原文地址:http://www.cnblogs.com/anhaoai/p/7694258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!