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创建对象的理解,如果有不足,请各位同学理解并指出,谢谢。因为是第一次写博客,存在很多不足,如果有大佬有建议,欢迎指出。

Java创建对象方式初谈相关推荐

  1. Java创建对象的方式——反序列化创建对象

    目录 Java创建对象的几种方式 反序列化创建对象 思路 代码示例 Java创建对象的几种方式 Java创建对象的方式共有4种.分别为: 1.通过new语句实例化一个对象. 2.通过反射机制创建对象. ...

  2. java创建对象实例的四种方式

    java创建对象的方法常用的有四种:使用new关键字.利用java的反射机制.实现Cloneable接口使用克隆方法以及利用java序列化和反序列化实现创建对象. 不说那么多,直接上代码.本次主要讲前 ...

  3. java创建对象的五种方式

    java创建对象的五种方式 一.使用new关键字 二.使用clone方法 三.使用反序列化 四.使用反射 五.使用Unsafe 一.使用new关键字 如 User user=new User(); 执 ...

  4. Java 创建对象的 6 种方式,总有一种适合你

    创建对象的 6 种方式 假设有个女朋友类: @Data @NoArgsConstructor @AllArgsConstructor class GirlFriend {private String ...

  5. Java面向对象相对于面向过程的优势?以及java创建对象的4中方式?

    文章目录 面向对象相对于面向过程的优势? java创建对象的4中方式? 面向对象相对于面向过程的优势? 答: 面向过程: 面向过程是一种自顶向下的编程. 面向过程优点:性能比面向对象高,因为类调用时需 ...

  6. spring IOC创建对象方式

    spring IOC创建对象方式 通过无参构造来创建 验证方法: 创建实体类: public class User {private String name;public User() {System ...

  7. java创建对象的过程_Java创建对象的过程

    Java创建对象的过程 Java是一门面向对象的编程语言,在Java程序运行过程中每时每刻都有对象被创建出来.在语言层面上,创建对象通常仅仅是一个new关键字而已,而在虚拟机中,对象的创建又是怎样一个 ...

  8. 一起学习C语言:初谈指针(三)

    上一篇<一起学习C语言:初谈指针(二)> 中,我们了解了进程中的内存区域,以及动态管理内存空间方式.本篇文章中,我们分析更多的动态分配函数,并通过示例来了解不同场景中的动态内存的分配.使用 ...

  9. 一起学习C语言:初谈指针(二)

    上一篇<一起学习C语言:初谈指针(一)> 中,我们了解了指针变量的声明和初始化方式,以及指针变量的引用赋值方式.本篇文章中,我们初步分析不同的内存空间 ,并通过示例来了解动态内存的分配.使 ...

最新文章

  1. VS2010 编译 QT4.8.7 x64
  2. NetDevOps — netmiko
  3. 【AI不惑境】网络宽度对模型性能有什么影响?
  4. Java使用javax.mail.jar发送邮件并同意发送附件
  5. Python相关的考试和认证
  6. 知道python_看完这篇文章,你就知道Python是什么?
  7. 操作系统android9.0,三星公布了升级Android9.0操作系统的时间表
  8. 【模型理解】KANO模型
  9. Cox回归和HR值理解要点难点,实例讲解
  10. 华为荣耀magic是鸿蒙系统,华为的magic系统是独立的系统吗?
  11. 举个栗子!Tableau技巧(22):如何导入其它地图源
  12. 几种混沌系统混沌模型
  13. 五子棋(含较高级的人机对战)
  14. 动态壁纸android,Android 十大最新版本动态壁纸大盘点
  15. enc28j60 linux 驱动_linux enc28j60网卡驱动移植(硬件spi和模拟spi)
  16. Java 数字金额,字符串格式化
  17. 基于人工智能的地球物理参数反演范式理论及判定条件
  18. 计算机软件著作权的权利归属如何确定
  19. 企业的应用架构演变之路
  20. Scrum:产品负责人责任

热门文章

  1. 前端经典面经--助你金九银十面试无烦恼
  2. 盘点老外对女人的爆笑称呼
  3. vue中利用particlesJS实现鼠标动画粒子连线效果
  4. VMVare中Ubuntu报错:Drag and drop is not supported
  5. codeup墓地目录(算法笔记习题刷题笔记)
  6. Cloud-Platform 开源项目环境搭建及运行
  7. 梅宫主:穷人的命富人的命
  8. 解决linux网速慢问题
  9. Window10 系统休眠或睡眠状态恢复-占用磁盘空间 100% 问题以及解决方法
  10. 怎么给图片添加水印?教你一个图片加水印小妙招