SCJP复习笔记之修饰符。。
1)static方法不可重写,根据调用的类来确定,测试代码:
-
package org.yoyo.test.qualifiers;
-
-
public class TestOverrideStaticMethod {
-
-
Base.hello(); // Hello, Base!
-
Derived.hello();// Hello, Derived!
-
-
Derived d = new Derived();
-
Base b = new Derived();
-
-
d.hello(); // Hello, Derived!
-
b.hello(); // Hello, Base!
-
-
d.hello("test"); // Derived: test
-
b.hello("test"); // Base: test
-
}
-
-
}
-
-
class Base {
-
-
public static void hello() {
-
}
-
-
}
-
-
}
-
-
class Derived extends Base {
-
-
public static void hello() {
-
}
-
-
@Override
-
}
-
-
}
2)abstract类也可以跑main方法……这个是可以理解的 但是米有试过 囧,遂测试下:
3)transient:都快忘了它是做什么用的。。原来是在序列化中被忽略的 囧。
-
package org.yoyo.test.qualifiers;
-
-
import java.io.FileInputStream;
-
import java.io.FileOutputStream;
-
import java.io.ObjectInputStream;
-
import java.io.ObjectOutputStream;
-
import java.io.Serializable;
-
-
public class TestTransient {
-
-
TestClass test = new TestClass();
-
-
try {
-
out.writeObject(test);
-
out.close();
-
e.printStackTrace();
-
}
-
-
try {
-
TestClass test1 = (TestClass) in.readObject();
-
in.close();
-
e.printStackTrace();
-
}
-
}
-
}
-
-
-
private static final long serialVersionUID = 1L;
-
-
int i = 3;
-
-
transient int j = 2;
-
-
}
4)volatile:这个从来没有用过……囧
5)native:也是从来没有用过……在JNI里再详细看看……它的作用是
· To get to access hardware that Java does not know about
· To write optimised code for performance in a language such as C/C++
如果没有调用native方法,即时方法本身没有被实现也不会报UnsatisfiedLinkError,说明方法加载时是在第一次调用时……
6)private\protected\public就不说了……final也不记了……题目很多……
7)synchronized,同步,这个等线程章节做具体复习……
其他,public void amethod(void) 是不合法的,这和C++不同 囧。
另外贴下访问修饰符权限表
所有成员 | 子类成员 | 同一个包 | 本类成员 | |
---|---|---|---|---|
public | \(^o^)/YES! | \(^o^)/YES! | \(^o^)/YES! | \(^o^)/YES! |
protected | \(^o^)/YES! | \(^o^)/YES! | \(^o^)/YES! | |
default | 同一个包中 | \(^o^)/YES! | \(^o^)/YES! | |
private | \(^o^)/YES! |
这里的同一个包 并非单纯在同一个目录下即可,类文件中定义的包名应该要完全相同,否则就会出错。