首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

初学者求解2个习题

2012-09-25 
菜鸟求解2个习题有2个题目:1,创建一个类,它包含一个未初始化的String引用。验证该引用被JAVA初始化成了null

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

Java code
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域?
Java code
class num2{    num2(){        System.out.println("abc ");    }}public class p77_2 {    public static void main(String[] args) {                new num2();                       // TODO 自动生成方法存根    }}

这样算不算通过构造器初始化的String域?

[解决办法]
第一个问题,因为String a;没有给a初始化,所以为null。这里需要注意下,如果是基本类型的话,有初始化的值,如int i;i是有值的,为0,而你给的String不是基础类型,需要初始化的,所以为null;

第二个问题,通过构造器初始化的String域,如下
num2(){
String a;
}
你那样不算的。
他们的差异就是,通过构造器初始化表明,你new一个对象的时候,就被赋值了。另外一个是你想什么时候赋值就什么时候复制。
不知道说明白了没有
[解决办法]
第1题可以验证
第2题
Java code
class B {   String s1 = "s1"; //这样就使定义时初始化, String s1 = new String("s1")也是   String s2;   public B() {s2 = "s2";} //这样就是构造器初始化}
[解决办法]
回答下你的第二题

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回。 

[解决办法]
什么叫一个在定义时就被初始化了的String域?

指的是在定义该成员属性时就给该属性赋值: String s1 = "abc";

热点排行
Bad Request.