各位大虾,各位前辈,各位学长学姐:
我刚学JAVA时间不长 ,由于上课时间紧,课程开的很快,所以带参的方法听的有点糊涂 尤其是引用类型,对象类型,对象数组类型。快把我整崩溃了·!~!
HTML的课程又快开了~!我那个急啊!
所以,想问下各位高手,带参的方法怎么学能好理解,好掌握点。
另: 本人比较笨!!!
我刚学JAVA时间不长 ,由于上课时间紧,课程开的很快,所以带参的方法听的有点糊涂 尤其是引用类型,对象类型,对象数组类型。快把我整崩溃了·!~!
HTML的课程又快开了~!我那个急啊!
所以,想问下各位高手,带参的方法怎么学能好理解,好掌握点。
另: 本人比较笨!!!
public int add(a, b) {
int c= a+b;
return c;
}
public int add() {
int c = 1+2;
return c;
}
第二个有用吗,,,
int add(int a, int b)
方法的参数是a和b,由于是基础类型,这里是传值的,也就是在运行程序时,a和b的值会拷贝一个直接传入此方法,然后在方法内进行操作;出了方法体后,a、b还是原来的值,不管方法内做了什么改变;void replace(String str, char a, char b)
str是一个String类型的对象,这里按引用传入,也就是一个指针副本。如果在方法内,修改str的某个字符的值,那会对出方法后的str仍然有效; 楼主需要慢慢体会体会。
先来回顾一下程序设计语言中有关参数传递的计算机科学术语。“传值调用”(call by value)表示方法得到的是调用者提供的值。与之相对,“传引用调用”(call by reference)表示方法得到的是调用者提供的变量地址。这样,方法可以修改引用调用所传递变量的值,但不能修改传值调用送来的变量。不论是在Java中还是在其他各种程序设计语言中,术语“...调用”(call by ...)都是用来描述方法参数行为的标准计算机科学术语。
Java语言总是使用传值调用。这也意味着方法得到的只是所有参数值的拷贝。因此,方法不能修改传递给它的任何参数变量的内容。
例如:下面的调用:
double percent = 10;
harry.raiseSalay(percent);
不管这个方法如何实现,方法调用后,percent的值仍然会是10。
主我们稍微仔细地研究一下这种情况。假设一个方法要使方法参数的值增至3倍:
public static void tripleValue(double x);//不能工作
{
x = 3 * x;
}
然后,我们调用此方法:
double percent = 10;
tripleValue(percent);
然而,这样做无法达到目的。方法调用后,percent的值仍旧是10。下面是有关的执行过程:
1)x被初始化为percent值的一个拷贝(即10)。
2)x被增至3倍,变成30。但percent仍旧是10(参见下图)。
3)方法结束后,参数变量x不再使用。
┌────┐
┌───│值的拷贝│
↓ └────┘
percent= 10
▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂
x= 30
↑ ┌─────┐
└───│值增至3倍│
└─────┘
方法参数共有两种:
●基本类型(数字、布尔值);
●对象引用。
方法不能改变基本类型的参数。但对于对象参数来说,情况则有所不同。我们可以很容易地实现一个方法,把员工的薪金增至3倍。
public static void tripleSalary(Employee x)//能够工作
{
x.raiseSalary(200);
}
执行调用:
harry = new Employee(...);
tripleSalayr(harry);
的具体工作过程如下:
1)x被初始化为harry值的一个拷贝,即一个对象引用。
2)向此对象引用应用raiseSalary方法。x和harry都指向的那个Employee对象的薪金被提高了200%.
3)方法结束后,参数变量x不再使用。但对象变量harry继续指向薪金被增至3倍的那个对象。
可以看到,实现改变对象参数状态的方法很容易。实际上,这种方式也很普遍。后面的原因很简单。方法得到对对象引用的一个拷贝,原来的对象变量和这个拷贝所指向的是同一个对象。
很多程序设计语言(尤其是C++和Pascal)有两种参数调用的方法:传值调用和传引用调用。所以,有一些程序员(不幸的是,其中有些甚至是某些书的作者)声称Java程序设计语言对对象使用的是传引用调用。这种理解是错误的。由于,这种误解的普遍性,我们在下面举出一个反例来进行详细阐述。
下面的方法用来交换两个员工对象:
public static void swap(Employee x, Employee y)//无法工作
{
Employee temp = x;
x = y;
y = temp;
}
如果Java程序设计语言对对象使用的是传引用调用,那么这个方法将会达成目标:
Employee a = new Employee("Alice"..);
Employee b = new Employee("Bom"..);
swap(a,b);
//
可是,这个方法事实上并没有改变存储在变量a和变量b中的对象引用。swap方法中的x和y参数被初始化为这两个引用的拷贝。然后,这个方法交换两个拷贝。
//
Employee temp = x;
x = y;
y = temp;
但最终这么做是徒劳无功的。当方法结束后,参数变量x和y就被丢弃了。原来的变量a和b仍旧指向方法调用前各自所指向的对象。
上面的讨论说明Java程序设计语言中并不向对象使用引用调用。实际上,对象引用是通过值来传递的。
下面归纳了Java程序设计语言中利用方法参数可以做到和不能做到的几种情况:
●方法不能修改基本类型(即数字或布尔型)的参数。
●方法可以修改对象参数的状态。
●方法不能让对象参数指向新的对象。
-----------------------
C++既有传值调用,也有传引用调用。传引用调用只需在引用参数前标上&。例如,可以容易实现修改其引用参数的方法void tripleValue(double& x)或者void swap(Employee& x, Employee& y)。
----------------------
这个方法是 去找女朋友 findgirlf();
这时候问题来了, 找女朋友需要钱money
所以我们给找女朋友这个方法设置个参数findgirlf(Money money)
(Money money) 这里面前面表示的是类名 钱, 后面是传进来的钱的名字下面我们就是用这个方法
Person zhangsan = new Person();
zhangsan.findgirlf();
张三去找女朋友,但是他没有钱,所以不能找女朋友,方法报错.zhangsan.findgirlf(100块);
张三有了钱,就可以用找女朋友这个方法了 (这里面的100块 就是Money类型)
http://blog.csdn.net/niuniu20008/article/details/2953785