java 18:给方法传递对象参数,对象数组
2014-07-01 22:53
375 查看
通过我们前边关于传递数组给方法,传递的是数组的引用。同样,我们平时说的对象变量也是引用,所以它与传递数组引用是一样的,方法中改变对象的值在退出方法后依旧有效。
所以,可以看到,在方法中对r进行了修改,出来方法后,该修改依旧是有效的。
2 定义对象数组 array of objects
前边我们在声明一个int型数组时候是这样的, int [ ] a=new int[10],然后可以使用循环对其进行初始化。所以类似的,声明一个对象型数组也是这样 例如我们上面的CirceCount, CircleCount [ ] arrayObject=new CircleCount[10];但是,但是,这里要注意,因为int型是基本数据类型,我们int [ ] a=new int[10] 这样就在堆上分类了十个 int型的空间。但是对象变量是引用,所以我们new
CircleCount[10]只是在堆上分配了10个对象引用,真正的各个独自的对象还没有在内存中分配空间,所以这里如果我们直接使用arrayObject[i].setR()等等,运行时候是会出现 nullPointer的exception的。如图
同样利用一个循环对创建出来的对象数组进行初始化是创建具体的对象;
for(int i=0;i<array.length;i++)
{
arrayObject[i]=new CircleCount(i);
}
这样相当如下图了,注意图中因为count 及getCout是静态方法跟变量,所以不会出现在各个对象各自的空间中,他们会放在一个common的地方,每个对象公用的,这里没有画出来
这样之后我们才可以使用各个对象各自的方法了。
下面看看将数组对象作为参数传入方法
class CircleCount { private double r=1.0; private static int count=0; CircleCount() { CircleCount.count++; } CircleCount(double r) { this.r=r; CircleCount.count++; } public double getR() { return this.r; } public void setR(double r) { this.r=(r>0?r:0); } public static int getCount() { return count; } public double getArea() { return r*r*Math.PI; } } public class TestCount { public static void main(String [] args) { CircleCount C1=new CircleCount(); printAreas(C1,5); System.out.println("finally,r="+C1.getR()+",count="+C1.getCount()); } public static void printAreas(CircleCount C,int times) { while(times>0) { System.out.println("r="+C.getR()+",area="+C.getArea()); C.setR(C.getR()+1); times--; } } }
所以,可以看到,在方法中对r进行了修改,出来方法后,该修改依旧是有效的。
2 定义对象数组 array of objects
前边我们在声明一个int型数组时候是这样的, int [ ] a=new int[10],然后可以使用循环对其进行初始化。所以类似的,声明一个对象型数组也是这样 例如我们上面的CirceCount, CircleCount [ ] arrayObject=new CircleCount[10];但是,但是,这里要注意,因为int型是基本数据类型,我们int [ ] a=new int[10] 这样就在堆上分类了十个 int型的空间。但是对象变量是引用,所以我们new
CircleCount[10]只是在堆上分配了10个对象引用,真正的各个独自的对象还没有在内存中分配空间,所以这里如果我们直接使用arrayObject[i].setR()等等,运行时候是会出现 nullPointer的exception的。如图
同样利用一个循环对创建出来的对象数组进行初始化是创建具体的对象;
for(int i=0;i<array.length;i++)
{
arrayObject[i]=new CircleCount(i);
}
这样相当如下图了,注意图中因为count 及getCout是静态方法跟变量,所以不会出现在各个对象各自的空间中,他们会放在一个common的地方,每个对象公用的,这里没有画出来
这样之后我们才可以使用各个对象各自的方法了。
下面看看将数组对象作为参数传入方法
class CircleCount { private double r=1.0; private static int count=0; CircleCount() { CircleCount.count++; } CircleCount(double r) { this.r=r; CircleCount.count++; } public double getR() { return this.r; } public void setR(double r) { this.r=(r>0?r:0); } public static int getCount() { return count; } public double getArea() { return r*r*Math.PI; } } public class TestCount { public static void main(String [] args) { CircleCount [] C1=new CircleCount[10]; for(int i=0;i<C1.length;i++) { C1[i]=new CircleCount(i); } printObjects(C1); } public static void printObjects(CircleCount [] C) { int total=0; for(int i=0;i<C.length;i++) { System.out.println("r"+i+"="+C[i].getR()+",Area"+i+"="+C[i].getArea()); total+=C[i].getArea(); } System.out.println("total area="+total); } }
相关文章推荐
- java面向对象入门之方法参数的传递
- java 对象作为方法的参数传递
- 在Java中方法参数的传递,对象是传递引用
- java之给方法传递对象参数
- JAVA本地方法调用(3)对象参数传递
- 【java】值传递和引用传递---对象作为方法的参数传入属于哪种传递
- Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
- Java - 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 在Java中方法参数的传递,对象是传递引用
- java面向对象-3-方法参数传递
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)
- Java方法的参数是按值传递的.
- (JAVA)大话类、方法、参数、对象、属性以及面向对象的开发模式(欢迎高手泼墨)
- JAVA方法参数传递技巧[转]
- 如果java中一个方法不知道要传递多少参数也不知道传递过来的是什么类型的数据你会怎么做?
- Flex 对Java端返回Collection的处理方法--java 与flex对象的相互传递
- 通过SOCKET传递序列化的Java对象的方法 序列化 Socket