java创建对象的几种常用方法

java几种常见的创建对象的方法:

1、使用new关键字创建对象

2、利用java的反射机制,通过java.lang.Class或者java.lang.reflect.Constructor创建对象

3、实现Cloneable接口,然后重写Object.clone()方法创建对象

4、实现序列化serialiable接口,通过反序列化,ObjectInputStream的readObject()方法创建对象

5、String str="abc" 直接由jvm创建 或者使用 字符串操作符"+"  String str1 = "a"+"bc"由jvm创建

创建对象类TestBean.java

package test.createObj;

import java.io.Serializable;

public class TestBean implements Cloneable,Serializable{
    /**
     *
     */
    private static final long serialVersionUID = -6896355094290356656L;
    private String id;
    private String name;

    public TestBean(String id, String name) {
        this.id = id;
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getId() {
        return id;
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    public String toString() {
        return super.toString()+"  "+id+"  "+name;
    }
}

创建测试类CreateObjTest.java

package test.createObj;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;

public class CreateObjTest {

    /**
     * @param args
     */
    @SuppressWarnings("rawtypes")
    public static void main(String[] args) {
        //一、new关键词新建一个对象
        TestBean testbean1 = new TestBean("1","张三哈哈");

        //二、反射机制
        TestBean testbean2 = null;
        try {
            Class<?> clazz = Class.forName("test.createObj.TestBean");
            //当类中含有参数的构造函数 而没有无参构造函数时 会报java.lang.InstantiationException异常
            //则类里需要添加无参构造函数
//            testbean2 = (TestBean) clazz.newInstance();

            //或者用反射获取类的有参构造函数   通过有参构造函数实例化对象
            Class[] paramTypes = {String.class,String.class};
            Constructor constor = clazz.getConstructor(paramTypes);
            testbean2 = (TestBean) constor.newInstance("2","李四");
        } catch (Exception e) {
            e.printStackTrace();
        }

        //三、克隆   但类必须要实现Cloneable接口     并且要在类里重写clone方法
        //jdl1.6中文api是这样说的:
        //如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。
        //按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。
        //请参阅 Object.clone(),以获得有关重写此方法的详细信息。
        //注意,此接口不 包含 clone 方法。因此,因为某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。
        TestBean testbean3 = null;
        try {
            testbean3 = (TestBean) testbean1.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }

        //四、反序列化  但类要实现序列化接口
        ObjectOutputStream objOutStream = null;
        ObjectInputStream objInStream = null;
        TestBean testbean4 = null;
        try {
            File file = new File("C:\\testbean.txt");
            if(!file.exists()){
                file.createNewFile();
            }
//            objOutStream = new ObjectOutputStream(new FileOutputStream(file));
//            objOutStream.writeObject(testbean1);
            objInStream = new ObjectInputStream(new FileInputStream(file));
            testbean4 = (TestBean) objInStream.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(objOutStream!=null){
                try {
                    objOutStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(objInStream!=null){
                try {
                    objInStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println("testbean1:"+testbean1);
        System.out.println("testbean2:"+testbean2);
        System.out.println("testbean3:"+testbean3);
        System.out.println("testbean4:"+testbean4);
    }

}

运行结果:

时间: 2024-08-06 23:14:13

java创建对象的几种常用方法的相关文章

Java创建对象的4种方式?

 [Java创建对象的4种方式?] 1)通过new语句实例化一个对象 2)通过反射机制创建对象 3)通过clone()方法创建一个对象  (复制) 4)通过反序列化方式创建对象

Java创建对象的几种方法

有时候,也可能碰到这样面试题,如: Java创建对象有哪几种方法? 除了new之外,java创建对象还有哪几种方式? 本文结合例子,给出几种Java创建对象的方法,Here we go~~~~ 使用new创建 这是最常用的一种.如: Book book = new Book(); 示例如下: package test; import java.io.Serializable; import java.util.List; /** * @author wangmengjun * */ public

java创建对象的四种方式

java程序中对象的创建有四种方式: ● 调用new语句创建对象,最常见的一种 ● 运用反射手段创建对象,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法 ● 调用对象的clone()方法 ● 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法. 下面分别实例讲述 一.new语句创建 ?// 使用java语言的关键字 new 创建对象,初始化对象数

JAVA创建对象的五种方式

最近在学习JAVA知识,通过网上翻看资料,发现原先有的理解不深的东西,渐渐明白了些.对象的使用,在编写软件过程中是必不可少的,不知道大家有没和我一样,几乎都是使用new来创建.那么,问题来了,JAVA有几种创建对象 的方式呢? 使用new关键字创建. 使用Class的newInstance()方法,比如Person类,创建对象可以使用,但是下面的两种方式不能调用private构造函数,且构造对象的类中必须包含无参构造函数,否则会报错. public class person { /** * */

Java创建对象的几种方式

(1) 用new语句创建对象,这是最常见的创建对象的方法. (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法. (3) 调用对象的clone()方法. (4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法. (1)和(2)都会明确的显式的调用构造函数 :(3)是在内存上对已有对象的影印,所以不会调用构造函数 :(4)是从文件中

java 创建对象的两种方式

一: Object object = new Object(); 二: public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException { //可以通过映射的方式来获取 DemoTest2 myobject = (DemoTest2)Class.forName("DemoTest2").newInstance(); m

第一弹:Java 中创建对象的4种方式

Java 是面向对象的语言,不可避免的,"对象"这个概念是 Java 语言的核心部分,这里来简单讨论一下在 Java 中创建一般对象的方法. 总结下来有以下4种创建对象的方法: 使用 new 关键字调用对象的构造器: 使用 Java 反射的 newInstance() 方法: 使用 Object 类的 clone() 方法: 使用对象流 ObjectInputStream 的 readObject() 方法读取序列化对象: 1.      使用 new 关键字 最常见的 Java 对象

Java中创建对象的几种方式

Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Class类的newInstance方法.使用Constructor类的newInstance方法.使用Clone方法.使用反序列化. 使用new关键字:这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的够赞函数(无参的和有参的).比如:Student student = ne

Java中创建对象的五种方式

我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone方法去创建对象,通过序列化和反序列化的方式去创建对象.这里就总结一下创建对象的几种方式,来好好学习一下java创建对象的方式. 一.使用new关键字 这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的够赞函数(无参的和有参的). 比如:Student student = n