03-类与对象--课后作业

1.请总结一下,这个方法有哪些“与众不同之处”,你能列出几条?

(1).方法名字与类名相同

(2).该方法没有返回值

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

 

该类自定义了一个有参数的构造方法,将不再自动调用系统默认构造方法,需要提供一个整型数据才能保证程序正常运行。

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

执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

具体取决于哪一个初始化方法,还是要看最后执行哪一步。

4.请依据代码的输出结果,自行总结Java字段初始化的规律。

 

Java进行初始化的地方有两个:初始化块和构造函数。Java字段初始化规律系统会按顺序对Java字段进行初始化,如果有好几个方法都对同一个变量进行了初始化,Java会将最后一次的初始化结果赋给该变量。 如果在主函数中创建对象时没有形参时,就会把初始化块值赋给主函数中的变量,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。

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

 

 在静态方法中访问类的实例变量需首先进行类的实例化,然后用类名.变量名进行调用。

6.Integer类的装箱和拆箱到底是怎样实现的?

装箱,就是把基本类型用他们相对应的引用类型包装起来,使他们可以具有对象的特质,如可以把int型包装成Integer类的对象,或者把double包装成Double等等。

拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。

在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Integer的intValue方法。以这两种方法实现拆箱装箱。

7.两对整数明明完全一样,为何一个输出true,一个输出false?

输出结果表明i1和j1指向的是同一个对象,而i2和j2指向的是不同的对象。

在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。上面的代码中i1和ij1的数值为100,因此会直接从cache中取已经存在的对象,所以i1和j1指向的是同一个对象,而i2和j2则是分别指向不同的对象。

 

 

posted on 2017-10-20 08:21  孟庆淋  阅读(228)  评论(0编辑  收藏  举报

导航