码迷,mamicode.com
首页 > 其他好文 > 详细

8.19方法调用笔记

时间:2015-08-20 01:05:47      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

 

方法的定义、调用、重载

一、方法

概念:完成某一功能的程序块相当于其他语言的函数。

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

 

8.19方法调用笔记

标签:

原文地址:http://www.cnblogs.com/tongx123/p/4743861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!