目录
1.方法的概念
实现特定功能的一段代码,可反复使用。
2.方法的定义
定义位置:与main方法平级
定义格式:public static void 方法名(形参列表){方法体}
3.方法的电调用
在需要调用方法的位置直接书写方法名即可。
public class TestMethod {
public static void main(String[] args) {
System.out.println("床前明月光");
printSign();
System.out.println("疑是地上霜");
printSign();
System.out.println("举头望明月");
printSign();
System.out.println("低头思故乡");
printSign();
}
public static void printSign(){
System.out.println("----------");
}
}
4. 方法的参数
形参:形式参数 表示方法在声明的时候书写的参数
形参规定了参数的个数、类型和顺序
表示实参必须遵循这个规定
实参:实际参数 表示方法调用的时候书写的参数
4.1 单个参数
public class TestMethodParameter {
public static void main(String[] args) {
System.out.println("床前明月光");
int num =10;
String str = "abc";
printSign(num);
System.out.println("疑是地上霜");
printSign(5);
System.out.println("举头望明月");
int a = 2;
int b = 3;
int sum = a + b;
printSign(sum);
System.out.println("低头思故乡");
printSign(6);
}
/**
* 形参:形式参数 表示方法在声明的时候书写参数
* 形参规定了参数的 个数、类型、顺序
* 表示实参必须遵循这个规定
* @param num
*/
public static void printSign(int num){
for(int i = 1;i <= num;i++){
System.out.print("-");
}
System.out.println();
}
}
4.2 多个参数
public class TestMethodManyParameter {
public static void main(String[] args) {
System.out.println("床前明月光");
printSign( 10,"#");
System.out.println("疑是地上霜");
printSign(5, "#");
System.out.println("举头望明月");
int num = 6;
String sign = "^";
printSign(num,sign);
System.out.println("低头思故乡");
printSign(7, "@");
}
/**
* 形参:参数的 个数 类型 顺序
* @param count
* @param sign
*/
public static void printSign(int count,String sign){
for(int i = 1;i <= count;i++){
System.out.print(sign);
}
System.out.println();
}
}
5. 返回值和返回值类型
如果需要一个方法执行完毕后,返回给我们一个结果,则可以将返回值类型写为除了void之外的任意数据类型(需要什么数据就返回什么类型),如果返回值类型不是void,必须使用return关键字返回结果。其结果必须和类型保持一致。
需要返回就返回,返回结果必须和方法声明返回值类型相同。
6. return关键字
6.1 情况1
在返回值类型不是void的方法中,使用一次return 关键字直接返回一个结果。
/**
* @author CQL
* @description TODO
* @date 2023/4/4 9:30
* 使用方法 + 参数 + 返回值 实现计算机求和计算
*/
public class TestReturnedCalc {
public static int addition(int a,int b){
int sum = a + b;
System.out.println("最终的和为:sum = " + sum);
return sum;
}
public static void main(String[] args) {
int sum = addition(10222, 30);
if(sum % 2 == 0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
}
}
6.2 情况2
在分支结构中使用return关键字返回结果,必须保证每一条分支都有正确的返回值
/**
* @author CQL
* @description TODO
* @date 2023/4/4 9:48
* 编写方法判断奇数还是偶数
*/
public class TestReturnedNumber {
public static String isEven(int num){
int result = 0;
if(num % 2 == 0 ){
result = 1; // 偶数
}
return result == 1 ? "偶数" : "奇数";
}
public static boolean isEvenWithBoolean(int num){
if(num % 2 == 0){
return true;
}
return false;
}
public static void main(String[] args) {
System.out.println(isEven(11));
System.out.println(isEvenWithBoolean(11)== true ? "偶数" : "奇数");
}
}
6.3 情况3
在返回值类型为void的方法体中,使用return关键字
此时return关键字只表示结束方法,return之后不能加任何内容
/**
* @author CQL
* @description TODO
* @date 2023/4/4 9:53
* 在返回值类型为void的方法中 也可以使用return 后边不能加在任何内容
* 此时return关键字只表示结束方法
*/
public class TestReturnedNoValue {
public static void m1(){
for (int i = 0;i < 10;i++){
if(i == 5){
return; // break 注意区分和break的区别
}
System.out.println(i);
}
System.out.println("m1方法执行完毕");
}
public static void main(String[] args) {
m1();
}
}
7.方法的重载
同一个类中,或者父子类中的方法,方法名相同,参数列表不同(参数的个数、类型、顺序至少有一个不同),即为方法的重载。跟返回值、访问权限修饰符无关。
方法重载的好处:屏蔽使用差异 统一程序结构 提高程序的灵活性
/**
* @author CQL
* @description TODO
* @date 2023/4/4 11:17
* 方法重载:同一个类中,或者父子类中的方法,方法名相同,
* 参数列表不同(参数的个数、类型、顺序至少有一个不同),即可称之为方法重载。
*
* 跟返回值、访问权限修饰符无关
*
* 方法重载的好处:屏蔽使用差异 统一程序结构 提高程序的灵活性
* 我们目前天天使用的 print 以及 println方法 就属于方法重载
* 查看JDK源代码 ctrl + 鼠标左键 点击方法名
*
*/
public class TestMethodOverload {
public static void addition(int a,int b){
System.out.println(a + b);
}
public static String addition(String c,int d){
return "abc";
}
public static String addition(int d,String c){
return "abc";
}
public static int addition(int a,int b ,int c){
int sum = a + b + c;
return a + b + c;
}
public static double addition(double a,int b,int c,short d){
return a + b + c + d;
}
public static long addition(double a,long b,int c,byte d,long e){
return (long)(a + b + c+ d + e);
}
public static void main(String[] args) {
addition(10, 20);
addition(1, 2,3);
addition(1,2,3,(short)2);
addition(20, 2, 2, (byte)2, 2);
addition(10, "abc");
addition("abc", 20);
System.out.println(1);
System.out.println(1.5);
System.out.println(1.5F);
System.out.println('1');
System.out.println(true);
System.out.println(false);
System.out.println("abc");
System.out.print(1);
System.out.print(1.5);
System.out.print(1.5F);
System.out.print('1');
System.out.print(true);
System.out.print(false);
System.out.print("abc");
}
}
8.递归
递归:递进和回归
可以简单的理解为自己调自己。
递归的前提条件:
1.可以将一个大的问题 拆分成若干个小问题(循环可以实现的效果 递归也可以实现 反之不然)
2.必须有正确的出口
实际需求:
1.求1~5之间的和
2.求阶乘
递归可以解决的典型问题:
1.斐波那契数列
2.汉诺塔问题
3.遍历文件目录
4.八皇后的问题