3.创建对象

5.0 对象的几种创建方式

对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除,本次介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况。

5.1 显式创建

对象的显式创建方式有 4 种。

5.1.1 使用new关键字创建

这是常用的创建对象的方法,语法格式如下:

类名 对象名 = new 类名();
5.1.2 newlnstance() 方法

在 Java 中,可以使用反射类的 newlnstance() 实例方法来创建对象,代码格式如下:

java.lang.Class Class 类对象名称 = java.lang.Class.forName(要实例化的类全称);
类名 对象名 = (类名)Class类对象名称.newInstance();

调用 java.lang.Class 类中的 forName() 方法时,需要将要实例化的类的全称(比如 com.mxl.package.Student)作为参数传递过去,然后再调用 java.lang.Class 类对象的 newInstance() 方法创建对象。

5.1.3 调用对象的 clone() 方法

在程序开发中,有时可能好会遇到下列情况:已经存在一个对象A,现在需要一个与对象A完全相同的B对象,并对B对象的值进行修改,但是A对象的原有的属性值不能改变。这时,如果使用java提供的对象赋值语句,当修改B对象值后,A对象的值也会被修改。那么应该如何实现创建一个和对象A完全相同的对象B,而且修改对象B时,对象A的属性值不被改变呢?

1

public class Test1 {    
public static void main(String[] args) 
{        
//业务,我创建一个Student  s1   我想用一下s2 其中默认就有s1的值5        
Student s1 = new Student();       
s1.setId(1);        
s1.setName("张三");        //定义s2
Student s2 = s1;     
//打印他们的内存地址 == 相同的内存地址        
System.out.println("s1:"+s1);        
System.out.println("s2:"+s2.getName());        
//改变一下s2的ID值        
s2.setId(2);      
//输出一下s1的id        
System.out.println(s1.getId());       
//总结:因为s2引用的是s1  地址相同,所以s2改变s1跟随改变}

要实现这一功能,可以使用Object类中的clone方法。clone方法可以完成对象的克隆实现Cloneable

package com.qst.test;
public class Student implements Cloneable{
private String name;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(String name) {
this.name = name;
}
@Override   
public String toString() {
return "Student{" 
"name='" + name + '\''+
'}';
}
@Override
protected Student clone() throws CloneNotSupportedException {
Student o = (Student)super.clone();
return o;
}
}

测试方法

package com.qst.test;
import java.sql.SQLOutput
public class Ts01 {
public static void main(String[] args) throws Exception {
Student s1 = new Student("张三");
System.out.println("克隆前:"+s1);
//克隆
Student s2 = s1.clone();
System.out.println("克隆后:"+s2);
//给s2定义新的数据
s2.setName("李四");
System.out.println("克隆更改s2数据:"+s2);
System.out.println("重新打印s1:"+s1);
}
}
5.1.4 调用 java.io.ObjectlnputStream 对象的 readObject() 方法

使用流去创建对象,这里不做具体详解,以上三种常见的创建方式,需要大家牢牢记住,这种方法了解了解即可。

5.2 隐含创建

除了显式创建对象以外,在 Java 程序中还可以隐含地创建对象,例如下面几种情况。

5.2.1 变量定义

String strName = “strValue”,其中的“strValue”就是一个 String 对象,由 Java 虚拟机隐含地创建。

5.2.2 字符串的“+”运算符运算的结果为一个新的 String 对象
String str1 = "Hello";
String str2 = "Java";
String str3 = str1+str2;    // str3引用一个新的String对象
5.2.3 当 Java 虚拟机加载一个类时,会隐含地创建描述这个类的 Class 实例

va 程序中还可以隐含地创建对象,例如下面几种情况。

5.2.1 变量定义

String strName = “strValue”,其中的“strValue”就是一个 String 对象,由 Java 虚拟机隐含地创建。

5.2.2 字符串的“+”运算符运算的结果为一个新的 String 对象
String str1 = "Hello";
String str2 = "Java";
String str3 = str1+str2;    // str3引用一个新的String对象
5.2.3 当 Java 虚拟机加载一个类时,会隐含地创建描述这个类的 Class 实例

类的加载是指把类的 .class 文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值