一:静态编码&编译
public class A {
public void hello(){
System.out.println("Hello from the other side!");
}
public static void main(String[] args) {
A a=new A();
a.hello();
}
}
二:实现Cloneable接口
public class B implements Cloneable{
public void hello(){
System.out.println("Hello from B");
}
protected Object clone() throws CloneNotSupportedException {//实现Cloneable接口必须clone()方法
return super.clone();
}
public static void main(String[] args) throws CloneNotSupportedException {
B obj1=new B();
B obj2=(B)obj1.clone();//obj2是obj1克隆出来的对象,没有调用构造函数
obj2.hello();
System.out.println(obj1==obj2);//false 两份内存空间的内容完全相同,地址不同
}
}
三:序列化
public class C implements Serializable{
public void hello(){
System.out.println("Hello from C");
}
public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {
C obj1=new C();
String filePath="data.obj";//当前包目录下
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(filePath));
oos.writeObject(obj1);
oos.close();
System.out.println("对象写入完成!");
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(filePath));
C obj2=(C)ois.readObject();
ois.close();
obj2.hello();//Hello from C
System.out.println("成功读取对象!");
}
四:反射
public class D {
public void hello(){
System.out.println("Hello from D");
}
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Object obj=Class.forName("D").newInstance();//利用反射加载D类,newInstance()创建对象。
Method method=Class.forName("D").getMethod("hello");
method.invoke(obj);
//也可以利用反射来加载指定类构造器
Constructor<D> constructor=D.class.getConstructor();
D obj2=constructor.newInstance();
obj2.hello();
}
}
注:转载需注明出处