SCJP 学习笔记 for 1.4
1
1
System.out.println(010);
输出八进制数 010 的十进制值 8
注意是数字 0 开头,不是字母 o
16 进制以 0x 或 0X 开头
class ValHold{
public int i = 10;
}
public class ObParm{
public void amethod(){
ValHold v = new ValHold();
another(v);
System.out.println(v.i);
}
public void another(ValHold v){
v.i = 20;
ValHold vh = new ValHold();
v =vh;
System.out.println(v.i);
}
public static void main(String[] argv){
ObParm o = new ObParm();
o.amethod();
}
}
此题的答案是
10
20
为什么不是
10
10 呢?
这样解释吧,按照 sun 官方的
说法:当一个引用变量作为参数传
递给一个方法时, 在这个方法内可
以改变变量的值,即改变引用指向
的对象,(本题中将 vh 赋给 v)但
是方法的调用结束后,改变量恢复
原来的值,即变量仍然指向原来的
对象。 (即 another(v)调用结束之
后,v 又回复到第一次 ValHold v =
new ValHold(); 时指向的地址空
间。)
但是如果在方法内改变了引用
指向的对象的数据(属性),那么当
方法的调用结束后,尽管引用仍然
指向原来的对象,这个对象的某个
属性已经被改变了(v 的 i 值在 执
行 v.i=20 的时候就已经被改变了,
所以调用 another 结束后,v.i 已经
变成了 20)
重载 overload 方法不能用返回值判断,而应当以参数判断(有无参数、参数类
型、参数个数、参数排列顺序)
public class InOut{
String s= new String("Between");
public void amethod(final int iArgs) {
int iam;
class Bicycle{
Bicycle() {
System.out.println(s); //这两句话可以,也就是说可以访问 s
System.out.println(iArgs); //和 final int 常量
//System.out.println(iOther);
}
}
new Bicycle();
}
public void another(){
int iOther;
}
Inner class
Inner class 能够存取外部类的所有
实例变量----无论这些实例变量有
什么样的存取控制符(比如
private),就像类中的方法能够存取
方法所在类的所有变量一样;
如果 inner class 定义在方法中,则
inner class 能够存取方法所在的类
中的实例变量,也能存取该方法中
的局部变量,但该局部变量必须是
final 的,也就是只能访问方法中的
常量.
(上面所说的都是普通内部类,不是
静态内部类的情况)