Java创建对象的4种方式
使用new关键字
通过new关键字直接在堆内存上创建对象,这样很方便的调用对象的有参和无参的构造函数.
Student stu1 = new Student("lihua");
Class反射调用
使用Java中反射特性,来进行对象的创建。使用Class
类的newInstance
方法可以调用无参的构造器来创建对象,如果是有参构造器,则需要使用Class
的forName
方法和Constructor
来进行对象的创建。
Class stuClass = Class.forName("Student");
Constructor constructor = stuClass.getConstructor(String.class);
Student stu2 = (Student) constructor.newInstance("李四");
使用Clone方法
使用Clone的方法:无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。要使用clone方法,我们必须先实现Cloneable接口并实现其定义的clone方法。
try
{Student stu3 = (Student) stu1.clone();System.out.println(stu3);
}
catch (CloneNotSupportedException e)
{e.printStackTrace();
}
使用序列化
一个对象实现了Serializable
接口,就可以把对象写入到文件中,并通过读取文件来创建对象。
String path = Test.class.getClassLoader().getResource("").getPath();
String objectFilePath = path + "out.txt";ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(objectFilePath));
objectOutputStream.writeObject(stu2);ObjectInput objectInput = new ObjectInputStream(new FileInputStream(objectFilePath));
Student stu4 = (Student) objectInput.readObject();
示例代码
Student对象,实现Cloneable
和Serializable
接口
import java.io.Serializable;/*** Created by wzj on 2017/11/3.*/
public class Student implements Cloneable,Serializable
{private String name;public Student(String name){this.name = name;}/*** @return a clone of this instance.* @throws CloneNotSupportedException if the object's class does not* support the {@code Cloneable} interface. Subclasses* that override the {@code clone} method can also* throw this exception to indicate that an instance cannot* be cloned.* @see Cloneable*/@Overrideprotected Object clone() throws CloneNotSupportedException{return super.clone();}
}
测试类
import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;/*** Created by wzj on 2017/11/2.*/
public class Test
{public static void main(String[] args) throws Exception{//1、第一种方式是通过newStudent stu1 = new Student("lihua");System.out.println(stu1);//2、通过java反射,静态方式Class stuClass = Class.forName("Student");Constructor constructor = stuClass.getConstructor(String.class);Student stu2 = (Student) constructor.newInstance("李四");System.out.println(stu2);//3、通过clone实现,必须实现Cloneable接口try{Student stu3 = (Student) stu1.clone();System.out.println(stu3);}catch (CloneNotSupportedException e){e.printStackTrace();}//4、通过对象流,必须实现SerializableString path = Test.class.getClassLoader().getResource("").getPath();String objectFilePath = path + "out.txt";ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(objectFilePath));objectOutputStream.writeObject(stu2);ObjectInput objectInput = new ObjectInputStream(new FileInputStream(objectFilePath));Student stu4 = (Student) objectInput.readObject();System.out.println(stu4);}}
Java创建对象的4种方式相关推荐
- java创建对象的五种方式
java创建对象的五种方式 一.使用new关键字 二.使用clone方法 三.使用反序列化 四.使用反射 五.使用Unsafe 一.使用new关键字 如 User user=new User(); 执 ...
- Java 创建对象的 6 种方式,总有一种适合你
创建对象的 6 种方式 假设有个女朋友类: @Data @NoArgsConstructor @AllArgsConstructor class GirlFriend {private String ...
- java创建对象的几种方式
前言,今日面试被问到创建对象是否一定要通过构造器,当时回答错误,查询分析后记录. 创建对象的几种方式: 第一种,也是最常用.一直接触到的方法:通过new 创建对象.这种方法需要用到构造器 Demo ...
- Java创建对象的四种方式
1. new 2. clone 3. 通过反射newInstance 4. 反序列化 5. String s = "abc"(这个是比较特殊的) 以String类为例 String ...
- Java创建对象的5种方式
说明 Java有5种方式来创建对象: 使用 new 关键字(最常用): ObjectName obj = new ObjectName(); 使用反射的Class类的newInstan ...
- 盘点一下 Java创建对象的几种方式(7大种)全面版
1.new 关键字 ① 最常见的方式就是直接 new 加构造器的方式创建 ② 变形一:XXX(类名). 静态方法,本质这种方式还去调用类中构造器,比如说:单例模式.日历类(Calendar) 和一些工 ...
- java中 object创建对象_java创建对象的几种方式
本文收集整理关于java创建对象的几种方式的相关议题,使用内容导航快速到达. 内容导航: Q1:[八喜小子]java中创建对象的方式有哪些? 创建对象那就是应该为object 类型的值吧 那是一个引用 ...
- 什么是创建对象java_java创建对象的几种方式分别是什么
java创建对象有五种方式,分别是: 1.使用new关键字 这是最常见也是最简单的创建对象的方式.通过这种方式,我们可以调用任意的构造函数(无参的和带参数的).Employee emp1 = new ...
- 12月18日云栖精选夜读 | Java 中创建对象的 5 种方式!...
作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...
最新文章
- spring 数组中随机取几个_别给孩子取这三种名字!截止年末,名字中的这几个字已经烂大街了...
- MongoDB配置参数说明
- Linux 命令之 head -- 在屏幕上显示指定文件的开头若干行/显示文件开头内容/查看文件开头内容
- 商业智能常见名词浅释(转载)
- 德鲁伊 oltp oltp_内存中OLTP –娱乐看门狗的三个关键点–桶数
- Linux 创建用户并限制其访问目录,设置密码为永不过期
- VSS 2005配置,很详细
- 我如何学习:开篇 先提升下肾上腺素
- 【云驻共创】华为云文字识别服务的体验之旅
- 计算机国际期刊等级,计算机期刊等级(全)
- 设计模式:仲裁者(Mediator)模式
- SQLiteSpy 打开SqLite数据库文件
- vue的过渡动画(有vue的动画库和ui库的介绍)
- 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)
- 计算机多媒体论文致谢,这篇博士论文《致谢》刷屏,句句扎心……
- Chosen by god 【组合数打表,快速幂,求逆元】
- 湖畔大学曾鸣演讲:从0到0.1最难,伟大如何孕育于此?
- 机器学习利用Anaconda搭建Python科学计算环境
- iperf3使用说明
- 趋向于符号,趣味编程
热门文章
- 【免费教程】Delft3D水动力模型应用和地表水环评报告编制
- Wordpress插件wp-automatic采集频率设置成1秒每次
- 大数据治理平台建设方案(文末附PDF下载)
- LeetCode-126.单词接龙II(相关话题:Dijkstra算法+深度优先)
- 解决EAapp启动不了“战地V”等游戏的方法
- C++ 函数模板的使用
- 录屏怎么录声音苹果_苹果手机自带录屏功能,自己的声音也能录进去?还真没想到...
- Windows11任务栏时钟的秒钟显示
- 众推平台架构mdash;mdash;分布式爬虫
- Android9及以上后台应用无法获取麦克风权限问题