8.19方法调用笔记

方法的定义、调用、重载

一、方法

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

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

时间: 2024-10-14 02:09:34

8.19方法调用笔记的相关文章

struts2学习笔记(4)---------action中的方法调用

系统需要使用Action的不同方法来处理用户请求,这就需要让同一个Action里面包含多个控制处理逻辑. 1)动态方法调用 即DMI(dynamic method invocation),使用actionName!methodName的形式来指定想要调用的方法,如果想使用DMI,需要在struts.xml里面加入这句话: <constant name="struts.enable.DynamicMethodInvocation" value="true" /&

深入理解Java虚拟机笔记---方法调用

方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程.在程序运行时,进行方法调用是最普遍.最频繁的操作.在Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于直接引用).这个特性给Java带来了更强大的动态扩展能力,但也使得Java方法的调用过程变得相对复杂,需要在类加载期间甚至到运行期间才能确定目标方法的直接引用.

JVM学习笔记(二)--方法调用之静态分配和动态分配

本篇文章从JVM的角度来理解Java学习中经常提到的重载和重写. 方法调用:方法调用不等同于方法执行,在Java虚拟机中,方法调用仅仅是为了确定调用哪个版本的方法.方法调用分为解析调用和分派.解析调用一定是静态的,而分派可以是静态的,也可以是动态的.我们这里只介绍分派中的静态分配和动态分配. 静态分配:所有依赖静态类型来定位方法执行版本的分派动作称为静态分配. 下面看个例子,顺便来猜一下结果(面试中经常遇到): 1 class Human { 2 3 } 4 5 class Man extend

Java学习笔记之RMI远程方法调用

RMI 应用通常有两个分开的程序组成,一个服务端程序和一个客户端程序.一个典型的服务端程序创建一些远程对象,使得对这些远程对象的引用可以被访问,等待客户端调用这些远程对象提供的方法.一个典型的客户端程序获取远程引用,指向一个或者多个服务端上的远程对象,然后调用这些远程对象所提供的方法.通常我们称这为分布式对象应用程序. 3.1 RMI的工作方式 分布式对象应用程序需要做的事情: l 查找(定位)远程对象. 应用程序可以使用各种不同的机制取得远程对象的引用.比如应用程序可以通过 RMI 提供的简单

struts2笔记09-动态方法调用

1.action配置 <action name="testDynamic" class="com.test.actions.TestAction"> <result name="test">/test.jsp</result> <result name="test1">/test1.jsp</result> </action> 没有配置method属性 2

java中方法调用

JAVA中方法的调用[基础] 一.调用本类中的方法 方法一.被调用方法声明为static ,可以在其他方法中直接调用.示例代码如下: public class HelloWord { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String str="HelloWord!"; int a=0; int b=a+1; int result=

Rails::Application中的一个方法调用

Ruby语言的动态性使得想仅仅通过查找相关API文档来学习Rails是完全不够的,因为API文档只记录了静态代码定义的方法,而Rails中有很多的方法都是在加载时或运行时动态生成的,想要了解这些方法必须要阅读源代码.本文以Rails工程下的config/application.rb文件中的一个方法调用为例,分析方法调用的具体过程. 1. 问题描述 假设Rails工程叫做Sample,那么在config/application.rb中会定义Sample::Application,并可以在其中调用c

C#动态方法调用

此篇将介绍C#如何在运行时动态调用方法.当某些类型是运行时动态确定时,编译时的静态编码是无法解决这些动态对象或类的方法调用的.此篇则给你一把利剑,让动态对象的方法调用成为可能. 1.动态调用dll里的方法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

struts2.5动态方法调用和默认Action

在动态方法调用中,使用通配符方法出现问题,参考了http://www.cnblogs.com/jasonlixuetao/p/5933671.html 这篇博客,问题解决了. 这个是helloworld.xml: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Co