Java-方法定义与方法重载

目录

1.什么是方法?

2.定义方法的语法格式

3.方法调用注意点

4.return语句使用注意点 

5.形参与实参转换注意点

6.方法执行过程中的内存分配

 7.方法重载

8.方法递归


1.什么是方法?

定义:一段可以完成某个特定功能且可重复调用的代码,能提高代码的复用性

注意:

  • 方法定义在类体中,一个类中可以定义多个方法,方法编写的位置没有先后顺序之分
  • 方法体中不能再定义方法【函数里面不能再定义函数】
  • 方法体由Java语句构成,遵循自上而下的顺序

2.定义方法的语法格式

[修饰符列表] 返回值类型 方法名(形式参数列表){
     方法体;
}


例如:public static int as(int a,int b){
        int c=a+b;
        System.out.println(c);
        return c;
}


*注释:1.修饰符列表项不是必须的,大部分情况下写成public static;如果修饰符列表有"static"
         关键字的话,调用这个方法的正规格式为:类名.方法名(实际参数列表)

       2.返回值类型:顾名思义,返回数据的类型,这个选项是可选的,如果没有返回值,写void,
         此时方法体中不能出现"return 值",但是可以出现"return;",如果有返回值,返回值可以是
         Java中的任意数据类型,包括基本数据类型和引用数据类型且方法体中必须有return语句,
         后面数的类型必须和返回值类型一致

       3.方法名:方法名最好做到见名知意,首字母小写后面的每个单词首字母大写

       4.形参:这个选项是可选的,表示传给方法的模拟参数,与调用时传入的实参必须一致,传入的实参可 
         以是变量也可以是字面值。形参时局部变量,定义方法时定义了形参再调用时必须有实参

       5.方法体:方法体必须由大括号括起来,由Java语句构成,遵循自上而下顺序

3.方法调用注意点

1.一个方法中可以调用其他方法,但是不可以再定义方法

public class Method {

    //主方法【程序的入口】
    public static void main(String[] args) {
        Method.sum (12,13);
        //输出结果:25
        //         hello world
    }

    //求和方法
    public static int sum(int a,int b){
        int c=a+b;
        System.out.println(c);
        some();//求和方法中调用输出hello world字符串方法
        return c;
    }

    //输出hello world字符串方法
    public static void some(){
        System.out.println("hello world");
    }
}

2.方法调用时要求新参与实参个数对应相同,数据类型对应相同。类型不同的时候要求能够进行相应的自动类型转换【比如定义的形参为long,传入的实参为int,小容量向大容量转换可自动转换】

3.前面我们说到,如果方法修饰符包含'static'关键字。正规的调用格式为:类名.方法名(实参),但是如果这个方法在同一个类中,在调用时可以省略类名,但是这个方法在其他类中则需要加上这个类名通过点语法调用

//定义一个公开的类
public class Method {
    //主方法
    public static void main(String[] args) {
       //调用Method本类中的sum方法可以省略类名
       sum(12,13) ;//输出25
    }
    //求和方法
    public static int sum(int a,int b){
        int c=a+b;
        System.out.println(c);
        return c;
    }
}
//定义一个普通的类
class A{
    //主方法
    public static void main(String[] args) {
        //在A类中调用Method类中的sum方法不可以省略类名
        sum(12,13);//报错在A类中找不到方法
    }
}

4.方法调用后的返回值我们可以选择接收也可以选择不接受,接收用的变量类型要与返回值类型一致或者可以进行自动类型转换

public class Method {
    //主方法
    public static void main(String[] args) {
     //调用不接收返回值return
        sum(12,13);
     //调用接收返回值
       int i=sum(12,13);
        System.out.println(i);//25
    }
    //求和方法
    public static int sum(int a,int b){
        int c=a+b;
        System.out.println(c);
        return c;
    }
}

4.return语句使用注意点 

1.如果方法有返回类型,return最好放在整个方法的最后面,因为return后面不能写任何代码,后面的代码将永远不会执行

public class Method {
    //主方法
    public static void main(String[] args) {

    }
    public static int some(){
        int a=10;
        if(a>3) {
            return 1;
            System.out.println();//!报错无法访问的语句
        }
        return 0;
        System.out.println();//!报错无法访问的语句
    }
}

 2.return语句放在一些分支判断语句或者循环语句中都会出现编译器检测到return有可能不会执行导致报错

//if分支
public class Method {
    //主方法
    public static void main(String[] args) {

    }
    public static int some(){
        int a=10;
        if(a>3) {
            return 1;//!报错缺少返回语句,因为虽然10>3会返回true,但是编译器任然认为
                     //return语句存在无法执行到的风险
        }
    }
}

//循环
public class Method {
    //主方法
    public static void main(String[] args) {
  some();
    }
    //some方法
public static int some(){
        for(int a=0;a<10;a++){
            return 1;//!报错缺少返回语句,编译器认为return语句存在无法执行到的风险
        }
}
}

4.return语句一旦遇到会直接结束整个方法

public class Method {
    //主方法
    public static void main(String[] args) {
  some();
    }
    //some方法
    public static void some(){
        for (int a=0;a<100;a++){
            if(a==5){
                return;//尝试把return换成break观察他们的返回结果
            }
            System.out.println("a--->"+a);
        }
    }
}

输出结果:
a--->0
a--->1
a--->2
a--->3
a--->4

5.形参与实参转换注意点

1.如果传入的基本数据类型,在方法体中对形参的改变不会影响实参的值

public class Method {
    //主方法
    public static void main(String[] args) {
    int num=1;
    some(num);
    System.out.println(num);//1
    }
    
    public static void some(int num){ 
     num=100;
    }
}

 2.如果传入的引用数据类型,在方法体中对形参的改变会影响实参的值

6.方法执行过程中的内存分配

JVM内存划分主要有三块主要的内存空间:方法区内存、堆内存、栈内存。当我们的Java文件编译后生成的字节码文件会被分配到方法去内存中,当这个Java文件运行时会首先调用main主函数,此时JVM会为方法分配内存空间,将main压入栈中,此时main在栈底,执行到main中其他方法后也为其分配内存空间,继续压入栈中,直至整个方法结束,方法陆续出栈,【类似JS中的执行上下文,可查看JS专栏详细了解】

 7.方法重载

定义:在一个中定义多个同名的方法,但要求每个方法具有不同的参数类型或参数的个数【当多个方法功能相似时,尽可能保证方法名相同】 

public class Over {
    public static void main(String[] args) {
        sum(12,13);//25
        sum(12.5,13.6);//26.1
        sum(1L,66L);//67

    }
    public static void sum(int a,int b){
        int c= a+b;
        System.out.println(c);
    }
    public static void sum(double a,double b){
        double c= a+b;
        System.out.println(c);
    }
    public static void sum(long a,long b){
        long c= a+b;
        System.out.println(c);
    }
}

//什么情况下可以使用方法重载?
1.同一个类中
2.同一个方法名
3.不同的参数列表:-数量不同
                 -顺序不同
                 -类型不同

 注意:方法重载只与方法名和参数列表有关系,与返回值类型和修饰符没有关系

8.方法递归

方法调用自身【需要配合return语句使用】

public class 递归 {
    public static void main(String[] args) {
      some();
    }
    public static void some(){
        System.out.println("a");
        some();//调用自身
        System.out.println("b");
    }
}

输出结果:
a
a
a
...
//b永远也不会输出,因为没有return结束语句,递归方法如果没有结束语句将一直调用自身,无法结束

 总结:

  • 能不递归尽量不要递归,因为递归非常耗费栈内存
  • 递归必须有return结束语句,否则将陷入无限递归 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值