java在创建对象时必须_Java中5种创建对象的方式

以下是一些在Java中创建对象的方法:

1、 使用new关键字

使用new关键字是创建对象的最基本方法。这是在java中创建对象的最常见方法。几乎99%的对象都是这样创建的。通过使用这个方法,我们可以调用我们想要调用的任何构造函数(无参数或参数化构造函数)。

//Java program to illustrate creation of Object//using new keyword

public classNewKeywordExample

{

String name= "GeeksForGeeks";public static voidmain(String[] args)

{//Here we are creating Object of//NewKeywordExample using new keyword

NewKeywordExample obj = newNewKeywordExample();

System.out.println(obj.name);

}

}

输出:

GeeksForGeeks

2、使用New Instance

如果我们知道类的名称并且如果它有一个公共的默认构造函数,我们就可以通过Class.forName来创建类的对象。forName实际上在Java中加载类,但不创建任何对象。要创建类的对象,必须使用类的newInstance()方法。

//Java program to illustrate creation of Object//using new Instance

public classNewInstanceExample

{

String name= "GeeksForGeeks";public static voidmain(String[] args)

{try{

Class cls= Class.forName("NewInstanceExample");

NewInstanceExample obj=(NewInstanceExample) cls.newInstance();

System.out.println(obj.name);

}catch(ClassNotFoundException e)

{

e.printStackTrace();

}catch(InstantiationException e)

{

e.printStackTrace();

}catch(IllegalAccessException e)

{

e.printStackTrace();

}

}

}

输出:

GeeksForGeeks

3、使用clone()方法

每当对任何对象调用clone()方法时,JVM实际上会创建一个新对象,并将前一个对象的所有内容复制到该对象中。使用clone方法创建对象不会调用任何构造函数。

要使用clone()方法,类要实现Cloneable接口并且实现clone()方法。

//Java program to illustrate creation of Object//using clone() method

public class CloneExample implementsCloneable

{

@Overrideprotected Object clone() throwsCloneNotSupportedException

{return super.clone();

}

String name= "GeeksForGeeks";public static voidmain(String[] args)

{

CloneExample obj1= newCloneExample();try{

CloneExample obj2=(CloneExample) obj1.clone();

System.out.println(obj2.name);

}catch(CloneNotSupportedException e)

{

e.printStackTrace();

}

}

}

输出:

GeeksForGeeks

注:

这里我们创建的是现有对象的克隆,而不是任何新对象。

类需要实现可克隆接口,否则将抛出CloneNotSupportedException.

4、使用反序列化

每当我们序列化并反序列化一个对象时,JVM会创建一个单独的对象。在反序列化,JVM不使用任何构造函数来创建对象。

要反序列化对象,我们需要在类中实现可序列化接口。

序列化对象:

importjava.io.Serializable;importjava.time.LocalDate;/***@author:crelle

* @className:Person

*@version:1.0.0

* @date:2020/8/15

* @description:XX

**/

