动手动脑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() + "个对象");
        
        
    }

 }

截图如上

 

posted @ 2018-10-21 12:33  Triassic  阅读(107)  评论(0编辑  收藏  举报