方法的定义、调用、重载
一、方法
概念:完成某一功能的程序块相当于其他语言的函数。
main本身也是一个方法。
将参数传递给方法(或函数)
按值调用--表示方法接收的是调用者提供的值
按引用调用--表示方法接收的是调用者提供的变量地址
一个方法可以修改传递引用所对应的变量值,而不能修改传传递值调用所对应的变量值
--Java程序设计语言总是采用按值调用,也就是说,方法得到的是所有参数值的一个拷贝,特别的是,方法不能修改传递给它的任何参数变量的内容
参数值和参数变量的内容区别
1 package B19fangfa; 2 3 public class Test1paixu { 4 /** 5 * @param args 6 */ 7 public static void main(String[] args) { 8 // TODO Auto-generated method stub 9 int x = 10; 10 Test1paixu s = new Test1paixu(); 11 s.san(x); 12 System.out.println(x); 13 } 14 15 public int san(int x) { 16 x = 3 * x; 17 return x; 18 } 19 }
运行结果为:10
1 package B19fangfa; 2 3 public class Test1paixu { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 int p = 10; 11 System.out.println(p); 12 } 13 14 public void san(int x) { 15 x = 3 * x; 16 } 17 }
运行结果为:10
此含义相同,但是书写方法略有不同,并不懂。
此处分析下具体的执行过程:
p=10 |
x=30 |
拷贝
3倍的值
1)x被初始化为p值的一个拷贝(也就是10)
2)x被乘以3后等于30.但是p值还是10
3)这个方法结束之后,参数变量x不再使用
--既然改变不了这个p变量的值,那还有何意义了
--如何才能将输出的结果变做3倍p的值呢
二、为什么要用方法
1.代码重用
2.团队分工合作(做接口实现)
三、分类
JDK自带方法
用户自定义方法
四、用户自定义方法
1.定义
[访问修饰符] 返回值类型 方法名(参数类型1 参数名1,...,参数类型n 参数名n)
public
private
区别
返回值类型--怎么判断有无返回值
1).如果没有返回值,必须写void,这是不可以省略的。
2).如果有返回值,程序中必须有return与返回值类型匹配的变量或者表达式。
方法名命名规则与变量名一样。
“骆驼命名法”
参数可有可无
参数:参与运算的数据
在定义的时候--形参
在调用的时候--实参
2.分类
1).是否有参数
有参数
无参数
方法参数
2).方法参数分类:是否有返回值
有:基本数据类型(数字、布尔值 )
有:引用数据类型(对象引用)
无:void
定义在类的下面、class里
一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了------哪里不同了,根本没反应过来好嘛
对象的引用
由此可见,实现一个对改变参数状态的方法并不是一件难事,因为方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用一个对象。
很多程序设计语言提供了俩种参数传递的方式:值调用和引用调用。Java对对象采用的是引用调用,实际上这种理解是不对的(Java中只有传值调用一种方式。Java中的方法参数为那几种基本数据类型的情况跟C++中一样,传入的只是变量的拷贝。而当参数类型为类对象是,则有可能会误以为是传址调用),这里给出一个反例:
1 package B19fangfa; 2 3 public class Test1paixu { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 int a =5; 10 int b=10; 11 Test1paixu s=new Test1paixu(); 12 s.swap(a,b); 13 System.out.println(a); 14 System.out.println(b); 15 } 16 public void swap(int a,int b){ 17 int temp=a; 18 a=b; 19 b=temp; 20 } 21 }
这并没有实现交换数据,显然该方法并没有改变存储在变量a和b中的对象引用。swap方法的参数x和y被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。
这个过程说明:Java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是值传递
引用和调用一样吗
总结一下java程序设计语言中方法参数的使用情况:
一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)
一个方法可以改变一个对象参数的状态
一个方法不能让对象参数引用一个新的对象
3.调用
main方法调用自定义方法
方法所在类的类名 随便起个名字=new 方法所在类的类名();
随便起个名字.方法(参数)
//不管在不在同一个类中,都这么写
参数是什么
如果定义是int[] a,参数竟然只要a吗?
除了main方法,俩个自定义方法互相调用
1)俩个方法在同一个类
a(){
b();
}
2)俩个方法在不同类
假设a方法在A类,b方法在B类,a方法中调用b方法
class A{
a(){
B XXX=new B();
XXX.b();
}
}
------------------------------------------------并不是很透彻
2015-08-19
23:42:15