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

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

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

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

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

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

  1. public class Customer implements Cloneable{
  2. private String name;
  3. private int age;
  4. public Customer(){
  5. this("unknown",0);
  6. System.out.println("call default constructor");
  7. }
  8. public Customer(String name,int age){
  9. this.name=name;
  10. this.age=age;
  11. System.out.println("call second constructor");
  12. }
  13. public Object clone()throws CloneNotSupportedException{
  14. return super.clone();
  15. }
  16. public boolean equals(Object o){
  17. if(this==o)return true;
  18. if(! (o instanceof Customer)) return false;
  19. final Customer other=(Customer)o;
  20. if(this.name.equals(other.name) && this.age==other.age)
  21. return true;
  22. else
  23. return false;
  24. }
  25. public String toString(){
  26. return "name="+name+",age="+age;
  27. }
  28. public static void main(String args[])throws Exception{
  29. //运用反射手段创建Customer对象
  30. Class objClass=Class.forName("Customer");
  31. Customer c1=(Customer)objClass.newInstance(); //会调用Customer类的默认构造方法
  32. System.out.println("c1: "+c1); //打印name=unknown,age=0
  33. //用new语句创建Customer对象
  34. Customer c2=new Customer("Tom",20);
  35. System.out.println("c2: "+c2); //打印name=tom,age=20
  36. //运用克隆手段创建Customer对象
  37. Customer c3=(Customer)c2.clone(); //不会调用Customer类的构造方法
  38. System.out.println("c2==c3 : "+(c2==c3)); //打印false
  39. System.out.println("c2.equals(c3) : "+c2.equals(c3)); //打印true
  40. System.out.println("c3: "+c3); //打印name=tom,age=20
  41. }
  42. }

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

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对象,例如:

  1. String s1="Hello";
  2. String s2="Hello"; //s2和s1引用同一个String对象
  3. String s3=new String("Hello");
  4. System.out.println(s1==s2); //打印true
  5. System.out.println(s1==s3); //打印false

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

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

  1. String s1="H";
  2. String s2=" ello";
  3. String s3=s1+s2; //s3引用一个新的String对象
  4. System.out.println(s3=="Hello"); //打印false
  5. System.out.println(s3.equals("Hello")); //打印true

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

 
1

java中创建对象的方法的更多相关文章

  1. 【转】java中创建对象的方法

    有4种显式地创建对象的方式: 1.用); System.out.println("call default constructor"); } public Customer(Str ...

  2. Java中创建对象的五种方式

    我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...

  3. java中需要关注的3大方面内容/Java中创建对象的几种方法:

    1)垃圾回收 2)内存管理 3)性能优化 Java中创建对象的几种方法: 1)使用new关键字,创建相应的对象 2)通过Class下面的new Instance创建相应的对象 3)使用I/O流读取相应 ...

  4. Java中创建对象的5种方法

    将会列举5种方法去创建 Java 对象,以及他们如何与构造函数交互,并且会有介绍如何去使用这些方法的示例. 作为一个 Java 开发人员,我们每天都会创建大量的 Java 对象,但是我们通常会使用依赖 ...

  5. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  6. 详解Java中的clone方法

    详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...

  7. Java学习笔记十七:Java中static使用方法

    Java中static使用方法 一:Java中的static使用之静态变量: 我们都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的 ...

  8. 【转】Java中创建对象的5种方式

    Java中创建对象的5种方式   作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有 ...

  9. Java中创建对象的内存图

    所有人都知道面向对象思想,Java中的对象的创建在内存中是如何创建的,传智播客的视频看了一遍,把一些讲解的比较清晰的内容记录下来,方便记忆的更加深刻,Java中创建对象的过程,首先要理解JVM中栈.堆 ...

随机推荐

  1. week1-绪论

    一 .作业题目 仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子.分母均为整数且分母不为零的分数). 有理数基本运算: 构造有理数T,元素e1,e2分别被赋以分子.分母值 ...

  2. [转]iis 重新安装后 重新注册asp.net

    iis 重新安装后 重新注册asp.net 服务器IIS问题: 卸载并重新安装了IIS.... 解决方法:原因是IIS重装后要重新安装一下.NET Framework. 开始-->运行--> ...

  3. win10初期版本administrator的限制

    win10初期版本administrator的限制,很多功能administrator用户无法使用如应用商店等等,在目前的新版本,差不多都可以使用了.

  4. PyQt5系列教程(三)用py2exe进行程序打包

    软硬件环境 Windows 10 Python 3.4.2 PyQt5 Py2exe 前言 在我们开发了完整的PyQt5项目后,一般都会将其打包成exe文件,方便其他人使用.今天我们就用Py2exe这 ...

  5. centos7.3下apache搭建django[未成功]

    1 apache肯定已经按照完毕了, 如果没有  yum install httpd yum install mod_wsgi 安装完成之后,mod_wsgi.so会在Apache的modules目录 ...

  6. 83. Remove Duplicates from Sorted List + 82. Remove Duplicates from Sorted List II

    ▶ 删除单链表中的重复元素. ▶ 83. 把重复元素删得只剩一个,如 1 → 1 → 2 → 3 → 3 → 3 → 4 → 5 → 5 变成 1 → 2 → 3 → 4 → 5.注意要点:第一个元素 ...

  7. Redhat 7.2 编译安装PostgreSQL 10

    1.环境说明 CentOS7.2 postgresql10.4 2.下载 postgresql的官方地址 https://www.postgresql.org/ftp/source/ 在下载列表中根据 ...

  8. eclipse中debug改变变量的值

    step1:debug断点到变量的下一行,在debug试图的右上角variables中看到该变量的值: step2:鼠标右键点击str出现下图,选择Change Value... step3:点击Ch ...

  9. LevelDB Version

    [LevelDB Version] Version 保存了当前磁盘以及内存中所有的文件信息,一般只有一个Version叫做"current" version(当前版本).Level ...

  10. python之private variable

    [python之private variable] Since there is a valid use-case for class-private members (namely to avoid ...