Java 创建对象的四种方式
来源:互联网 发布:网络语言大全 编辑:程序博客网 时间:2024/05/09 05:09
Java 创建对象一共有四种方式:
1. 运用new关键字来创建对象,这种方式最常见。用的最广。
2. 运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法
3. 调用对象的clone()方法
4. 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.
User对象
package com.demo;import java.io.Serializable;public class User implements Cloneable, Serializable { private static final long serialVersionUID = 1L; private Integer id; private String name; private String sex; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("User [id="); builder.append(id); builder.append(", name="); builder.append(name); builder.append(", sex="); builder.append(sex); builder.append("]"); return builder.toString(); }}
测试代码
package com.demo;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class Main { public static void main(String[] args) { //1.运用new关键字来创建对象User User user = new User(); user.setId(1); user.setName("我是new出来的"); user.setSex("boy"); System.out.println("运用new关键字来创建的对象:" + user); //2.运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法 //会有InstantiationException, IllegalAccessException, ClassNotFoundException三个异常 try { User user1 = (User) Class.forName("com.demo.User").newInstance(); user1.setId(2); user1.setName("我是反射出来的"); user1.setSex("girl"); System.out.println("运用反射手段来创建的对象:" + user1); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e1) { e1.printStackTrace(); } //3.运用clone()方法产生新对象 //注意1.User对象必须实现 Cloneable接口,如class User implements Cloneable. //注意2.User必须重写clone()方法, try { User temp = new User(); temp.setId(3); temp.setName("我是clone出来的"); temp.setSex("boy&girl"); User user2 = (User) temp.clone(); System.out.println("运用clone()手段来创建的对象:" + user2); } catch (CloneNotSupportedException e) { e.printStackTrace(); } //4.运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。 //注意:被序列化的对象必须implements Serializable User temp = new User(); temp.setId(4); temp.setName("我是反序列化出来的"); temp.setSex("boy&girl"); User user3 = cloneTo(temp); System.out.println("运用反序列化手段来创建的对象:" + user3); } @SuppressWarnings("unchecked") public static <T> T cloneTo(T src) throws RuntimeException { ByteArrayOutputStream memoryBuffer = new ByteArrayOutputStream(); ObjectOutputStream out = null; ObjectInputStream in = null; T dist = null; try { out = new ObjectOutputStream(memoryBuffer); out.writeObject(src); out.flush(); in = new ObjectInputStream(new ByteArrayInputStream( memoryBuffer.toByteArray())); dist = (T) in.readObject(); } catch (Exception e) { throw new RuntimeException(e); } finally { if (out != null) try { out.close(); out = null; } catch (IOException e) { throw new RuntimeException(e); } if (in != null) try { in.close(); in = null; } catch (IOException e) { throw new RuntimeException(e); } } return dist; } }
运行效果:
运用new关键字来创建的对象:User [id=1, name=我是new出来的, sex=boy]运用反射手段来创建的对象:User [id=2, name=我是反射出来的, sex=girl]运用clone()手段来创建的对象:User [id=3, name=我是clone出来的, sex=boy&girl]运用反序列化手段来创建的对象:User [id=4, name=我是反序列化出来的, sex=boy&girl]
0 0
- java创建对象的四种方式
- Java 创建对象的四种方式
- Java创建对象的四种方式
- Java创建对象的四种方式
- Java 创建对象的四种方式
- java创建对象的四种方式
- Java 创建对象的四种方式
- java创建对象的四种方式
- JAVA创建对象的四种方式
- Java中创建对象的四种方式
- Java中创建对象的四种方式
- Java中创建对象的四种方式
- JAVA中创建对象的四种方式
- JAVA中创建对象的四种方式
- JAVA中创建对象的四种方式
- javascript的四种创建对象方式
- JavaScript创建对象的四种方式
- 创建对象的四种方式
- Unity3D-RPG项目实战(4):角色性能测试
- Uva 11059 Maximum Product
- 大三第12周
- stm32使用systick精确延时
- Swap Nodes in Pairs
- Java 创建对象的四种方式
- log4j2<Appenders>常用子节点浅析
- three.js 源码注释(二十六)Core/BufferAttribute.js
- 见泛花落
- SDUTOJ 1586 计算组合数 杨辉三角
- sysctl命令详解
- JAVA:获取带有中文字符串真实长度
- three.js 源码注释(二十七)Core/BufferGeometry.js
- 笔记4_看张鹏老师html+css视频所得