内容来自孙卫琴的《Java面向对象编程》,做了小的修改
Java中有四种显示地创建对象的方式
1. 使用new语句创建
2. 运用反射手段,调用Class或者Constructor类的newInstance()方法
3. 调用对象的clone()方法
4. 运用反序列化手段
以下例子使用前三种方式创建,Customer是我们的测试类,clone方法调用了Object类的clone方法
package com.perficient.basic;
public class Customer implements Cloneable{
private String name;
private int age;
public Customer() {
this("unknown", 0);
System.out.println("Call the defalut constructor");
}
public Customer(String name, int age) {
this.name = name;
this.age = age;
System.out.println("Call the second constructor");
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
public boolean equals(Object o){
boolean result=false;
if (this == o) result = true;
if (!(o instanceof Customer)) result = false;
final Customer other = (Customer)o;
if (this.name.equals(other.name)&& (this.age == other.age)){
result = true;
} else {
result = false;
}
return result;
}
public String toString(){
return "Name=" + this.name + ",age=" + this.age;
}
}
以下是用来测试的main方法:
public static void main(String[] args) throws Exception{
// 运用反射创建对象
Class<?> objClass = Class.forName("com.perficient.basic.Customer");
Customer c1 =(Customer)objClass.newInstance(); // 会调用类的默认构造方法
System.out.println("c1:" + c1.toString());
System.out.println("+++++++++++++++++++++++");
// 使用New语句
Customer c2 = new Customer("James", 20);
System.out.println("c2:" + c2.toString());
System.out.println("+++++++++++++++++++++++");
// 用clone方法创建
Customer c3 = (Customer) c2.clone();
System.out.println("c2==c3: " + (c2 == c3));
System.out.println("c2.equals(c3): " + (c2.equals(c3)));
System.out.println("c3:" + c3.toString());
System.out.println("+++++++++++++++++++++++");
}
输出结果:
Call the second constructor
Call the defalut constructor
c1:Name=unknown,age=0
+++++++++++++++++++++++
Call the second constructor
c2:Name=James,age=20
+++++++++++++++++++++++
c2==c3: false
c2.equals(c3): true
c3:Name=James,age=20
总结
1.使用new语句以及newInstance()方法创建对象时,都会执行测试类的构造方法.
2.使用clone方法的时候不会调用构造方法
3.使用clone方法会创建一个复制的对象,这个对象与原来的对象具有不同的内存地址.所以使用==判断的时候,返回false
分享到:
相关推荐
在Java中,对象的大小通常可以通过以下几种方式来计算: 1. **使用Java API**:Java 9及以上版本引入了一个名为`sun.misc.Unsafe`的API,虽然它不是公开的,但可以通过反射访问。`Unsafe`类提供了一个`...
OLE 对象是一种特殊类型的对象,可以在 PowerPoint 幻灯片中嵌入其他应用程序的文档,例如 Word 文档、Excel 工作簿、PDF 文件等。通过插入 OLE 对象,用户可以在 PowerPoint 幻灯片中直接打开或编辑其他应用程序的...
在本实验中,我们主要探讨的是Java编程中的类定义、对象创建以及面向对象的基本概念。实验涉及了两个关键部分:创建一个名为`ComplexNumber`的复数类和编写一个主类来实例化并操作复数对象。 首先,我们来看`...
Java3D 是一种由 Sun Microsystems 开发的高级三维图形编程接口,它建立在 Java 语言之上,为开发者提供了在 Java 应用程序中创建、操纵和显示三维对象的能力。Java3D API 将底层的图形渲染技术,如 OpenGL 和 ...
- 封装是面向对象的三大特性之一,指隐藏对象的属性和实现细节,仅对外提供公共访问方式。 - 通过构造函数和成员变量、方法的修饰符的使用,可以实现类的封装性。 - 理解类的封装性有助于设计出结构良好且易于...
在这个主题下,我们将探讨三种Java实现邮件发送的方式,以及如何通过提供的代码和参考资料进行实践。 首先,让我们了解一下基本概念。邮件发送主要涉及到SMTP(Simple Mail Transfer Protocol)和POP3(Post Office...
在这个过程中,理解并熟练运用SuperMap Objects的Java API至关重要,包括数据读取、对象创建、属性设置、空间运算等功能。此外,对三维可视化和地理空间分析的基础知识也有一定的要求。 总的来说,"SuperMap ...
本次实验不仅加深了对JAVA中对象创建、使用以及接口实现的理解,还介绍了GUI设计中布局管理器的运用,特别是CardLayout的灵活切换机制,为参与者提供了全面的JAVA编程实践机会。通过实际编程,参与者能够亲身体验从...
Java是一种广泛使用的编程语言,以其强大的面向对象特性而闻名。面向对象编程(Object-...本PPT“第三章 Java的面向对象特性”将深入解析这些概念,提供实例和示例代码,帮助你更好地理解和应用Java的面向对象编程。
本文通过对Java虚拟机内存区域的分析,详细介绍了对象创建的过程,包括定义对象变量、为对象分配内存以及初始化对象等关键步骤。此外,还探讨了对象在内存中的具体布局以及初始化过程中的一些细节。希望本文能够帮助...
Java面向对象应用程序开发是软件开发领域中的核心主题,尤其对于初学者和专业开发者而言,理解并掌握这一技术至关重要。Java语言以其强大的面向对象特性、跨平台兼容性以及丰富的类库,成为了开发各种类型应用程序的...
总之,面向对象编程是一种强大的思想,通过封装、继承和多态三大特征,允许开发者设计和构建出更加清晰、模块化和易于维护的程序。Java作为该范式的典型代表,在实际的软件开发中被广泛应用,特别是在大型和复杂系统...
在主类中,我们创建了`Student`和`CollegeStudent`对象,进行各种操作,如显示对象信息、修改属性值、比较对象等。 7. **静态域(Static Fields)**:静态域属于类而不是类的实例,因此所有实例共享同一静态域的值...
如`displayDetails()`方法,用于显示对象的详细信息。 5. 构造器(Constructor): 构造器是一种特殊的方法,用于初始化新创建的对象。当使用`new`关键字创建对象时,会自动调用构造器。在上面的例子中,`MyClass...
【Java面向对象之继承练习题】的解析与详解: 1. **类的继承**:在Java中,继承是面向对象编程的重要特性,允许一个类(子类)继承另一个类(父类)的属性和方法。例如,我们可以创建一个`Music`类作为其他音乐相关...
在`Exercise7_1`中,我们创建了两个`Rectangle`对象,并通过`toString()`方法显示了它们的属性。而在`Exercise7_7`中,我们创建了两个`Time`对象,一个表示当前时间,另一个指定特定的毫秒数,然后通过`toString()`...
这个技术允许程序员利用面向对象的编程方式来处理三维空间中的几何形状、光照、纹理等元素,使得在Java应用程序中实现三维可视化变得更加简单。 Java3D的简介: Java3D是Sun Microsystems开发的一个开源库,它是...
在本例中,我们使用了POI的XSSFWorkbook来创建.xlsx格式的Excel文件,这是一种基于XML的Office Open XML格式,它支持更多的功能和更小的文件大小。 这个`simple-excel`压缩包文件可能包含了实现上述功能的源代码,...
在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...