(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. Xdoclet + Ant自动生成Hibernate配置文件

    在使用Hibernate的时候,过多的Hibernate配置文件是一个让人头疼的问题.最近接触了Xdoclet这个工具.它实际上就是一个自动代码生成的工具,Xdoclet不能单独运行,必须搭配其他工具 ...

  2. 【一天一道LeetCode】#191. Number of 1 Bits

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Write a ...

  3. iOS中 蓝牙2.0详解/ios蓝牙设备详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 整体布局如下:     程序结构如右图: 每日更新关注:http://weibo.com/hanjunqiang  ...

  4. iOS体会篇 大学编程到公司的过程

    原文作者:朱众 授权本技术博文转载. 刚进公司时,在你正式动手写代码前,很可能要理解code base.这一过程至少持续1个月,取决于你所在项目的规模.你会发现你不得不使用你浑身所学之能事,理解上古程 ...

  5. curl命令备注

    curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本.1.get请求:curl "h ...

  6. ACM竞赛:立方和问题

    例如: 输入: n 代表多组数组 num1 , num 2 ep:  1    3 这时的算法结果应当为: 1 ^ 3 + 2 ^ 3 + 3 ^ 3 ep : 2    5 这时的算法结果应当为: ...

  7. Java中Set的contains()方法

    Java中Set的contains()方法 -- hashCode与equals方法的约定及重写原则 翻译人员: 铁锚 翻译时间: 2013年11月5日 原文链接: Java hashCode() a ...

  8. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十八):增加排行榜功能

    游戏大体上基本也就完成了,还差一个排行榜.否则如何激励各位选手创造新纪录呢? 排行榜功能也没什么难的,不过需要一点点排序的算法上的考虑. 这里我们把排行榜记录数据和排序都放在GameState类中,在 ...

  9. 【一天一道LeetCode】#56. Merge Intervals

    一天一道LeetCode系列 (一)题目 Given a collection of intervals, merge all overlapping intervals. For example, ...

  10. Android官方技术文档翻译——Gradle 插件用户指南(7)

    本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ...