java新建对象的4中方法
来源:互联网 发布:神武3手游狮驼数据 编辑:程序博客网 时间:2024/06/05 21:08
不说了,直接看代码:
import java.io.*;import java.lang.reflect.Field;class Person implements Cloneable, Serializable{ private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } public String print() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }}public class CreateObj { public static void main(String[] args) { // 第一种方法,直接new一个对象 Person person1 = new Person("Person1", 1); // 第二种方法,使用clone方法 // 首先Person必须实现Cloneable接口 // 接着重写clone()方法,注意类中的引用对象。 Person person2 = null; try { person2 = (Person) person1.clone(); person2.setName("Person2"); person2.setAge(2); } catch (CloneNotSupportedException e) { e.printStackTrace(); } // 第三种方法,使用反射机制 Class<Person> personClass = Person.class; Person person3 = null; try { person3 = personClass.newInstance(); Field[] fields = personClass.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { fields[i].setAccessible(true); if ("name".equals(fields[i].getName())) { fields[i].set(person3, "Person3"); } if ("age".equals(fields[i].getName())) { fields[i].set(person3, 3); } } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } // 第四种方法,使用ObjectOutputStream和ObjectInputStream // 通过序列化和反序列化复制对象 // 类必须实现Serializable接口 Person person4 = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(person1); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); person4 = (Person) ois.readObject(); person4.setName("Person4"); person4.setAge(4); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println(person1); System.out.println(person2 == null ? "" : person2); System.out.println(person3 == null ? "" : person3); System.out.println(person4 == null ? "" : person4); System.out.println("--------------------------------"); System.out.println(person1.print()); if (person2 != null) System.out.println(person2.print()); if (person3 != null) System.out.println(person3.print()); if (person4 != null) System.out.println(person4.print()); }}
运行结果:
createobj.Person@7f31245acreateobj.Person@2503dbd3createobj.Person@4b67cf4dcreateobj.Person@7ea987ac--------------------------------Person{name='Person1', age=1}Person{name='Person2', age=2}Person{name='Person3', age=3}Person{name='Person4', age=4}
可以看到,四个对象的地址都不相同。
0 0
- java新建对象的4中方法
- 几种Java新建对象的方法
- java中新建对象的五种方式
- javascript中新建类,对象方法总结
- java创建对象的4中方法
- 可以在static方法中新建对象,实现调用
- windows中新建文本文档的方法
- 在窗体中新建控件的方法
- 在IDEA中新建Spring的方法
- Java中如何遍历Map对象的4种方法
- Java中如何遍历Map对象的4种方法
- Java中如何遍历Map对象的4种方法
- Java中如何遍历Map对象的4种方法
- Java中遍历Map对象的4种方法
- Java中如何遍历Map对象的4种方法
- Java中如何遍历Map对象的4种方法
- Java中如何遍历Map对象的4种方法
- Java中如何遍历Map对象的4种方法
- 棋盘里的数字(dfs)
- 在JSP中如何使用JSTL(EL表达式)格式化日期
- Android 微信,QQ,新浪三方登录及分享官方SDK集成
- JAVA 中json处理
- Python 编程问题集
- java新建对象的4中方法
- CSS3字体示例,背景图,变形基点等。。。
- C++中转换函数
- rm -rf 血的教训
- Centos 7安装vsftpd jdk8 tomcat9
- 设计模式
- 墙上时钟时间 ,用户cpu时间 ,系统cpu时间内,核态和用户态的区别
- PTA 数据结构4-2 多项式求值 (15分)
- nyoj ACM:图像有用区域 (bfs)