java第三章动手动脑问题

1使用“==”可以判断对象变量值是否相等吗?

public class T

{
public static void main (String[] args)

  {
    Foo obj1=new Foo();
    Foo obj2=new Foo();
    System.out.println(obj1==obj2);
  }
}
class Foo{
int value=100;
}

public class T

{
public static void main (String[] args)

 {
   Foo obj1=new Foo();
   Foo obj2=new Foo();
   System.out.println(obj1.value==obj2.value);
 }
}
class Foo{
int value=100;
}

2.如何比较两个对象的内容是否一样?

对象的内容是指它们在某一时刻的所有字段的值,内容相等就是对应字段值一致。

要比对两个对象的字段值,需要“重写(override)”基类的equals()方法

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

public class Test

{

public static void main(String[] args)

{
// TODO Auto-generated method stub
Foo obj1 = new Foo();
}
}
class Foo{
int value;
public Foo(int initValue){
value=initValue;
}
}

如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。可以将“Foo obj1 = new Foo();”改为“Foo obj1 = new Foo(4);”。

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

 在“public int field = 100;”在“{field=200;}”之前时,是“{field=200;}”说了算;在之后时,是“public int field = 100;”说了算。也就是谁比较靠后就是谁初始化起作用。执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。执行类的构造函数。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。

5.运行截图如下

静态初始化块的执行顺序:父类的静态初始化块      子类的静态初始化块   父类的初始化块  父类的构造函数   子类的初始化块   子类的构造函数

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

public class Text
{
 int x = 3;
 static int  y = 4;
 public static void method()//静态方法
  {   
   System.out.println("实例变量x = " + new Text3().x);//在静态方法中访问类的实例变量需首先进行类的实例化
   System.out.println("静态变量y = " + y);//在静态方法中可直接访问类的静态变量
  }

 public static void main(String[] args) 
    {
     Text3.method();
     Text3 ex = new Text3();
        System.out.println("x = " + ex.x);
        System.out.println("y = " + ex.y);
    }
}
运行结果截图:


 

posted @ 2017-10-20 23:27  月影小歪  阅读(102)  评论(0编辑  收藏  举报