首页 > 应用开发 > Java > 在Java中创建对象的不同方法是什么?
在这篇快速文章中,我们将讨论在Java中创建对象的五种不同方法。 我们知道,类是创建对象的模板或蓝图。 让我们列出在Java中创建对象的不同方法。
1.使用新关键字
2.使用
newInstance()
Class类的方法
3.使用
newInstance()
Constructor类的方法
4.使用对象反序列化
5.使用对象克隆 -
clone()
方法
这是在Java中创建对象的最流行的方法,我们已在上面讨论过; 几乎每个Java Developer都知道这种方法。
包 网。javaguides。corejava。哎呀 ;
公立 班 学生 {
私有 字符串 名称 ;
私人 弦乐 学院 ;
public Student(String name,String college){
super();
这个。name = name ;
这个。大学 = 大学 ;
}
public String getName(){
返回 名称 ;
}
public void setName(String name){
这个。name = name ;
}
public String getCollege(){
回归 大学 ;
}
public void setCollege(String college){
这个。大学 = 大学 ;
}
public static void main(String [] args){
学生 学生 = 新的 学生(“拉梅什”,“BVB”);
学生 STUDENT2 = 新的 学生(“普拉卡什”,“GEC”);
学生 学生三 = 新的 学生(“普拉莫德”,“个人所得税”);
}
}
从上面的代码中,我们 使用 new 关键字 创建 Student 对象 :
学生 学生 = 新的 学生(“拉梅什”,“BVB”);
学生 STUDENT2 = 新的 学生(“普拉卡什”,“GEC”);
学生 学生三 = 新的 学生(“普拉莫德”,“个人所得税”);
Class.forName()
将动态加载该类,它间接将为您提供“类类”对象。
加载类后,我们将使用该
newInstance()
方法动态创建对象。
让我们
在这里
为
Student
类
创建一个Java对象
:
包 网。javaguides。corejava。哎呀 ;
公立 班 学生 {
private String name = “Ramesh” ;
private String college = “ABC” ;
公共 学生(){
super();
}
public Student(String name,String college){
super();
这个。name = name ;
这个。大学 = 大学 ;
}
public String getName(){
返回 名称 ;
}
public void setName(String name){
这个。name = name ;
}
public String getCollege(){
回归 大学 ;
}
public void setCollege(String college){
这个。大学 = 大学 ;
}
public static void main(String [] args){
尝试 {
String className = “net.javaguides.corejava.oops.Student” ;
class clasz = Class。forName(className);
学生 学生 =(学生)clasz。newInstance();
系统。出。的println(学生。的getName());
系统。出。的println(学生。getCollege());
} catch(InstantiationException | IllegalAccessException | ClassNotFoundException e){
e。printStackTrace();
}
}
}
输出:
拉梅什
ABC
该
forName()
方法返回与具有给定字符串名称的类或接口关联的Class对象。
class clasz = Class。forName(className);
该
newInstance()
方法创建此Class对象表示的类的新实例。
学生 学生 =(学生)clasz。newInstance();
系统。出。println(学生);
与
Class
类
的
newInstance()
方法
类似,
类中有一个
方法
,我们可以用它来创建对象。
我们还可以使用此
方法
调用参数化构造函数和私有构造函数
。
让我们通过
使用类的
方法
创建
Student
类对象来
演示这种方法
:
newInstance()
java.lang.reflect.Constructor
newInstance()
newInstance()
java.lang.reflect.Constructor
包 网。javaguides。corejava。哎呀 ;
导入 java。郎。反思。构造函数 ;
导入 java。郎。反思。InvocationTargetException ;
公立 班 学生 {
private String name = “Ramesh” ;
private String college = “ABC” ;
公共 学生(){
super();
}
public Student(String name,String college){
super();
这个。name = name ;
这个。大学 = 大学 ;
}
public String getName(){
返回 名称 ;
}
public void setName(String name){
这个。name = name ;
}
public String getCollege(){
回归 大学 ;
}
public void setCollege(String college){
这个。大学 = 大学 ;
}
public static void main(String args []){
构造函数 < Student > 构造函数 ;
尝试 {
constructor = 学生。上课。getConstructor();
学生 学生 = 构造。newInstance();
系统。出。的println(学生。的getName());
系统。出。的println(学生。getCollege());
} catch(InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException |
NoSuchMethodException | SecurityException e){
// TODO自动生成的catch块
e。printStackTrace();
}
}
}
输出:
拉梅什
ABC
在这种方法中,我们将使用 Java中的 Serializable 接口,它是一个标记接口(没有主体的方法),用于将Java 学生 对象 s1 序列 化为文本文件(sample.txt),并使用对象反序列化,我们将阅读并将其分配给新的 Student 对象 s2 。
包 网。javaguides。corejava。哎呀 ;
导入 java。io。可序列化 ;
public class Student 实现 Serializable {
私有 字符串 名称 ;
私人 弦乐 学院 ;
公共 学生(){
super();
}
public Student(String name,String college){
super();
这个。name = name ;
这个。大学 = 大学 ;
}
public String getName(){
返回 名称 ;
}
public void setName(String name){
这个。name = name ;
}
public String getCollege(){
回归 大学 ;
}
public void setCollege(String college){
这个。大学 = 大学 ;
}
}
包 网。javaguides。corejava。哎呀 ;
导入 java。io。FileInputStream ;
导入 java。io。FileOutputStream ;
导入 java。io。ObjectInputStream ;
导入 java。io。ObjectOutputStream ;
公共 课 StudentDemo {
public static void main(String [] args){
//存储Serialized对象的路径
String filePath = “sample.txt” ;
学生 s1 = 新 学生(“Ramesh”,“ABC”);
尝试 {
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
outputStream。writeObject(s1);
outputStream。flush();
outputStream。close();
FileInputStream fileInputStream = new FileInputStream(filePath);
ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);
学生 s2 =(学生)inputStream。readObject();
inputStream。close();
系统。出。的println(S2。的getName());
系统。出。的println(S2。getCollege());
} catch(Exception ee){
ee。printStackTrace();
}
}
}
输出:
拉梅什
ABC
该
clone()
方法用于创建现有对象的副本。
为了实现该
clone()
方法,相应的类应该已经实现了
Cloneable
接口,该接口又是Marker接口。
在这种方法中,我们将为
Student
类“student1”
创建一个对象,
并使用该
clone()
方法将其克隆为“student2”对象:
包 网。javaguides。corejava。哎呀 ;
导入 java。io。可序列化 ;
public class Student 实现 Cloneable {
私有 字符串 名称 ;
私人 弦乐 学院 ;
公共 学生(){
super();
}
public Student(String name,String college){
super();
这个。name = name ;
这个。大学 = 大学 ;
}
public String getName(){
返回 名称 ;
}
public void setName(String name){
这个。name = name ;
}
public String getCollege(){
回归 大学 ;
}
public void setCollege(String college){
这个。大学 = 大学 ;
}
public static void main(String args []){
学生 student1 = 新 学生(“Ramesh”,“ABC”);
尝试 {
学生 2 =(学生)学生1。clone();
系统。出。的println(STUDENT2。的getName());
系统。出。的println(STUDENT2。getCollege());
} catch(CloneNotSupportedException e){
e。printStackTrace();
}
}
}
输出:
拉梅什
ABC
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31557424/viewspace-2221259/,如需转载,请注明出处,否则将追究法律责任。