您的位置 首页 java

只会new Object(),一面都过不了

  • 1.通常创建对象的方式一般是new
  • 2.另外学过反射的都知道反射也可以得到一个对象
  • 3.Clone克隆方式比较少见
  • 4.另外就是反序列化,我们接触的也不多
  • 下面就来看下具体怎么创建吧

    1.new

    这种就不过多解释,直接上代码,略过

     public class Dog {
        public static void main(String[] args) {
            Dog dog = new  Dog ();
        }
    }  

    2.反射

    反射,通俗来讲,如果通过类来生成一个对象(就是说,我们先有模具,然后我们自己做一个东西)

    那么new是什么呢?new虽然也是生成一个对象,但是new事先是没有模具的,我们只告诉jvm,我要创建这么一个对象,jvm你去给我找模具,最后给我一个对象就行了

    下边是代码,可以类比上边的new来理解

     //第一步,我们先拿到模子
    Class<?> dogClass = Class.forName("Dog");
    //第二步,我们通过模子,自己来做一个对象
    Dog dog = (Dog) dogClass.newInstance();  

    3.clone

    克隆的话,就是对象自己的方法,所以我们就要继承Cloneable,来实现这么个方法

     public class Dog implements Cloneable {
        public static void main(String[] args) throws Exception {
            //第一步,就像克隆羊多利一样,我们得现有多利这么个对象
            Dog duoli = new Dog();
            //第二步,通过多利,我们克隆出来一个duoli2的对象
            Object duoli2 = duoli.clone();
        }
    }  

    4.反序列化

    首先说一下序列化,序列化就是将内存中的对象->存到硬盘

    那么反序列化就是,将硬盘中的对象->内存中

    所以可以看出来,反序列化就是一个将对象从硬盘中加载到内存的一个过程,可以说是一个活化过程

    严格来讲,反序列化并不能算是创造了一个对象。

     public class Dog implements Serializable {
        public static void main(String[] args) throws Exception {
            //1.这里为了演示,先将对象序列化到dog.txt的文件里
            Dog dog = new Dog();
             file  file = new File("dog.txt");
            FileOutputStream fos = new FileOutputStream(file);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(dog);
            //2.将文件种的对象加载进内存中
            FileInputStream fis = new FileInputStream(file);
            ObjectInputStream ois = new ObjectInputStream(fis);
            Dog dog2 = (Dog) ois.readObject();
        }
    }  

    总结创建对象的方式

    只会new Object(),一面都过不了

    四种哦,想想还记得吗?

    1.new

    2.反射(newInstance())

    3.clone

    4.反序列化(readObject())

    文章来源:智云一二三科技

    文章标题:只会new Object(),一面都过不了

    文章地址:https://www.zhihuclub.com/179149.shtml

    关于作者: 智云科技

    热门文章

    网站地图