精华内容
下载资源
问答
  •  总结下来有以下4种创建对象的方法:使用 new 关键字调...Java 是面向对象的语言,不可避免的,“对象”这个概念是 Java 语言的核心部分,这里来简单讨论一下在 Java 中创建一般对象的方法。总结下来有以下4种创建...

    核心提示:Java 是面向对象的语言,不可避免的,“对象”这个概念是 Java 语言的核心部分,这里来简单讨论一下在 Java 中创建一般对象的方法。  总结下来有以下4种创建对象的方法:使用 new 关键字调...

    Java 是面向对象的语言,不可避免的,“对象”这个概念是 Java 语言的核心部分,这里来简单讨论一下在 Java 中创建一般对象的方法。

    总结下来有以下4种创建对象的方法:

    使用 new 关键字调用对象的构造器;

    使用 Java 反射的 newInstance() 方法;

    使用 Object 类的 clone() 方法;

    使用对象流 ObjectInputStream 的 readObject() 方法读取序列化对象;

    1.      使用 new 关键字

    最常见的 Java 对象的构造方法,通过调用类提供的构造器创建对象。

    2.      使用 newInstance() 方法

    Java 反射中有一个 newInstance() 方法,可以创建对象,步骤如下:

    获取要创建的类的 Class 对象。

    如果只需要调用这个类的访问权限为 public 无参构造器,直接使用 Class 类的实例方法 newInstance()。

    获取 Class 对象的构造器对象,通过调用 Class 类的实例方法 getDeclaredConstractors() 来获取构造器对象的数组。(获取所有构造器,无视访问权限的限制,数组顺序按照代码中的顺序决定)

    如果调用的构造器是 private 的,需要调用 Constractor 类的父类 AccessibleObject 类的实例方法 setAccessible(true) 来打破访问限制。

    使用 Constractor 类的实例方法 newInstance()。

    示例代码:

    cdec0645add3fc3c328197dda5c76203.pngMethodNewInstance

    备注:

    获取 Class 对象的方法有3个,此处不多赘述。

    获取 Constractor 对象的方法有4个,此处不多赘述。

    3.      使用 clone() 方法

    Object 类是所有类的直接或间接父类,Object 类中提供了 实例方法 native(),在给定对象的基础上,创建一个完全相同的对象。步骤如下:

    想要使用 clone() 方法创建对象的类,实现 Cloneable 接口。

    在类的内部,重写 Object 类的 clone() 方法。

    示例代码:

    cdec0645add3fc3c328197dda5c76203.pngObjectToCreate

    备注:

    没有实现 Cloneable 接口,会抛出 CloneNotSupportedException 异常。

    Object 类提供的 clone() 方法,访问权限是 protected,所以如果不重写 clone() 方法,是没有权限调用的。

    Object 类的 clone() 方法,是 native 方法。

    4.      使用反序列化的 readObject() 方法

    这个方法一共分两步:

    将对象序列化,存储到一个文件中。

    从文件中反序列化,得到类对象。

    序列化:

    想要序列化对象的类,实现Serializable接口。

    使用文件输出流FileOutputStream创建存储序列化之后对象的文件。

    使用对象输出流ObjectOutputStream的实例方法writeObject(obj)。

    判断类中是否存在,名为writeReplace(),返回类型为Object的方法,若有,写入这个方法的返回值;否则,写入obj对象。

    反序列化:

    使用文件输入流FileInputStream找到存储序列化对象的文件。

    使用对象输入流ObjectInputStream的实例方法readObject()。

    判断类中是否存在,名为readResolve(),返回类型为Object的方法,若有读取这个对象;否则,反序列化文件中的对象流。

    示例代码:

    cdec0645add3fc3c328197dda5c76203.pngObjectToCreate

    cdec0645add3fc3c328197dda5c76203.pngMethodSerialable

    cdec0645add3fc3c328197dda5c76203.pngMethodAntiSerialable

    备注:

    在类中,writeReplace()和readResoleve()是两个非常特殊的方法,其特征签名需要严格限制:方法名限定,参数个数限定为0,返回类型必须是Object,不能为Object的子类,但是可以抛出不同的异常。访问修饰符没有限制,但一般推荐为private,防止误操作。其特殊的地方还在于将其设为private方法,没有其他方法调用的情况下,编译器不会发出警告。

    5.总结

    Java创建对象的4种方法:第一种是最常用的;第二种方法深入至源码会指向sun.reflect.ConstructorAccessor类,JDK中似乎没有提供继续深入下去的源码,但是既然是调用构造器的方法,那么与第一种方法一样,创建的对象是存储在堆(Heap)中的;第三种方法是要实现特定的接口才可以使用,而且是通过调用native方法,也就是非Java代码(很大可能是C)实现的,也就是说,这个方法产生的对象,可能不会被GC回收(个人的想法),因为GC是用来回收Java代码创造的对象,所以要慎用;第四种方法在序列化的时候,需要实现特定的接口,而在反序列化时就不关心这一点了,它是将对象暂存于其他媒介中,在反序列化的时候将对象存于堆中。

    关注微信号:javalearns   随时随地学Java

    或扫一扫

    随时随地学Java

    展开全文
  • 1、使用new关键字2、利用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法3、构造函数的newInstance()方法4对象的反序列化5、对象的clone()方法下面详细看看这5方法的...

    1、使用new关键字

    2、利用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法

    3、构造函数的newInstance()方法

    4、对象的反序列化

    5、对象的clone()方法

    下面详细看看这5种方法的简单实现:

    1、使用new关键字

    public classTest {privateString name;publicTest() {

    }publicTest(String name) {this.name =name;

    }publicString getName() {returnname;

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

    }public static voidmain(String[] args) {

    Test t1= newTest();

    Test t2= new Test("张三");

    }

    }

    2、利用反射

    首先通过Class.forName()动态加载类的class对象,然后通过newInstance()方法获得Test对象,这里使用的是上面的Test对象

    public static void main(String[] args) throwsException{

    String className="com.qml.test";

    Class clasz=Class.forName(className);

    Test t=(Test)clasz.newInstance();

    }

    3、构造函数对象的newInstance()方法

    类Constructor也有newInstance方法,这一点和Class有点像。从它的名字可以看出它与Class的不同,Class是通过类来创建对象,而Constructor则是通过构造器。依然使用第一个例子中的Test类。

    public static void main(String[] args) throwsException {

    Constructorconstructor;try{

    constructor= Test.class.getConstructor();

    Test t=constructor.newInstance();

    }catch (InstantiationException |IllegalAccessException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException e) {

    e.printStackTrace();

    }

    }

    4、对象反序列化

    继承Serializable接口

    public class Test implementsSerializable{privateString name;publicTest() {

    }publicTest(String name) {this.name =name;

    }publicString getName() {returnname;

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

    }public static void main(String[] args) throwsException {

    String filePath= "sample.txt";

    Test t1= new Test("张三");try{

    FileOutputStream fileOutputStream=

    newFileOutputStream(filePath);

    ObjectOutputStream outputStream=

    newObjectOutputStream(fileOutputStream);

    outputStream.writeObject(t1);

    outputStream.flush();

    outputStream.close();

    FileInputStream fileInputStream=

    newFileInputStream(filePath);

    ObjectInputStream inputStream=

    newObjectInputStream(fileInputStream);

    Test t2=(Test) inputStream.readObject();

    inputStream.close();

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

    }catch(Exception ee) {

    ee.printStackTrace();

    }

    }

    }

    5、对象的clone()方法

    public static void main(String[] args) throwsException {

    Test t1= new Test("张三");

    Test t2=(Test) t1.clone();

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

    }

    展开全文
  • JAVA创建对象有哪几种方式 ???

    千次阅读 2021-02-26 10:32:58
    展开全部JAVA创建对象的四种方式32313133353236313431303231363533e59b9ee7ad9431333363373662:有4种显式地创建对象的方式:1.用new语句创建对象,这是最常用的创建对象的方式。2.运用反射手段,调用Java.lang....

    展开全部

    JAVA创建对象的四种方式32313133353236313431303231363533e59b9ee7ad9431333363373662:

    有4种显式地创建对象的方式:

    1.用new语句创建对象,这是最常用的创建对象的方式。

    2.运用反射手段,调用Java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。

    3.调用对象的clone()方法。

    4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法.

    下面演示了用前面3种方式创建对象的过程。

    7d34a303ddaa00aa190735fa56df8795.png

    以上程序的打印结果如下:

    call second constructor

    call default constructor

    c1: name=unknown,age=0

    call second constructor

    c2: name=Tom,age=20

    c2==c3 : false

    c2.equals(c3) : true

    c3: name=Tom,age=20

    从以上打印结果看出,用new语句或Class对象的newInstance()方法创建Customer对象时,都会执行Customer类的构造方法,而用对象的clone()方法创建Customer对象时,不会执行Customer类的构造方法。(区别)

    除了以上4种显式地创建对象的方式以外,在程序中还可以隐含地创建对象,包括以下几种情况:

    1.对于java命令中的每个命令行参数,Java虚拟机都会创建相应的String对象,并把它们组织到一个String数组中,再把该数组作为参数传给程序入口main(String args[])方法。

    2.程序代码中的String类型的直接数对应一个String对象,例如:

    083b852eb3944d4cb7dd9ec7bf8ed119.png

    执行完以上程序,内存中实际上只有两个String对象,一个是直接数,由Java虚拟机隐含地创建,还有一个通过new语句显式地创建。

    3.字符串操作符“+”的运算结果为一个新的String对象。例如:

    3cc922ad818a3fad12513af51b7432bc.png

    4.当Java虚拟机加载一个类时,会隐含地创建描述这个类的Class实例.

    展开全文
  • Java创建对象数组

    千次阅读 2021-02-12 09:46:26
    这就是你得到NullPointerException的原因你需要单独创建对象并分配引用。在Java中创建数组有3个步骤 -声明 - 在此步骤中,我们指定数据类型和要创建的数组的维度。但请记住,我们还没有提到尺寸的大小。他们是空的。...

    是的,它只创建引用,将其设置为默认值null。这就是你得到NullPointerException的原因你需要单独创建对象并分配引用。在Java中创建数组有3个步骤 -

    声明 - 在此步骤中,我们指定数据类型和要创建的数组的维度。但请记住,我们还没有提到尺寸的大小。他们是空的。

    实例化 - 在此步骤中,我们使用new关键字创建数组或为数组分配内存。在这一步中,我们提到了阵列尺寸的大小。

    初始化 - 数组始终初始化为数据类型的默认值。但我们可以进行自己的初始化。

    在Java中声明数组

    这是我们在Java中声明一维数组的方法 -

    int[] array;

    int array[];

    Oracle建议您使用以前的语法来声明数组。以下是法律声明的其他一些例子 -

    // One Dimensional Arrays

    int[] intArray;             // Good

    double[] doubleArray;

    // One Dimensional Arrays

    byte byteArray[];           // Ugly!

    long longArray[];

    // Two Dimensional Arrays

    int[][] int2DArray;         // Good

    double[][] double2DArray;

    // Two Dimensional Arrays

    byte[] byte2DArray[];       // Ugly

    long[] long2DArray[];

    这些是非法声明的一些例子 -

    int[5] intArray;       // Don't mention size!

    double{} doubleArray;  // Square Brackets please!

    实例化

    这就是我们“实例化”或为数组分配内存的方法 -

    int[] array = new int[5];

    当JVM遇到new关键字时,它理解它必须为某些东西分配内存。通过指定int[5],我们意味着我们需要一个int大小为5 的s 数组。因此,JVM创建内存并将新分配的内存的引用分配给类型为“引用”的类型int[]

    初始化

    使用循环 - 使用for循环初始化数组元素是获取数组的最常用方法。如果您要自己分配默认值,则无需运行for循环,因为JVM会为您执行此操作。

    一体..! - 我们可以一次性声明,实例化和初始化我们的数组。这是语法 -

    int[] arr = {1, 2, 3, 4, 5};

    在这里,我们没有提到大小,因为JVM可以看到我们给出了5个值。

    因此,在我们实例化之前,引用保持为null。我希望我的回答能帮助你......!:)

    展开全文
  • 详解Java对象创建

    千次阅读 2021-02-26 12:03:30
    1. 前言在《还不清楚怎样面向对象?》和《面向对象再探究》...这篇文章就主要来谈谈创建对象时的具体操作。2. 引入例子下面是一个Dog类:/*** @author Xing Xiaoguan (xingrenguanxue)*/public class Dog {private ...
  • Java对类创建对象的三方法

    千次阅读 2021-01-09 09:29:50
    文章目录在本类中进行测试新建测试类在java文件中加入测试类 在本类中进行测试 Teacher.java public class Teacher {//public主类,主类名需要和文件名相同 //成员变量 private String name; private String ...
  • Java创建对象数组

    千次阅读 2021-01-16 16:52:24
    1.对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组。...以创建Student类的对象数组为例 Student[] stu = new Student[20]; //创建20个学生对象 对学生类的每一个数组元素进行
  • java中怎么创建对象数组

    千次阅读 2021-02-12 15:42:42
    展开全部首先我62616964757a686964616fe78988e69d8331333365646235们需要创建一个class:classStudent{Stringname;doublescore;Stringnum;Student(Stringn,doubles,Stringm){name=n;s=score;num=m;}...
  • java反射之根据全类名创建对象

    千次阅读 2021-02-26 08:43:52
    创建对象package 中介者设计模式;import java.util.Date;public class CreateObject {public static void main(String[] args) {Object obj = createInstance("java.util.Date");System.out.println(obj);Date d ....
  • java对象赋值的方式

    千次阅读 2021-02-12 09:20:54
    了解对对象赋值的方式2.了解静态方法和实例方法3.了解成员变量的作用域4.了解自定义构造方法和构造方法技术:1.对对象赋值的方式:a.对于public修饰的属性使用对象直接使用b.对于private修饰的属性不能直接使用只能...
  • 通常,它包含不完整的抽象方法(Java8中引入的默认方法和静态方法除外)。仍然,如果您尝试实例化一个接口,则会生成一个编译时错误,提示“ MyInterface是抽象的;无法实例化”。在下面的示例中,我们使用名称为...
  • 今天来盘点一下除了使用 "new" 关键字创建对象,还有什么方法可以创建Java对象呢?因为是创建对象,所以...第一种方式就是使用Class.forName()创建对象ClassA object = (ClassA) Class.forName("com.demo.ClassA").ne...
  • java语言之创建多个对象

    千次阅读 2021-03-15 15:42:50
    创建多个对象Dog d1 = new Dog();Dog d2 = new Dog();对象名变量名(d1 ,d2)放在 栈内存 中 对象的实体放在堆内存中2. 对象对象之间的区别Dog d1 = new Dog();Dog d2 = new Dog();每生成一个对象就会在堆内存中...
  • 我创建了以下接口和类Java泛型使用反射从方法(创建对象)获取Typepublic interface BuilderType {}public class MyObject implements BuilderType {private int i;private MyObject() {}public int...
  • 4、使用线程池创建(使用java.util.concurrent.Executor接口) 其中第一、二中最为简单,我已经在前面线程部分详细解释过,不懂得可以去看看:多线程。 今天我们聊聊其他两和他们的区别。 1、使用Callable接口和...
  • 用户定义的类阵列列表示例import java.util.*;public class UserDefinedClassInArrayList {public static void main(String[] args) {//Creating user defined class objectsStudent s1=new Student(1,"AAA",13);...
  • Java 创建对象时先调用构造函数

    千次阅读 2021-01-25 11:05:10
    如果类中有成员变量并对成员变量有初始化操作,那么创建构造函数时会先调用构造函数,然后按顺序对成员变量赋值,例如如下代码创建Main对象时 会首先跳到public Main()那一行,然后跳转到 int price = 80;然后按...
  • 【单选题】糖酵解过程中那个过程发生了脱氢过程: 【单选题】油菜花冠类型为 【填空题(主观)】Java中 [填空(1)] 是创建对象的模板。 【单选题】下面关键字中哪一个是不可用来控制对类成员的访问()。 【判断题】1. ...
  • Java中一个对象创建过程 step1:检查该类是否被加载 当JVM执行一条new指令时,首先要去常量池中查找该类的符号引用。 当在常量池中查找到该类的符号引用,就说明该类已经被类加载(方法区保存了该类的类加载信息)...
  • Java中类与对象的介绍

    千次阅读 2021-02-28 18:06:50
    面向相对的思想最常见的有两编程思想:面向对象和面向过程。其中,面向过程的思想是指在需要实现一个功能时,每一个具体的步骤都需要程序员亲力亲为,对处理每一个细节做好详细处理;面向对象的思想是指当需要一个...
  • java 在类中创建自己的对象

    千次阅读 2021-02-25 19:27:21
    }}我想知道的是,A是一个类,而main方法是A类中的一个方法,为什么可以在main方法里创建一个自己的对象?那是不是也可以使用aa.main(参数)的形式来调用它?请高人解释。public static void main(String[] ...
  • 而在Java语言中,最常见的创建对象的方法是通过对类构造器的调用,除此之外,其实还有下面几可以创建对象的方法。1)通过反射机制来创建对象;classPerson{String name="Jack";publicPerson(){System.out.println(...
  • 可以通过包含键值对的配置文件创建对象。读取配置文件中的键值对,程序可以用键值对创建一个“字符串-对象”的对象池,然后通过字符串访问这些对象。1、两生成方式使用Class对象的newInstance()方法制作该Class...
  • 创建指定日期java Date对象

    千次阅读 2021-03-10 05:24:23
    import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class Demo {public static void main(String[] args) throws ParseException {//...
  • java中怎么创建一个Request对象

    千次阅读 2021-02-25 19:34:07
    展开全部packagewzh.Http;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.URL;importjava.net.URLConnection;importjava....
  • for循环创建对象

    千次阅读 2021-03-04 02:33:51
    有时候奇怪的发现往list添加数据的时候,一直被最后一个元素覆盖,首先 ,我们得明白原理:在new 一个对象的时候,对象的ID是唯一确定的;将对象add入list中时,放入list中的其实是对象的引用 ;而每次循环只是简单 ...
  • Java如何创建泛型Map对象

    千次阅读 2021-03-13 15:33:31
    在这个Java泛型示例中,您将看到如何创建泛型Map对象创建通用Map意味着您可以定义键的类型和存储在中的对象的值的类型Map。通用Map的声明和实例化仅与其他类型的集合不同,例如ListandSet是我们定义了两类型。键...
  • 展开全部import java.util.Random;public class StudentTest {private int number;//学生学号private String name;//学生名称32313133353236313431303231363533e78988e69d8331333363353738private int age;//学生...
  • Java创建并写文件的5种方式

    千次阅读 2021-02-12 14:14:21
    下面笔者就帮大家总结一下java创建文件的五方法。在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java创建文件的五方法。Files.newBufferedWriterFiles....
  • Java创建String的两种方式与常量池

    千次阅读 2021-01-18 15:12:18
    String的两种创建方式 1. 常量式创建: String str1 = "abcd"; 当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,302,871
精华内容 921,148
关键字:

java创建对象的4种方式

java 订阅