上一篇:“生而有值”—教你使用构造函数 | 带你学《Java面向对象编程》之五
【本节目标】
通过阅读本节,你将了解到使用匿名对象时内存发生的变化,学会直接使用构造函数生成匿名对象便捷地满足一次性调用需求以及各类数据的灵活传递调用。
6.1 匿名对象
经过分析可以发现,利用构造方法可以传递属性数据,于是现在进一步分析对象的产生格式:
定义对象的名称:类名称 对象名称 = null;
实例化对象:对象名称 =new 类名称()。
如果这时只通过实例化对象来进行类的操作也是可以的,而这种形式的对象由于没有名字就称为叫它匿名对象。
范例:观察匿名对象
class Person{ //定义一个类
private String name ; //人员的姓名
private int age ; //人员的年龄
//方法名称与类名称相同,并且无返回值定义
public Person (String n, int a) { //定义有参构造
name = n ; //为类中的属性赋值(初始化)
age = a ; //为类中的属性赋值(初始化)
}
public void tell() {
System.out.println(“姓名:”+ name +”、年龄:”+age) ;
}
public void setName(String n){
name = n ;
}
public void setAge(int a){
age = a ;
}
public String getName(){
return name ;
}
public int getAge (){
return age;
}
}
public class JavaDemo { //主类
public static void main(String args[]) {
new Person(“张三”, 10).tell() ; //进行方法的调用
}
}
图一 执行结果一
此时依然通过了对象进行了类中tell()方法的调用,但是由于此对象没有任何的引用名称,所以该对象使用一次之后就将成为垃圾,而所有的垃圾将被GC进行回收与释放。
现在发现此时程序中已经存在有构造方法了,那么下面通过一个程序来利用构造方法进行一次内存分析。
范例:编写一个分析程序
class Message{
private String title ;
public Message(String t){
title = t ;
}
public String getTitle(){
return title;
}
public void setTitle( String t){ //具有修改功能
title = t ;
}
}
class Person{ //定义一个类
private String name ; //人员的姓名
private int age ; //人员的年龄
public Person (Message msg, int a) { //定义有参构造
name = msg.getTitle() ; //为类中的属性赋值(初始化)
age = a ; //为类中的属性赋值(初始化)
}
public Message getInfo(){
return new Message(name + “:” + age)
}
public void tell() {
System.out.println(“姓名:”+ name +”、年龄:”+age) ;
}
}
public class JavaDemo { //主类
public static void main(String args[]) {
Message msg = new Message(“mldn”)
Person per =new Person(msg , 20);
msg = per.getInfo() ;
System.out.println(msg.getTitle());
}
}
图二 执行结果二
通过此程序进行一个简短的内存分析。
图三 内存分析结果
只要是方法都可以传递任意的数据类型(基本数据类型、引用数据类型)。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学