Java——方法

方法(method)

一、什么是方法?有什么用

方法是可以完成某个特定功能的并且可以重复被利用的代码片段,在C语言中,方法被称为“函数”。

日常业务中,会出现很多本质相同,只不过具体参与运算的数值不同,代码没有得到重复利用,专业术语叫做“复用性”差。

注意:

  1. 程序开始执行的时候是先执行main方法,因为main方法是一个入口。main方法不需要程序员手动调用,是由JVM调用的。除了main方法之外的其他方法,都需要程序员手动调用,方法只有调用的时候才会执行,方法不调用是不会执行的。

  2. 方法定义在类体当中,定义的先后顺序没有关系。

    public static class MethodTest{
    	
    public static void sumInt(int x , int y){
    	int z = x +y;
    	System.out.println(z)
    	}
    }
    

二、方法怎么定义,语法机制是什么?

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

方法体;

}

注意:

[ ]符号叫做中括号,以上中括号[ ]里面的内容表示不是必须的,是可选的。

  1. 关于修饰符列表

    修饰符列表不是必选项,目前是统一写成: public static,在后面的学习中会理解怎么写。

  2. 关于返回值类型

    第一:返回值类型可以是任何类型,只要是java中合法的数据类型就行,数据类型包括基本数据类型和引用数据类型,
    也就是说返回值类型可以是:byte、short、int、long、double、float、boolean、char、String……

    第二:什么是返回值?
    返回值一般是指一个方法结束执行之后的结果。结果通常是一个数据,所以被称为“值”,而且还叫“返回值”。

    方法就是为了完成某个特定的功能,方法结束后通常都是有一个结果的,而体现结果的一般都是数据,数据得有类型,这就是返回值类型。

    第三:当一个方法执行结束不返回任何值的时候,返回值类型也不能空白,必须写上void关键字。所以void表示返回该方法执行结束后不返回任何结果。
    第四:如果返回值类型不是void,那么在方法体中执行结束的时候必须使用“return 值;” 这样的语句来完成“值”的返回,如果没有“return 值;”这样的语句那么编译器都会报错。

    第五:return 值;这样的语句作用是“返回值”,一定要注意:只要有“return” 关键字的语句执行,当前方法必然结束。是当前方法结束而不是程序。

    第六:如果返回值类型是void,那么在方法体当中不能有“return 值;”这样的语句。但是可以有“return;”的作用就是用来终止当前方法的。

  3. 方法名

    方法名要见名知意。

    方法名在命名规范中,要求首字母小写,后面每个单词首字母大写。(驼峰原则)

  4. 形式参数列表

    简称:形参。

    注意:形式参数列表中的每一个参数都是“局部变量”,方法结束之后内存释放。

    形参的个数:0–n个。

    形参有多个的话使用逗号隔开。形参的数据类型起决定性作用,形参对应的变量名是随意的。

    public static void sumInt(int a, int b ){}
    
  5. 方法体

    由java语句构成。java语句以“ ; ”结尾。

    方法体当中编写的是业务逻辑代码,完成某个特定功能。

    在方法体中的代码遵循自上而下的顺序依次执行。

    在方法体中处理业务逻辑代码的时候需要数据,数据来源就是这些形参。

方法的调用:类名.方法名(实际参数列表)

实参的类型和形参的类型必须一一对应,另外个数也要一一对应。


三、方法的调用

方法必须调用才能执行。

1.通过类名.方法名(实际参数列表);

**注意:**实参和形参必须一一对应,类型要对应,个数要对应。

举例:

业务要求:计算两个int类型数据的商。
public class MethodTest{//方法定义在这里可以。	
public static void main(String [] args){		
		MethodTest.devide(3,4);  //调用方法。实际参数注意类型对应	
}	//方法定义在这里也可以。没有顺序要求	
public static int divide(int x , int y){ // 有返回值类型		
		return x / y;	
		}		
public static void div(int x , int y){ //无返回值类型		
		System.out.println(x / y);	
	}
}
  1. 方法调用时类名什么时候可以省略?什么时候不可以省略?

    a()方法调用b方法的时候,a和b方法都在同一个类当中,“ 类名 . ”可以省略。如果不在同一个类中就不可以省略。

  2. break和return。

    break;用来终止switch和离它最近的循环。

    return;用来终止离它最近的一个方法。

    public class MethodTest02{//方法定义在这里可以。	
    public static void main(String [] args){		
    	for(int i = 0;i < 10; i++){			
    		if(i == 5){				
    			break;  //终止for循环  			
    			}			
    		System.out.println(i);		
    		}		
    		System.out.println("Hello World!");	
    		}
    	}
    
    public class MethodTest02{//方法定义在这里可以。	
    public static void main(String [] args){		
    	for(int i = 0;i < 10; i++){			
    			if(i == 5){				
    				return;  //终止当前方法,和break;不是一个级别。			
    				}			
    				System.out.println(i);		
    		}		
    		System.out.println("Hello World!");	
    	}
    }
    

