Java中,类的实例化方法有四种途径:

1)使用new操作符

2)调用Class对象的newInstance()方法

3)调用clone()方法,对现有实例的拷贝

4)通过ObjectInputStream的readObject()方法反序列化类

ClassInstance.java

import java.io.*;

class ClassInstance implements Cloneable, Serializable {

private String str = "测试...";

public void fun(){

System.out.println(str);

}

public ClassInstance(String str){

System.out.println("有参类的实例化");

this.str += str;

}

public ClassInstance(){

System.out.println("无参类的实例化");

}

public Object clone(){

return this;

}

}

ClassInstanceTest.java

import java.io.*;

import java.lang.reflect.*;

public class ClassInstanceTest{

public static void main(String[] args) throws ClassNotFoundException, InstantiationException,

IllegalAccessException, IOException,InvocationTargetException, NoSuchMethodException{

//第一种类的实例化方式

ClassInstance ci01 = new ClassInstance("01");

ci01.fun();

//第二种类的实例化方式

ClassInstance ci02 = (ClassInstance) Class.forName("ClassInstance").newInstance();

ci02.fun();

//第三种类的实例化方式

ClassInstance ci03 = (ClassInstance) ci01.clone();

ci03.fun();

//第四种类的实例化方式

FileOutputStream fos = new FileOutputStream("ci.tmp");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(ci01);

oos.close();

fos.close();

FileInputStream fis = new FileInputStream("ci.tmp");

ObjectInputStream ois = new ObjectInputStream(fis);

ClassInstance ci04 = (ClassInstance) ois.readObject();

ois.close();

fis.close();

ci04.fun();

System.out.println("--------------------额外测试--------------------");

ClassInstance ci05 = null;

//额外的思考 在第二种类实例化的方式中有没有一种方法实现有参数的构造方式

//获得类的构造信息

Constructor[] ctor = Class.forName("ClassInstance").getDeclaredConstructors();

//找到我们需要的构造方法

for(int i=0;i

Class[] cl = ctor[i].getParameterTypes();

if(cl.length == 1){

//实例化对象

ci05 = (ClassInstance) Class.forName("ClassInstance").getConstructor(cl).newInstance(new Object[]{"05"});

}

}

ci05.fun();

}

}

输出结果

有参类的实例化

测试...01

无参类的实例化

测试...

测试...01

测试...01

-------------------额外测试--------------------

有参类的实例化

测试...05

除了这几种情况可以实例化一个Java类对象外,隐式调用实例化也是利用了已上集中情况。例如常见的方法:

public class ClassInstance{

public ClassInstance(){

}

public ClassInstance getInstance(){

return new ClassInstance();

}

}

通过观察结果,我们发现无论哪一种方式必须经过的一步---调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。

java实例化类方法_Java 实例化类的的几种方法相关推荐

  1. java当前时间_java 获取当前时间的三种方法

    总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响, ...

  2. java 不知道类名_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里 ...

  3. java 读取控制台_Java从控制台读入数据的几种方法总结

    这里记录Java中从控制台读入信息的几种方式,已备后查! (1)JDK 1.4(JDK 1.5和JDK 1.6也都兼容这种方法) public class TestConsole1 { public ...

  4. java时间代码_java获取当前时间的四种方法代码实例

    这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种:Date类 public class ...

  5. java 取名字_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName()返回的是虚拟机里面 ...

  6. java保留小数_java保留两位小数4种方法

    java保留两位小数4种方法 方法一:String的format方法(推荐) double f = 111231.5585; System.out.println(String.format(&quo ...

  7. java获取文件大小_Java实现获取文件大小的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.i ...

  8. java计算器类方法_java用类和方法的方式写的简单计算器

    public class JiSuanQi { public double num1; public double num2; public JiSuanQi(double num1, double ...

  9. java定义子类_java定义类和子类中的方法

    展开全部 你好: 首先是62616964757a686964616fe78988e69d8331333335343337Parents类public class Parents { private S ...

  10. java 复制文件_Java中复制文件的4种方法

    Java拷贝文件是一种非常常见的操作.但是java.io.File类没有任何快捷方法可以将文件从源复制到目标文件.在这里,我们将了解学习可以在java中复制文件的四种不同方法. 方法一:使用Strea ...

最新文章

  1. 硬件——STM32,GPIO篇
  2. 解决Putty中左边 alt+b 不工作的问题
  3. 前端基础-jQuery的优点以及用法
  4. 18 FI配置-财务会计-向计算程序分配国家
  5. php学到什么程度可以学thinkphp,thinkphp学习一
  6. 三国佚事--巴蜀危机
  7. 1. 少了一个PermMissingElem Find the missing element in a given permutation.
  8. cocostudio
  9. 性能工具之ab压力测试工具及ab命令详解
  10. 【STM32开发环境搭建】 - st-link驱动安装和串口驱动安装
  11. Linux下使用nmap扫描端口
  12. The exception was not handled due to missing onError handler in the subscribe() method call
  13. “九阳神功”是怎么炼成的?
  14. nape.geom.MarchingSquares
  15. 优必选在 CES 上发布了一个真·家庭服务机器人
  16. 云笔记使用的感受想法!(对有道云笔记、印象云笔记的比较与评价)
  17. 不相关的正态分布随机变量也不一定就独立
  18. 3706 teradata 语句报错_TERADATA中函数的使用
  19. python - 密码加密与解密
  20. kdb代码分析(七)

热门文章

  1. redhat7挂载光盘
  2. 微信朋友圈功能测试用例
  3. MUSIC算法原理以及详细推导
  4. redis——相关问题汇总
  5. 基于大数据平台的毕业设计
  6. u8应用服务器设置eai,用友U8+V15EAI用户使用手册.pdf
  7. linux操作系统期末考试试题及答案,Linux操作系统期末复习题(含答案).doc
  8. 1讲.Cisco模拟器-小凡软件的安装使用(附视频链接)
  9. 陕西省高等数学竞赛_陕西省高等数学竞赛试题答案
  10. 2019最新北风网Ant+Java全套视频课程