创建对象(实例))的4种方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cadi2011/article/details/51672940

 

public class Dog{
	
	public Dog(){
		super();
	}
	
}

 

 

 

1、创建对象有什么难的,我们new一个就是的………………对,没错,这只是其中一种

 

Dog jack = new Dog();

 

 

 

2、利用class的反射机制,该种方式适用于有无参构造方法的,

Class dogClass = Dog.class; //拿到class Dog的 Class实例对象
Dog rose = (Dog) dogClass.newInstance(); //调用Class的实例方法 newInstance()创建Dog的实例对象

每一个class,都是Class的一个对象

Class dogClass = Class.forName("Dog");
Dog rose = (Dog) dogClass.newInstance();

用了两种获得Dog的class对象的方式,第一种是类名.class, 第二种是Class.forName("类名")

 

3、利用java对象的可序列化(对象在内存中的分配方式,在本地里保存一份一模一样的,然后再从本地取出来用(这叫反序列号),相当于把一个对象的状态(实例变量)完全保存住了,挺牛逼的啊,是不是游戏里经常这么搞),利用封装类:ObjectOutputStream序列化,ObjectInputStream反序列号。

 

前提:该类必须实现接口Serializable

 

public class CreateFour implements Serializable {
	
	public static void main(String args[]) {
		CreateFour fCreateFour = new CreateFour();
		ObjectOutputStream objectStream;
		try {
			objectStream = new ObjectOutputStream(new FileOutputStream("res/obj.txt"));
			objectStream.writeObject(fCreateFour);
			
			ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("res/obj.txt"));
			CreateFour cloneFour = (CreateFour) objectInputStream.readObject();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

 

 

 

 

4、利用Object下的native方法clone(),该类必须实现Cloneable接口,不然会抛出异常CloneNotSupportedException

protected native Object clone() throws CloneNotSupportedException;

 

public class CreateFour implements Cloneable {
	
	public static void main(String args[]) {
		CreateFour f = new CreateFour();
		try {
			CreateFour cloneObject = (CreateFour) f.clone();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

 


5、总结

 

答:好啦,创建对象的4种方式,伙伴们都知道了…………new、反射、 利用对象流反序列号,还是利用clone(),都会开辟新的内存空间,就是在jvm中的堆内存复制一个与源对象相同的新的对象(千万不要以为旧引用与新引用对应的是同一个对象哦)

 

6、最后提一个问题

native方法,没有加static,Java中的native方法 可以算做实例方法吗?

 

 

 

 

 

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