(1) 用new语句创建对象,这是最常见的创建对象的方法。
(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法。
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

一.用new语句创建对象

  1. User user = new User()

 

二.运用反射手段
(1)调用java.lang.Class.newInstance()

  1. <span style="font-size: 14px;">Class.forName(classname).newInstance()
  2. Wife wife = (Wife) Class.forName("com.java.clone.Wife").newInstance();</span>

(2)调用java.lang.reflect.Constructor类的newInstance()

  1. <span style="font-size: 14px;">Constructor<Wife> constructor = Wife.class.getDeclaredConstructor(int.class,String.class);
  2. Wife wife = (Wife) constructor.newInstance(1,"nihao");</span>

三.调用对象的clone()方法
详情参考:http://ncs123.iteye.com/blog/1775631

  1. Wife wife = new Wife(1,"wang");
  2. Wife wife2 = null;
  3. wife2 = (Wife) wife.clone();//运用clone()方法产生新对象

四.运用反序列化手段
被序列化的对象必须implements Serializable

  1. <span style="font-size: 14px;">public class BeanUtil {
  2. @SuppressWarnings("unchecked")
  3. public static <T> T cloneTo(T src) throws RuntimeException {
  4. ByteArrayOutputStream memoryBuffer = new ByteArrayOutputStream();
  5. ObjectOutputStream out = null;
  6. ObjectInputStream in = null;
  7. T dist = null;
  8. try {
  9. out = new ObjectOutputStream(memoryBuffer);
  10. out.writeObject(src);
  11. out.flush();
  12. in = new ObjectInputStream(new ByteArrayInputStream(
  13. memoryBuffer.toByteArray()));
  14. dist = (T) in.readObject();
  15. } catch (Exception e) {
  16. throw new RuntimeException(e);
  17. } finally {
  18. if (out != null)
  19. try {
  20. out.close();
  21. out = null;
  22. } catch (IOException e) {
  23. throw new RuntimeException(e);
  24. }
  25. if (in != null)
  26. try {
  27. in.close();
  28. in = null;
  29. } catch (IOException e) {
  30. throw new RuntimeException(e);
  31. }
  32. }
  33. return dist;
  34. }
  35. public static void main(String[] args){
  36. Husband husband = new Husband(1);
  37. Wife wife = new Wife(1,"jin");
  38. husband.setWife(wife);
  39. Husband husband2 = cloneTo(husband);//运用反序列生成了一个对象
  40. }
  41. }</span>

JAVA 创建对象4种方法的更多相关文章

  1. Java创建对象的六种方法-权当记录一下

    1 简介 Java是面向对象的编程语言,只要使用它,就需要创建对象.Java创建对象有六种方法,实际常用的不会这么多,这里权当是记录一下. 2 六种方法 (1)使用new关键字 Pumpkin p1 ...

  2. Javascript创建对象几种方法解析

    Javascript创建对象几种方法解析 Javascript面向对象编程一直是面试中的重点,将自己的理解整理如下,主要参考<Javascript高级程序设计 第三版>,欢迎批评指正. 通 ...

  3. java基础-四种方法引用

    实例 直接三角形,通过两边算第三边,目的是为了如何使用这几种方法引用.代码中多有些不合适,尽情原谅. 静态方法引用 接口的参数列表与类中的具体实现方法的参数列表一样,返回值一致. 调用 //静态引用 ...

  4. Java用四种方法实现阶乘n! (factorial)

    1. 引言 实现阶乘的方法很多,这边介绍四种方法,分别是递归,尾递归,循环和BigDecimal. 2. 代码 public class Test { public static void main( ...

  5. 两个变量交换的四种方法(Java) 七种方法(JS)

    两个变量交换的四种方法(Java)   对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 ...

  6. Java用n种方法编写实现双色球随机摇号案例

    方法清单 规则 实现方式一 实现方式二 实现方式三 实现方式四 实现方法五 之前我用JavaScript编写过一个实现双色球随机摇号的案例, 点击此处查看,今天我再用Java语言来实现这一效果. 规则 ...

  7. JAVA - 多线程 两种方法的比较

    一.继承Thread类 实现方法: (1).首先定义一个类去继承Thread父类,重写父类中的run()方法.在run()方法中加入具体的任务代码或处理逻辑.(2).直接创建一个ThreadDemo2 ...

  8. java 中有几种方法可以实现一个线程? 用什么关键字修 饰同步方法? stop()和 suspend()方法为何不推荐使用?

    java5 以前, 有如下两种:第一种:new Thread(){}.start();这表示调用 Thread 子类对象的 run 方法, new Thread(){}表示一个Thread 的匿名子类 ...

  9. 【Java面试题】23 java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?

    java5 以前, 有如下两种:第一种:new Thread(){}.start();这表示调用 Thread 子类对象的 run 方法, new Thread(){}表示一个Thread 的匿名子类 ...

随机推荐

  1. java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较

    一.list简介 List列表类,顺序存储任何对象(顺序不变),可重复. List是继承于Collection的接口,不能实例化.实例化可以用: ArrayList(实现动态数组),查询快(随意访问或 ...

  2. J2EE进阶(六)SSH框架工作流程项目整合实例讲解

    J2EE进阶(六)SSH框架工作流程项目整合实例讲解 请求流程 经过实际项目的进行,结合三大框架各自的运行机理可分析得出SSH整合框架的大致工作流程. 首先查看一下客户端的请求信息: 对于一个Web项 ...

  3. MongoDB分组

    MongoDB三种分组方式 group(先筛选再分组,不支持分片,对数据量有所限制,效率不高) [简单分组实测150W 12.5s] mapreduce(基于js引擎,单线程执行,效率较低,适合用做后 ...

  4. C语言中字符串常用函数--strcat,strcpy

    strcpy 原型声明:extern char *strcpy(char* dest, const char *src); 头文件:#include <string.h> 功能:把从src ...

  5. 视音频编解码学习工程:FLV封装格式分析器

    ===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...

  6. Linux nohup 命令

    Linux nohup 命令 如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户之后继续运行相应的进程.nohup就是不挂起的意思(no ...

  7. [Django] 单元测试小记

    从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合理,单元测试写起来就麻烦的多呀.公司的项目一直都是用Dj ...

  8. Protobuf-java maven配置

    Protobuf-java maven配置 1. maven pom片断 <!-- protobuf-java for maven plugin http://stackoverflow.com ...

  9. unity 快速创建小地图

    先写一个纹理遮罩shader Shader "Unlit/TexMask" { Properties { _MainTex ("Texture", 2D) =  ...

  10. 一个 redis 异常访问引发 oom 的案例分析

    「推断的前提是以事实为依据.」 这两天碰到一个线上系统的偶尔出现突然堆内存暴涨,这倒不是个什么疑难杂症, 只是过程中有些思路觉得可以借鉴参考,故总结下并写下来. 现象 内存情况可以看看下面这张监控图. ...