方法
方法是具有特定功能的代码块。
简单的理解就是:把一段完整的代码,看成一个整体,并给这段代码起个名字,以后在用的时候,使用这个名字就相当于执行了这一段代码。
方法必须先创建才可以使用,创建只需要进行一次,使用可以多次。方法的创建过程称为方法的定义。
和变量类似,变量必须先定义再使用,方法也是先定义再使用。
方法创建后并不是直接运行的,需要手动使用才执行,使用方法称为方法调用。
方法定义
方法隶属于类,因此方法要定义在类中,且方法不能定义在别的方法内。
public static 返回值类型 方法名(参数列表){
方法体
}
方法名的命名规范和变量名的命名规范相同。
示例:
//无参无返回值
public static void demoA() {
int sum=0;
for(int i=0;i<=10;i++) {
sum+=i;
}
System.out.println(sum);
}
//有参无返回值
public static void demoB(int num) {
int sum=0;
for(int i=0;i<=num;i++) {
sum+=i;
}
System.out.println(sum);
}
//无参有返回值
public static int demoC() {
int sum=0;
for(int i=0;i<=10;i++) {
sum+=i;
}
return sum;
}
//有参有返回值
public static int demoD(int num) {
int sum=0;
for(int i=0;i<=num;i++) {
sum+=i;
}
return sum;
}
方法调用
方法定义好之后,就可以在想要使用的时候调用方法,达到使用方法的目的。
方法调用的格式 :
方法名(参数);
示例:
public class Demo01 {
public static void main(String[] args) {
demoA();
demoB(50);
int a=demoC();
System.out.println(a);
int b=demoD(10);
System.out.println(b);
}
//无参无返回值
public static void demoA() {
int sum=0;
for(int i=0;i<=10;i++) {
sum+=i;
}
System.out.println(sum);
}
//有参无返回值
public static void demoB(int num) {
int sum=0;
for(int i=0;i<=num;i++) {
sum+=i;
}
System.out.println(sum);
}
//无参有返回值
public static int demoC() {
int sum=0;
for(int i=0;i<=10;i++) {
sum+=i;
}
return sum;
}
//有参有返回值
public static int demoD(int num) {
int sum=0;
for(int i=0;i<=num;i++) {
sum+=i;
}
return sum;
}
}
上述代码就是方法的调用,main方法是程序的入口,在main方法中我们调用了方法。
方法分类
参数:方法执行所需要的外界数据。
返回值:方法执行完之后,给外界的数据。
方法按有没有参数,有没有返回值可以分为以下4类:
- 无参数无返回值方法
- 无参数有返回值方法
- 有参数无返回值方法
- 有参数有返回值方法
无参数无返回值方法
如果一个方法没有参数,也没有返回值,这样的方法就是无参数无返回值方法。
如果方法没有返回值,我们在定义方法的时候,将返回值类型指定为 void。
无参数无返回值方法的定义格式:
public static void 方法名(){
方法体
}
示例:
//无参无返回值
public static void demoA() {
int sum=0;
for(int i=0;i<=10;i++) {
sum+=i;
}
System.out.println(sum);
}
无参数无返回值方法的调用格式:
方法名();
示例:
public static void main(String[] args) {
demoA();
}
//无参无返回值
public static void demoA() {
int sum=0;
for(int i=0;i<=10;i++) {
sum+=i;
}
System.out.println(sum);
}
无参数有返回值方法
如果一个方法没有参数,但是有返回值,这样的方法就是无参数有返回值方法。
如果方法有返回值,方法体里要通过return语句将结果返回给外界。
定义方法时,返回值类型必须 和 方法体中return 返回的值的类型一致。
无参数有返回值方法的定义格式:
public static 返回值类型 方法名(){
方法体
return 返回值;
}
示例:
//无参有返回值
public static int demoC() {
int sum=0;
for(int i=0;i<=10;i++) {
sum+=i;
}
return sum;
}
无参数有返回值方法的调用格式:
数据类型 变量名 = 方法名();//如果外界要用返回值,拿一个变量接收返回值
方法名();//如果外界不需要使用返回值,可以不接收
示例:
public static void main(String[] args) {
int a=demoC();
System.out.println(a);
}
//无参有返回值
public static int demoC() {
int sum=0;
for(int i=0;i<=10;i++) {
sum+=i;
}
return sum;
}
有参数无返回值方法
有参数无返回值方法的定义格式:
public static void 方法名(参数类型 参数名1, 参数类型 参数名2, ...){
方法体
}
示例:
//有参无返回值
public static void demoB(int num) {
int sum=0;
for(int i=0;i<=num;i++) {
sum+=i;
}
System.out.println(sum);
}
有参数无返回值方法的调用格式:
方法名(参数值1,参数值2,...);
示例:
public static void main(String[] args) {
demoB(50);
}
//有参无返回值
public static void demoB(int num) {
int sum=0;
for(int i=0;i<=num;i++) {
sum+=i;
}
System.out.println(sum);
}
有参数有返回值方法
有参数有返回值方法的定义格式:
public static 返回值类型 方法名(参数类型 参数1, 参数类型 参数2, ...){
方法体
return 返回值;
}
示例:
//有参有返回值
public static int demoD(int num) {
int sum=0;
for(int i=0;i<=num;i++) {
sum+=i;
}
return sum;
}
有参数有返回值方法的调用格式:
数据类型 变量名 = 方法名(参数1,参数2,...);//如果外界要用返回值,拿一个变量接收返回值
方法名(参数1,参数2,...);//如果外界不需要使用返回值,可以不接收
示例:
public static void main(String[] args) {
int b=demoD(10);
System.out.println(b);
}
//有参有返回值
public static int demoD(int num) {
int sum=0;
for(int i=0;i<=num;i++) {
sum+=i;
}
return sum;
}
分类总结
- 如果方法有返回值,在方法体内必须要有return语句。并且 return后面的返回值 必须和 返回值 类型一致。
- 如果方法有参数,参数可以是1个也可以是多个,如果是多个参数,参数与参数之间用逗号隔开。
- 定义方法时的参数叫形参(形式参数),调用方法时的参数叫实参(实际参数)。
- 定义方法时:参数的类型和参数名都不能少。
- 调用方法时:不需要参数类型
- 参数可以是常量、变量、表达式、或者另外一个方法的返回值。 7. 方法不能嵌套定义。
形参与实参
形参
形参:全名叫形式参数,出现在方法定义中,形参只是用来占位的,用来代表未来调用时传递过来的数据。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。 因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。
实参
实参:全名叫实际参数,出现在方法调用中,实参是方法执行时真正要用到的数据。在方法调用时,会把实参传递给形参,在执行方法过程中用于参与运算。实参在传递给别的方法之前是要被预先赋值的。
在方法调用时,要保证实参的数据类型和形参的数据类型一致。 实参到形参只是单向的值拷贝过程。如果实参是个数据,会把数据拷贝给形参;如果实参是个地 址,会把地址拷贝给形参。----实参和形参是2个变量,只是值相等,实参的值拷贝给了形参。
值传递和引用传递
基本类型的变量保存原始值,即它代表的值就是数值本身, 原始值一般对应在内存上的栈区;而引用类型的变量保存引用值,引用值指向内存空间的地址。代表了某个对象的引用,而不是对象本身。对象本身存放在这个引用值所表示的地址的位置。被引用的对象对应内存上的堆内存区。
编辑
编辑
如果参数是引用类型,可以在方法内修改内容。
如果参数是基本数据类型,无法在方法内修改内容。