Java创建对象方式初谈

Java创建对象的四种方式

1.通过new创建对象

通过new的方式创建对象是Java中最常见的方式,也是我们最开始学习创建对象的方式,但是我们通过new创建对象都会增加整体的耦合度,我们在今后的编程生活中都应该注意耦合度带来的影响,所以降低耦合度是我们必须考虑的。

话不多说,我们还是上代码吧。

a.首先创建一个类。

package com.tzz.test;

public class Hello {
    public void sayWorld(){
        System.out.println("你好,世界!");
    }
}

b.通过new创建类的对象并调用它的方法

package com.tzz.test;

public class NewHello {
    public static void main(String[] args) {
        Hello hello = new Hello();
        hello.sayWorld();
    }
}

2.通过反射的机制创建对象

在Java的学习过程中,反射是我们必不可少的的知识点,我们目前的话就通过反射来创建对象,当然我们这块主要是讲解关于反射来创建对象的知识点,因为反射是Java中一个重要知识点,目前没有更多涉及反射其他的知识点。

a.通过Class类的newInstance方法来进行创建

此时普通类Hello保持不变,创建类的代码如下

package com.tzz.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class NewHello {
    public static void main(String[] args) {
        try {
            Class newHello = Class.forName("com.tzz.test.Hello");
            Hello hello = (Heloo)newHello.newInstance();
            heloo.sayWorld();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (IllegalAccessException e){
            e.printStackTrace();
       }catch (InstantiationException e){
            e.printStackTrace();
        }
    }
}

b.通过使用Constructor类的newInstance方法来进行创建

代码如下:

package com.tzz.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class NewHello {
    public static void main(String[] args) {
        try {
            Class hello = Class.forName("com.tzz.test.Hello");
            Constructor constructor = heloo.getConstructor();
            Heloo hello1 = (Hello)constructor.newInstance();
            heloo1.sayWorld();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

3.通过对象的clone方法进行创建对象

package com.tzz.test;

public class CloneHello implements Cloneable{
    public void sayhello(){
        System.out.println("你好,世界!");
    }

    public static void main(String[] args) {
        CloneHello cloneHello = new CloneHello();
        try {
            CloneHello cloneHello1 = (CloneHello)cloneHello.clone();
            cloneHello1.sayhello();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

4.通过反序列化的方式创建对象

我们对于序列化和反序列化的知识可能掌握相对于比较少,但是对于整个Java知识中,序列化知识占据了很大的重要性,我们这块主要只是简单学习一下创建对象,对于更多的序列化和反序列化的知识在以后的学习更详细的讲解。

为什么创建对象会通过反序列化来创建呢?大家都知道我们计算机空间分为了栈、堆等,我们对象都处于堆空间中,然而我们Java特色的垃圾回收机制(GC)回收就包括了堆空间,一旦我们对象进行回收后就会被销毁,我们原本的对象就不复存在,如果此时我们还需要此对象,我们有什么办法呢?有的同学会说,大不了我重新创建一次,但是我们重新创建的对象不再是我们之前对象,此时我们通过反序类可以得到之前对象,。这个为什么呢?我们大概来说一下序列化,序列化是对象存储到我们内存空间,通过输入输出流来进行保存。我们接下来就看一下相关代码

package com.tzz.test;
import java.io.*;

public class SerializeTest {
    Hello hello = new Hello();

    //准备一个文件进行存储
    File file = new File("hello.obj");

    FileOutputStream fos;

    {
        try {
            fos = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    ObjectOutputStream oos;

    {
        try {
            oos = new ObjectOutputStream(fos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    FileInputStream fis;

    {
        try {
            fis = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    ObjectInputStream ois;

    {
        try {
            ois = new ObjectInputStream(fis);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
      
}

以上就是我对于Java创建对象的理解,如果有不足,请各位同学理解并指出,谢谢。因为是第一次写博客,存在很多不足,如果有大佬有建议,欢迎指出。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值