成员方法传参机制(2)
成员方法的返回类型
分析下面的程序,思考成员方法的返回类型是什么
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;
}
}
查看输出结果分析:
可以看出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());
}
}
}
输出结果:
- 点赞
- 收藏
- 关注作者
评论(0)