public class Person implementsSerializable {private static final Long serialVersionUID = 237898764368L;public enumSex {

MALE, FEMALE

}privateString name;privateLocalDate birthday;privateSex gender;privateString emailAddress;private intage;publicPerson() {}publicPerson(String name) {this.name =name;

}public voidprintPerson() {

System.out.println(toString());

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicLocalDate getBirthday() {returnbirthday;

}public voidsetBirthday(LocalDate birthday) {this.birthday =birthday;

}publicSex getGender() {returngender;

}public voidsetGender(Sex gender) {this.gender =gender;

}publicString getEmailAddress() {returnemailAddress;

}public voidsetEmailAddress(String emailAddress) {this.emailAddress =emailAddress;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@OverridepublicString toString() {return "Person{" +

"name='" + name + '\'' +

", birthday=" + birthday +

", gender=" + gender +

", emailAddress='" + emailAddress + '\'' +

", age=" + age +

'}';

}

}

/**

* @author:crelle

* @className:DeserializationExample

* @version:1.0.0

* @date:2020/9/18

* @description:XX

**/

// Java program to illustrate Serializing

// an Object.

import crelle.test.java.auxiliary.beans.Person;

import java.io.*;

class SerializationExample

{

public static void main(String[] args)

{

try

{

Person d = new Person("crelle");

FileOutputStream f = new FileOutputStream("person.txt");

ObjectOutputStream oos = new ObjectOutputStream(f);

oos.writeObject(d);

oos.close();

f.close();

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

反序列化对象:

/***@author:crelle

* @className:DeserializationExample

*@version:1.0.0

* @date:2020/9/18

* @description:XX

**/

//Java program to illustrate creation of Object//using Deserialization.

importcrelle.test.java.auxiliary.beans.Person;import java.io.*;public classDeserializationExample

{public static voidmain(String[] args)

{try{

Person person;

FileInputStream f= new FileInputStream("person.txt");

ObjectInputStream oos= newObjectInputStream(f);

person=(Person) oos.readObject();

System.out.println(person.getName());

}catch(Exception e)

{

e.printStackTrace();

}

}

}

输出:

crelle

5、使用Constructor类的newInstance()方法:

这类似于类的newInstance()方法。java.lang.reflect.Constructor类中有一个newInstance()方法,可用于创建对象。通过使用此newInstance()方法,它也可以调用参数化构造函数和私有构造函数。

//Java program to illustrate creation of Object//using newInstance() method of Constructor class

import java.lang.reflect.*;public classReflectionExample

{privateString name;

ReflectionExample()

{

}public voidsetName(String name)

{this.name =name;

}public static voidmain(String[] args)

{try{

Constructorconstructor= ReflectionExample.class.getDeclaredConstructor();

ReflectionExample r=constructor.newInstance();

r.setName("GeeksForGeeks");

System.out.println(r.name);

}catch(Exception e)

{

e.printStackTrace();

}

}

}

输出:

GeeksForGeeks

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java类的定义的实例_Java中类的定义和初始化示例详解

类的定义类的定义格式//创建类class classname{field ;//成员属性/字段method;//方法}class为定义类的关键字,classname为类的名字,{ }为类的主体;例如:class person{public string name ; //成员属性publi…

java 多线程池_Java ThreadPoolExecutor线程池 同时执行50个线程

最近项目上有个需求,需要从FTP服务器中下载大批量的数据文件,然后解析该数据文件进行入库,数据库为oracle,最后在通过web工程,以报表和图表的形式进行展现。这些批量的数据文件为纯文本文件,每天产生数据文…

java and dsl_Groovy语法糖以及DSL

前言Why初次接触到Groovy是在实习中接触到一个 纯Groovy写的项目,当时看了下这不就是没有分号的Java么,而且也是有年纪的语言了,并不想投入时间学习。后来工作中越来越多的看到Groovy的身影,Gradle,Spring Cloud Contr…

java序列化的方法_【Java常见序列化与反序列方法总结】

人和电脑在很多方面都是十分相似的,大脑可以看成电脑主机,五官/身体等表面器官就是显示器、鼠标等外设。这篇文章就是想把计算机跟人做类比YY一下序列化和反序列化的机制、用途。如果你是初学者,心里肯定会问究竟什么是序列化/反序列化&#…

python的编码模块char_关于sqlmap当中tamper脚本编码绕过原理的一些总结(学习python没多久有些地方肯定理解有些小问题)...

sqlmap中tamper脚本分析编写置十对一些编码实现的脚本,很多sqlmap里面需要引用的无法实现,所以有一部分例如keywords就只写写了几个引用了一下,其实这里很多脚本运用是可以绕过安全狗的。本人也是刚开始学习python没多久,有一些错…

java的多态怎么理解_JAVA多态的理解

面向对象的三大特性:封装、继承、多态,其中最难理解的就是多态以下是网上某大神给的一个例子:1.继承关系class A {public String show(D obj){return ("A and D");}public String show(A obj){return ("A and A");}}clas…

java class isassignablefrom_Java之——Class的isAssignableFrom方法

转载请注明出处 https://blog.csdn.net/l1028386804/article/details/80508540Class的isAssignableFrom方法定义如下public native boolean isAssignableFrom(Class ? cls);由方法签名可见是一个本地方法 即C代码编写的。以下是JDK中的注释Determines if the class or interfa…

java中堆栈的基本操作_玩儿转队列和栈的基本操作及其应用:Java 版

队列的基本操作队列入队出队实现队列是种先进先出的数据结构。队列的基本操作主要是入队和出队。数据从队尾进入队列,从队首出队列。下面来写一个简单的队列:public class MyQueue {private List data;private int pointer;public MyQueue() {data new ArrayList&l…

java规定日期格式输出_Java格式化输出日期百分比时间等

Java格式化输出Java的格式化输出等同于String.Format,与C有很大的相似,比如System.out.printf(“%8.2f”, x);在printf中,可以使用多个参数,例如:System.out.printf(“Hello, %s. Next year, you’ll be %d”, name, a…

java界面编辑教程_java程序设计基础教程第六章图形用户界面编辑.docx

java程序设计基础教程第六章图形用户界面编辑.docx还剩27页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,很抱歉,此页已超出免费预览范围啦!如果喜欢就下载吧,价低环保!内容要点…

c盘java文件误删_java获取C盘下的隐藏目录文件名称

题记—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。网易云课堂在Java中, File类用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传…

对java这门课程的认识_关于java课程的总结

前言本次博客主要内容为此次三次作业的总结,整门java课程学习的总结,以及在此次java课程中的收获,和对课程的意见。作业过程总结第一次作业主要考察的是对程序的可扩展性,实现开闭原则非常重要,因为程序随着时间&#…

linux php和java环境变量配置_Linux下配置Java环境变量

一般来说,我们都会把Java安装到 /usr/local 目录 或者 /opt 目录下。这里假设java安装包已解压在了 /opt下,具体目录为:/opt/java8/java1.8.0_45目录(注意:如果是生产环境中,一定要root用户来安装配置)。下面我们来配置…

java多线程多态_Java学习之多线程

多线程:(一)进程与线程进程特点并发与并行的区别:多线程编程的好处:(二)多线程的建立1,通过继承Thread类,代码如下:class MyThread extendsThread {private static int K 10;//类共享变量private int M10;…

java 执行存储过程报语法错误_为什么我在批处理从Java上执行PostgreSQL上的存储过程时收到错误通知“结果不合理”?...

我在数据库中有这个过程:CREATE OR REPLACE FUNCTION replacePageRelevance(id INT, value REAL) RETURNS VOID AS $$BEGININSERT INTO pageRelevance VALUES (id,value);EXCEPTION WHEN unique_violation THENUPDATE pageRelevance SET relevance value WHERE pag…

python staticmethod有什么意义_关于静态方法:python中的@staticmethod有什么意义?

为了更好地理解静态方法在Python中的工作方式,我开发了这个简短的测试/示例代码。class TestClass:def __init__(self, size):self.size sizedef instance(self):print("regular instance method - with self")staticmethoddef static():print("sta…

java fx border_JavaFx UI控件与代码间的绑定方法

JavaFx初探一,UI控件的使用,具体内容如下方式一:使用纯代码直接new view控件,这样就不涉及到与fxml文件之间的交互了方式二:使用fxml编写界面文件,用可视化工具scene builder 来构建交互界面。分两种方式绑…

java mysql ssl警告_连接到MySQL数据库时有关SSL连接的警告

用于初始化与MySQL服务器的连接的默认值在最近已更改,并且(通过快速查看堆栈溢出时最流行的问题和答案)新值引起了很多混乱。更糟糕的是,标准建议似乎是完全禁用SSL,这在制造过程中有点麻烦。现在,如果您的连接确实没有暴露给网络…

如何将php改成mp4,PHP 将视频转成 MP4 并获取视频预览图(用到ffmpeg)

搜索热词下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。flv_convert_get_thumb(input.avi,output.jpg,output.ogm);// code provided and updated by steve of PHPsnaps ! thanks// accepts:// 1: the input v…

php无嵌套遍历多维数组,不递归怎么遍历多维数组(维数不定)

不递归如何遍历多维数组(维数不定)现有数组$tree array (array (ID > 1,PARENT > 0,NAME > 祖父,CHILD > array (array (ID > 3,PARENT > 1,NAME > 叔伯),array (ID > 4,PARENT > 1,NAME > 父亲,CHILD > array (array (ID > 5,PARENT >…