动手动脑03
(1)请输入并运行以下代码,得到什么结果?
原因是因为在obj1上有开辟了一个新空间obj2.它们两个是独立的,无法相等。
(2)以下代码为何无法通过编译?哪儿出错了?
软件提示Foo函数未定义。原因是:因为如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
(3)以下代码输出结果是什么?
运行结果为100 300
执行类成员定义时指定的默认值或类的初始化块,先执行哪个要看先后顺序。 执行类的构造函数。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些对象创建时必须执行的代码。
(4)
静态代码块无论有多少,都是最先执行;静态代码块只执行一次,之后执行构造代码块,最后执行构造方法。无论子类是否调用父类构造方法,父类的所有构造代码块、构造方法均先于子类的构造代码块、构造方法执行。静态代码块也遵循父类先于子类执行的特点。如果子类存在调用父类的有参构造方法,那么执行父类构造方法时就不会执行无参构造方法(使用this()调用除外)。
(5)
静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
(6)两对整数明明完全一样,为何一个输出true,一个输出false?
因为Integer类内有个东西叫常量池。在为Integer类变量赋值时,若取值在-128到127内,则会在常量池中寻找内存地址,如果取值不在常量池内(即-128到127),则会为变量开辟新的内存空间来存值。以下为Integer类的赋值方法
使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”
package practise; public class C { private static int count; public C() { // TODO 自动生成的构造函数存根 count++; } public static int getCount() { return count; } public static void main(String[] args) { // TODO 自动生成的方法存根 C t1 = new C(); C t2 = new C(); C t3 = new C(); System.out.println("你创建了" + getCount() + "个对象"); } }
截图如上