有2个题目:
1,创建一个类,它包含一个未初始化的String引用。验证该引用被JAVA初始化成了null。
class num1{

String a;


}
public class p77 { public static void main(String[] args) {
 num1 i = new num1();
System.out.print("A= "+i.a);

// TODO 自动生成方法存根 }}
不知道我做的对不对?
2,创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器初始化的String域。这两种方式有何差异?第二题,我不太明白题目的内容。什么叫一个在定义时就被初始化了的String域?
class num2{
num2(){
System.out.println("abc ");
}
}public class p77_2 {
public static void main(String[] args) {

    new num2();
    
   
// TODO 自动生成方法存根 }}
这样算不算通过构造器初始化的String域?

解决方案 »

  1.   

    第一题是可以打印出null,
    第二题 String str = "abc";这样就是定义时就被初始化
      

  2.   

    第一个问题,因为String a;没有给a初始化,所以为null。这里需要注意下,如果是基本类型的话,有初始化的值,如int i;i是有值的,为0,而你给的String不是基础类型,需要初始化的,所以为null;第二个问题,通过构造器初始化的String域,如下
    num2(){
    String a;
        }
    你那样不算的。
    他们的差异就是,通过构造器初始化表明,你new一个对象的时候,就被赋值了。另外一个是你想什么时候赋值就什么时候复制。
    不知道说明白了没有
      

  3.   

    第1题可以验证
    第2题
    class B {
       String s1 = "s1"; //这样就使定义时初始化, String s1 = new String("s1")也是
       String s2;
       public B() {s2 = "s2";} //这样就是构造器初始化
    }
    初始化的方式很多,直接用常量赋值,或者直接用new生成对象,或者通过调用静态方法等等
      

  4.   

    回答下你的第二题Java code
    public class MyTest {
        String s1 = "abc";
        String s2;
        public MyTest() {
            s2 = "efg";
        }    
    }
    初始化的过程是这样的。在你new MyTest();
    时先会执行
    String s1 = "abc";
    String s2;
    这样s1被初始化成了"abc"
    s2被初始化成了null然后执行构造方法s2成了"efg"区别就是s2被初始化了2回。
    s1被初始化了1回。 
      

  5.   

    什么叫一个在定义时就被初始化了的String域?指的是在定义该成员属性时就给该属性赋值: String s1 = "abc";
      

  6.   

    第二题我试了一下,s2的值输出还是null,String定义的s2跟构造器里的s2的值不一样,构造器里的s2赋值了也输不出来啊,求解。