成员方法传参机制(2)

举报
周小末天天开心 发表于 2022/11/19 16:56:04 2022/11/19
【摘要】 成员方法返回类型以及练习

成员方法的返回类型

分析下面的程序,思考成员方法的返回类型是什么

public class MethodExercise02 {
 
    public static void main(String[] args) {
 
        Person p = new Person();
        p.name = "milan";
        p.age = 100;
        //创建tools
        MyTools tools = new MyTools();
        Person p2 = tools.copyPerson(p);
 
        //到此 p 和 p2是Person对象,但是是两个独立的对象,属性相同
        System.out.println("p的属性 age=" + p.age  + " 名字=" + p.name);
        System.out.println("p2的属性 age=" + p2.age  + " 名字=" + p2.name);
        //可以同对象比较看看是否为同一个对象
        System.out.println(p == p2);//false
    }
}
 
class Person {
    String name;
    int age;
}
 
class MyTools {
 
    public Person copyPerson(Person p) {
        //创建一个新的对象
        Person p2 = new Person();
        p2.name = p.name; //把原来对象的名字赋给p2.name
        p2.age = p.age; //把原来对象的年龄赋给p2.age
        return p2;
    }
}

查看输出结果分析:

QQ图片20221017102159.png

可以看出p 和 p2 的属性一样,但是两个对象却并不相等,这是因为它们的地址不同

流程分析:

1)首先创建p对象,给姓名和年龄两个属性赋值。

2)创建tools对象,调用copyPerson方法,将p的属性传给copyPerson方法中的p。

3)在copyPerson方法中创建一个 新的对象p2,将p的属性赋给p2,此时p和p2属性中的值相等。

4)返回p2对象,在main方法中用p2接收。

5)分别输出p和p2中的属性,可以看出p和p2中的属性完全相等,这说名这两个对象都指向了同一个内存空间。

6)再对p和p2对象进行比较,输出了一个false,说明p和p2对象的地址并不相同,因为p = p2是进行的地址比较。

得出结论:成员方法返回类型是引用类,而且只是指向了同一个内存空间,但是两个对象的地址并不相同。

将对象作为参数传递给方法练习

题目要求:
1.定义一个 Circle 类,包含一个double型的radius属性,
   代表圆的半径,findArea()方法返回圆的面积
2.定义一个 PassObject 类,在类中定义一个方法 printAreas(),
   该方法的定义如下:public void printAreas(Circle c , int times)
3.在 printAreas 方法中打印输出1到times之间的每个整数的半径值,以及对应面积。
   例如:times为5时,则输出半径1,2,3,4,5,以及对应的圆面积。
4.在main方法中调用printAreas()方法,调用完毕后输出当前半径值。

代码:

public class Homework12 {
	public static void main(String[] args) {
 
		PassObject po = new PassObject();
		po.printAreas(5);
	}
}
 
class Circle {
	double radius;
 
	public Circle() {
 
	}
 
	public Circle(double radius) {
		this.radius = radius;
	}
 
	public double findArea() {
		return Math.PI * radius * radius;
	}
 
	public void setRadius(double radius) {
		this.radius = radius;
	}
}
 
class PassObject {
 
	public void printAreas(int times) {
		System.out.println("radius\tarea");
		Circle c = new Circle();
 
		for(int i = 1; i <= times; i++) { // 输出1到times之间的每个整数的半径值
			c.setRadius(i); // 修改 c 对象的半径值
			System.out.println((double)i + "\t" + c.findArea());
 
		}
	}
}

输出结果:

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。