首页 / 知识
在Java中创建对象的所有不同方法是什么?
2023-04-17 07:42:00

What are all the different ways to create an object in Java?前几天与同事谈过此事。 有明显的使用构造函数,但其他方法是什么? 在java中创建对象有四种不同的方法:
A.使用
B.使用
C.使用
D.使用
你可以从这里阅读它们。 有各种方法:
在Java语言中,创建对象的唯一方法是通过调用其构造函数,无论是显式还是隐式。使用反射导致对构造函数方法的调用,反序列化使用反射来调用构造函数,工厂方法将调用包装到构造函数以抽象实际构造,而克隆同样是包装构造函数调用。
是的,您可以使用反射创建对象。例如, 在Java中创建对象有五种不同的方法,
1.使用
2.使用
它也可以写成
3.使用
4.使用
5.使用反序列化→没有构造函数调用
前三个方法 所有上述方法都具有与它们相关联的不同字节码,阅读用Java创建对象的不同方式,以示例和更详细的描述,例如,所有这些方法的字节码转换。 然而,人们可以争辩说创建数组或字符串对象也是创建对象的一种方式,但这些事情仅对某些类更具体,并由JVM直接处理,而我们可以使用这5种方式创建任何类的对象。 克隆和反序列化。 此外,您可以将数据反序列化为对象。这不是通过类构造函数! 更新:感谢汤姆在你的评论中指出这一点!迈克尔也进行了实验。
请参阅汤姆的回答,以便对所有病例进行全面治疗;-) 你也可以使用
如果您是java新手,应该注意这一点,每个对象都继承自Object protected native clone clone()抛出CloneNotSupportedException; 有一种对象,它不能由普通的实例创建机制(调用构造函数)构造:数组。数组是用。创建的
要么
正如Sean在评论中所说,这在语法上类似于构造函数调用,并且在内部它只是分配和零初始化(或使用显式内容初始化,在第二种情况下)一个内存块,带有一些标头来指示类型和长度。 将参数传递给varargs-method时,也会隐式创建(并填充)数组。 第四种方式
当然,克隆和反序列化也适用于此。 标准API中有许多方法可以创建数组,但实际上它们都使用这些方法中的一种(或多种)。 其他方式,如果我们是详尽无遗的。
通过调用对象类的构造函数来总结答案 - 一种主要方式。 更新:另一个答案列出了两种不涉及使用构造函数的方法 - 解除分类和克隆。 反思也将为你完成这项工作。
是另一种创建类的新实例的方法。在这种情况下,您还需要处理可能抛出的异常。 反射:
在Java中创建对象有五种不同的方法: 1.使用`new`关键字: 这是在Java中创建对象的最常用方法。几乎99%的对象都是以这种方式创建的。
2.使用工厂方法:
例:
3.使用克隆概念:
通过使用
4.使用`Class.forName()`: 如果我们知道类的名称并且它是否有公共默认构造函数,我们可以用这种方式创建一个对象。
例:
5.使用对象反序列化: 对象反序列化只不过是从序列化形式创建对象。
您还可以克隆现有对象(如果它实现Cloneable)。
方法1 使用新关键字。这是在java中创建对象的最常用方法。几乎99%的对象都是以这种方式创建的。
方法2 使用Class.forName()。 Class.forName()为您提供了类对象,它对于反射非常有用。此对象具有的方法由Java定义,而不是由编写类的程序员定义。每个班级都是一样的。调用newInstance()会给你一个该类的实例(即callingClass.forName("ExampleClass")。newInstance()它相当于调用new ExampleClass()),你可以在其上调用类定义的方法,访问可见字段等。
Class.forName()将始终使用调用者的ClassLoader,而ClassLoader.loadClass()可以指定不同的ClassLoader。我相信Class.forName也会初始化加载的类,而ClassLoader.loadClass()方法不会立即执行此操作(直到第一次使用它才会初始化)。 另一个必读:
Java:线程状态简介与示例 方法3 使用clone()。 clone()可用于创建现有对象的副本。
方法4 使用newInstance()方法
方法5 使用对象反序列化。对象反序列化只不过是从序列化形式创建对象。
从API用户的角度来看,构造函数的另一种替代方法是静态工厂方法(如BigInteger.valueOf()),但对于API作者(技术上"真实"),仍然使用构造函数创建对象。 取决于你的意思,但其他一些是:
还有ClassLoader.loadClass(s??tring),但这并不经常使用。 如果你想成为一名律师,那么由于数组的.length属性,数组在技术上是对象。所以初始化一个数组会创建一个对象。 我们可以用5种方式创建对象: 我们也可以这种方式创建对象: -
没人讨论过。 |
最新内容
相关内容
linux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你linux无效对象的命令?
linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,linux疑问:普通用户的ifconfig命令无法执行,如何解决?建议这个操linux高亮关键字命令?
linux高亮关键字命令?,名称,工作,系统,环境,管理,第一,观察,数据,术语,颜色,linux系统中的,vi文字编辑器下能输入中文吗_linux文本编辑命令vi1linux命令输入方法?
linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,linux终端输入~怎么弄中间在电脑上打开需要的Word文件进入。进入到文Python中什么是反射?使用方法有哪
Python中什么是反射?使用方法有哪些?,信息,培训,状态,术语,检测,反射,属性,对象,字符串,方法,反射这个术语在很多语言中都存在,并且存在大量的Python中有哪些方法可以解压文件?
Python中有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大Python列表类型list合并有哪些方法
Python列表类型list合并有哪些方法?,培训,方法,列表,可能会,数组,切片,下文,字符串,数据类型,请看,在Python编程语言中,有各种数据类型,比如字符零基础学习Python的四种方法
零基础学习Python的四种方法,基础,代码,基础知识,培训,发展,时间,知识,书籍,初学者,练习,近年来,随着移动互联网的发展,对Python人才的需求越来pythonPandas Series对象有哪些属
pythonPandas Series对象有哪些属性?,工具,数据,数字,分析,培训,属性,数据类型,数组,对象,索引,想必大家都知道pandas,它是基于Numpy的一种工具python是面向对象还是面向过程的
python是面向对象还是面向过程的,数据,代码,基础,形态,培训,术语,设计,对象,过程,语言,Python虽然是解释型语言,但从设计之初就已经是一门面向如何在Python中定义类方法和修改类
如何在Python中定义类方法和修改类属性?,代码,方法,培训,对象,实例,定义,结果,示例,赋值,属性,Python中的类还可定义使用@classmethod修饰的类提高Python 效率的 5 种高级方法
提高Python 效率的 5 种高级方法,代码,数字,函数,有限,设备,项目,工具,培训,列表,内存,任何编程语言的高级特征通常都是通过大量的使用经验才