四、JVM内存结构

在这里插入图片描述
在这里插入图片描述

方法执行时的内存变化:

  1. 局部变量:只在方法体中有效,方法结束之后,局部变量的内存就释放了。

  2. 方法区最先有数据:方法区存放代码片段,存放class字节码。

  3. 方法调用:压栈。 分配空间

  4. 方法结束:弹栈。 释放空间

    public class MethodTest03{	
    public static void main(String [] args){		
     	 int  x = 100;		
     	 m1(x);	
     	 }	
    public static void m1(int i){		
     	 m2(i);	
      }	
    public static void m2(int i){		
    		m3(i);	
    }	
    public static void m3(int i){		
     	 System.out.println(i);	
      }
    }
    

在这里插入图片描述

五、例题

编写一个方法,输出大于某个正整数n的最小的质数。

public class MethodTest04 {
    public static void main(String[] args) {
        //调用方法
        printMin(5);
    }
    //用来判断是否是质数的方法
    public static boolean isZhiShu(int num){
        for(int i = 2;i < num;i++){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
    //用来打印最小质数的方法
    public static void printMin(int n){
        while(true){
            n++;
            boolean flag = isZhiShu(n);
            if(flag){
                System.out.println(n);
                break;
            }
        }
    }
}

改善一下

public class MethodTest04 {
    public static void main(String[] args) {
        //调用方法
        printMin(99);
    }
    //用来判断是否是质数的方法
    public static boolean isZhiShu(int num){
        for(int i = 2;i < num;i++){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
    //用来打印最小质数的方法
    public static void printMin(int n){
        while(!isZhiShu(++n)) {
        }
                System.out.println(n);
    }
}

六、方法重载
  1. 在java语言中,首先java编译器会通过方法名进行区分。但是允许方法名相同的情况出现,如果方法名相同的情况下,编译器会通过

    方法的参数类型进行方法的区分。

  2. 什么时候需要考虑使用方法重载?

    在同一个类当中,如果“功能1”和“功能2”它们的功能是相似的,那么可以考虑将它们的方法名一致,这样代码既美观,又便于后期的

    代码编写。

    **注意:**方法重载overload不能随便使用,如果两个功能根本不相干,不相似,根本没关系的情况下使用方法重载,会导致编码更麻烦。无法进行方法功能的区分。

  3. 什么时候代码会发生方法重载?

    条件1:在同一个类当中。

    条件2:方法名相同。

    条件3:参数列表不同。

    ​ 参数的个数不同算不同;

    ​ 参数的类型不同算不同;

    ​ 参数的顺序不同算不同。

  4. 方法重载和方法的返回值类型无关。

    方法重载和方法修饰符列表无关。

    public static int m5(){
    return 1;
    }
    public static double m5(){
    return 1.0;
    }
    //这不是方法重载,这是方法重复。
    

七、方法递归
  1. 什么是方法递归?

    方法自己调用自己,这就是方法递归。

  2. 当递归时程序没有结束条件一定会发生:栈内存溢出错误。StackOverflowError。

    所以递归必须要有结束条件。

  3. 递归太深,栈内存不够也会发生栈内存溢出错误,因为一直在压栈。

  4. 在实际的开发中,不建议轻易使用递归,能使用循环代替的尽量使用循环来做,因为循环效率高,耗费的内存少。

    举例:请使用递归编写程序,计算1-n的和。

    public class DiGui2 {
        public static void main(String[] args) {
            int retValue = sum(3); //定义一个变量保存和
            System.out.println(retValue);
        }
        //计算1-n的和
        public static int sum(int n){
            if(n == 1){
                return 1;
            }
            //能执行这行代码 说明n一定不等于1
            return n+sum(n-1);
        }
    }
    
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值