2. Apackage examples.base;public class A { protected static class AA { } } package examples.core;public class B extends examples.base.A { protected static class BB extends examples.base.A.AA { } }
1.在传递参数时,引用类型传递的其实是引用的地址,当通过这个地址改变对象中的属性值时,原对象的属性也会相应改变,所以到v.i = 20;时,此v指向的地址就是first()中的v。但当second()中为v重新new了一个ValueConversion时,v不在指向first()中的对象,虽然second()中的v.i改为了15,frist()中的v.i仍然是20。也就是说再ValueConversion val = new ValueConversion();v = val;这里,两者的联系就断开了 2.好像是选C
int i = 5; ValueConversion v = new ValueConversion(); v.i = 25; second(v, i); System.out.println(v.i);//不明白这个地方为什么会输出20? } public void second(ValueConversion v, int i) { i = 0; v.i = 20; ValueConversion val = new ValueConversion(); v = val; System.out.println(v.i + " " + i); 觉得是上面的new调用了下面的ValueConversion方法,所以v.i会输出20吧。 剩下的不懂????期待高人
2.我感觉第二个错,第三个对,第一个与第四个我也不知道。
顶层类(非内部类)只可以处于 公开 或 默认的访问级别。不能用protected和private来修饰。(修饰顶层类的修饰符包括abstract,public和final,而static,protected和private不能修饰顶层类;成员方法和成员变量可以有多种修饰符,而局部变量只能用final修饰。)
protected static class AA { }
}
package examples.core;public class B extends examples.base.A {
protected static class BB extends examples.base.A.AA { }
}
2.好像是选C
ValueConversion v = new ValueConversion();
v.i = 25;
second(v, i);
System.out.println(v.i);//不明白这个地方为什么会输出20?
}
public void second(ValueConversion v, int i)
{
i = 0;
v.i = 20;
ValueConversion val = new ValueConversion();
v = val;
System.out.println(v.i + " " + i);
觉得是上面的new调用了下面的ValueConversion方法,所以v.i会输出20吧。
剩下的不懂????期待高人