Java创建类的几种方式

2022-08-07 13:55:27

1. 通过new关键字创建对象,按需调用我们所需的构造函数

Object a=newObject();

2. 通过class类的newInstance()方法

classEmpObj{private String name;publicEmpObj(){}public StringgetName(){return name;}publicvoidsetName(String name){this.name= name;}}
		 String s= EmpObj.class.toString();
        String s1= s.split(" ")[1];


        Class<?> aClass= Class.forName(s1);
         EmpObj emp=(EmpObj) aClass.newInstance();
        System.out.println(emp);

在这里插入图片描述
或者

		EmpObj empObj= EmpObj.class.newInstance();
        System.out.println(empObj);

在这里插入图片描述

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

 		Constructor<EmpObj> constructor= EmpObj.class.getConstructor();
        EmpObj emp= constructor.newInstance();
        System.out.println(emp);

在这里插入图片描述

4. 使用clone()的手段

该方法需要在被克隆类中重新clone()方法,并且实现Cloneable接口,否则将会报错(CloneNotSupportedException)

@Overrideprotected Objectclone()throws CloneNotSupportedException{returnsuper.clone();}
	EmpObj empObj=newEmpObj();
        EmpObj newObj=(EmpObj) empObj.clone();
        System.out.println(newObj);

在这里插入图片描述

5. 使用反序列化

注意:类应该先实现接口(Serializable )

// 序列化写入过程
        ObjectOutputStream outputStream=newObjectOutputStream(newFileOutputStream("obj.ser"));
        EmpObj empObj=newEmpObj();
        outputStream.writeObject(empObj);
        outputStream.close();// 反序列化读取
        ObjectInputStream in=newObjectInputStream(newFileInputStream("obj.ser"));
        EmpObj o=(EmpObj) in.readObject();
        System.out.println(o);

完整代码

package JTang.Test2;import java.io.*;import java.lang.reflect.Constructor;import java.util.EnumMap;publicclassTestCreatObject{publicstaticvoidmain(String[] args)throws Exception{//        String s = EmpObj.class.toString();//        String s1 = s.split(" ")[1];//////        Class<?> aClass = Class.forName(s1);//         EmpObj emp = (EmpObj) aClass.newInstance();//        System.out.println(emp);//        EmpObj empObj = EmpObj.class.newInstance();//        System.out.println(empObj);//        Constructor<EmpObj> constructor = EmpObj.class.getConstructor();//        EmpObj emp = constructor.newInstance();//        System.out.println(emp);//        EmpObj empObj = new EmpObj();//        empObj.setName("zs");//        EmpObj newObj = (EmpObj) empObj.clone();//        System.out.println(newObj);// 序列化写入过程
        ObjectOutputStream outputStream=newObjectOutputStream(newFileOutputStream("obj.ser"));
        EmpObj empObj=newEmpObj();
        outputStream.writeObject(empObj);
        outputStream.close();// 反序列化读取
        ObjectInputStream in=newObjectInputStream(newFileInputStream("obj.ser"));
        EmpObj o=(EmpObj) in.readObject();
        System.out.println(o);}}classEmpObjimplementsCloneable, Serializable{private String name;publicEmpObj(){}public StringgetName(){return name;}publicvoidsetName(String name){this.name= name;}@Overrideprotected Objectclone()throws CloneNotSupportedException{returnsuper.clone();}}
  • 作者:唐 昊
  • 原文链接:https://tanghao.blog.csdn.net/article/details/123394577
    更新时间:2022-08-07 13:55:27