当前位置: 首页 > news >正文

Java中创建对象的几种方式

背景

面试的时候有些面试官喜欢问这些, 这里简单记录一下.

常见方式

方式1: new XXXX();

  1. 使用new关键字:这是最常见的创建对象的方式,使用new关键字后面跟上类名和参数列表(如果有),可以调用类的构造方法来创建对象。例如:
MyClass obj = new MyClass(); // 使用new关键字创建MyClass类的对象

方式2: 反射获取Class, 调用 newInstance()

  1. 使用反射:Java的反射机制允许在运行时动态地创建对象。通过使用Class类的newInstance()方法或Constructor类的newInstance()方法,可以通过类的全限定名或构造方法来创建对象。例如:
Class<?> cls = MyClass.class;
MyClass obj = (MyClass) cls.newInstance(); // 使用反射创建MyClass类的对象

方式3: 调用 clone() 方法

  1. 使用clone()方法:通过实现Cloneable接口并重写clone()方法,可以创建对象的副本。使用clone()方法可以复制一个已存在对象的完全相同的副本。例如:
MyClass obj1 = new MyClass();
MyClass obj2 = obj1.clone(); // 使用clone()方法创建MyClass类的对象

方式4: 调用工厂的 create() 方法

  1. 使用工厂方法:工厂方法是一种创建对象的设计模式,它将对象的创建委托给一个工厂类,通过调用工厂类中的静态方法来创建对象。例如:
MyClass obj = MyClassFactory.create(); // 使用工厂方法创建MyClass类的对象

方式5: 序列化与反序列化

  1. 使用序列化和反序列化:通过实现Serializable接口,可以将对象转化为字节序列并存储在文件或网络中,然后再将其反序列化为对象。使用Java的序列化和反序列化机制可以创建对象的副本。例如:
MyClass obj1 = new MyClass();
// 将对象序列化到文件
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("obj.dat"));
out.writeObject(obj1);
out.close();// 从文件反序列化为对象
ObjectInputStream in = new ObjectInputStream(new FileInputStream("obj.dat"));
MyClass obj2 = (MyClass) in.readObject();
in.close();

总结

这些是常见的创建对象的方式,每种方式都有其适用的场景。您可以根据具体的需求选择合适的方式来创建对象。

http://www.lryc.cn/news/111379.html

相关文章:

  • Python(三)
  • android 如何分析应用的内存(十五)——Visual Studio Code 调试Android应用
  • 宁波银行最新内推码 MK4913
  • postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用
  • 【Python从小白到高手】---函数基础
  • postman----传参格式(json格式、表单格式)
  • Uni-Dock:GPU 分子对接使用教程
  • 【Python】数据分析+数据挖掘——掌握Python和Pandas中的单元格替换操作
  • Godot 4 源码分析 - 增加格式化字符串功能
  • C#中XML文档与Treeview控件操作的数据同步
  • 【Java Web基础】mvn命令、Maven的安装与配置
  • 加强Web应用程序安全:防止SQL注入
  • 【云原生】k8s中Contrainer 生命周期回调/策略/指针学习
  • electron+vue3全家桶+vite项目搭建【25】使用electron-updater自动更新应用
  • SQL 表别名 和 列别名
  • 面试之快速学习c++11-函数模版的默认模版参数,可变模版,tuple
  • Visual Studio Code 常见的配置、常用好用插件以及【vsCode 开发相应项目推荐安装的插件】
  • 源码编译安装gcc
  • pc文件上传
  • Vue3_对响应式对象解构赋值之后失去响应性
  • 3d 地球与卫星绕地飞行
  • Opencv-C++笔记 (16) : 几何变换 (图像的翻转(镜像),平移,旋转,仿射,透视变换)
  • 第十次CCF计算机软件能力认证
  • 【敏捷开发】测试驱动开发(TDD)
  • 骑砍二 ATC MOD 使用教程与应用案例解析
  • python和c语言哪个好上手,c语言和python语言哪个难
  • 智能优化算法 | Matlab实现鲸鱼优化算法(Whale Optimization Algorithm)(内含完整源码)
  • Android随笔-VPN判断
  • 【黑马头条之kafka及异步通知文章上下架】
  • Modelsim打开后报unable to checkout a viewer license