在Java中创建对象的不同方法是什么?

在这篇快速文章中,我们将讨论在Java中创建对象的五种不同方法。我们知道,类是创建对象的模板或蓝图。让我们列出在Java中创建对象的不同方法。

用Java创建对象的5种不同方法

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”);
学生 学生三 =  新的 学生(“普拉莫德”“个人所得税”);

 

2.使用类的newInstance()方法

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(学生);

 

3.使用构造函数类的newInstance()方法

Class类的newInstance() 方法类似,  类中有一个 方法   ,我们可以用它来创建对象。我们还可以使用此方法调用参数化构造函数和私有构造函数  。让我们通过使用类的 方法   创建Student类对象来   演示这种方法  :newInstance()java.lang.reflect.ConstructornewInstance()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

 

4.使用对象反序列化

在这种方法中,我们将使用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

 

5.使用对象克隆 - clone()方法

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值