一、方法
1)定义
方法是 给能够解决问题的多行代码取了一个名字的功能块 ,方便我们多次使用。是具有特定功能 的代码块。
2)特点
- 方法不调用不执行
- 类中方法外,方法不能嵌套
3)作用
- main 方法过于臃肿
- 重复执行的代码块 命名,方便重复使用
- 方便自上而下分解问题
- 方便维护代码
4)声明格式
访问修饰符 返回值类型 方法名(形参列表){}
(1)、访问修饰符:方法允许被访问的权限范围;
(2)、返回值类型:如果方法不返回任何值,则指定为 void; 如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值;
(3)、方法名:定义方法的名字,必须使用合法的标识符,见名知意。
(4)、形参列表:参数可以有多个,多个参数间以逗号隔开, 每个参数由参数类型和参数名组成,以空格隔开。
(5)、{}是具有特定功能的代码块
5)分类
(1)、无参无返回值方法
(2)、无参有返回值方法
(3)、有参无返回值方法
(4)、有参有返回值方法
有返回值类型实例:
//定义PI
//返回值:需要 double 参数:不需要
public static double getPI(){
System.out.println("这是一个有返回值没有参数的方法");
return 3.1415926;
}
//求2个整数的和
//返回值: 需要 int 参数:int x, int y
public static int getSum(int x, int y){
System.out.println("这是一个有返回值有参数的方法");
return x+y;
}
无返回值类型实例:
//打印5行5列的星星
//返回值:不需要 参数:不需要
public static void print(){
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
System.out.print("* ");
}
System.out.println();
}
}
//计算某个区间范围内所有整数的和,第一个参数不能大于第二个参数
//返回值: 不需要 参数:int min,int max
public static void getSum(int min,int max){
if(min>max){
System.out.println("第一个参数不能大于第二个参数");
return;
}
int sum=0;
for(int i=min;i<=max;i++){
sum+=i;
}
System.out.println(sum);
}
二、调用
格式: 方法名(参数);
1)有返回值类型的方法
- 直接调用 方法名(参数);
- 赋值调用 数据类型 变量名 = 方法名(参数);
- 输出调用 System.out.println(方法名(参数));
public class Method02{
public static void main(String[] args){
//直接调用
getPI();
double d = getPI();
//赋值调用
System.out.println(d);
//输出调用
System.out.println(getPI());
}
//方法
......
}
2)无返回值类型的方法
- 直接调用 方法名(参数);
public class Method03{
public static void main(String[] args){
print();
getSum(6,5);
MultiPrint(7);
Alph();
Reverse();
}
三、return关键字
1)有返回值的方法的作用
- 提前结束方法
- 带出返回值
2)没有返回值的方法的作用
- 提前结束方法
3)不可达语句
- return的后面出现的语句
- break后
- 死循环后的代码
- continue
- while(false)
4)兼容类型
- 实参的数据类型<=型参的数据类型
- 接收返回值的类型>=方法的返回值类型>=return后数据的类型
注:在一个作用域内 return 之后不能再存在代码
public class ReturnDemo04{
public static void main(String[] args){
byte b=3;
long result=test(b,4); //
}
public static int test(int a,int b){ //int a =3;
if(a==b){
return 0;
}else{
return 10000000000L;
}
}
}
四、方法的重载
一般来说,功能点相同的方法才适合使用重载,重载必须满足如下要求:
- 同一个类中
- 方法名必须相同
- 参数列表不同 (方法签名不同)
- 参数的个数不同
- 参数的数据类型不同
- 不同类型的参数顺序不同
注:方法重载与返回值无关。
方法签名:方法名+参数列表 (区分一个方法的唯一)
public class Overload06{
public static void main(String[] args){
getSum(1,2);
}
//求2个整数的和
public static int getSum(int a,int b){
System.out.println("int int");
System.out.println(a+b);
return 1+2;
}
private static String getSum(int a,int b){
System.out.println("int int");
System.out.println(a+b);
return "";
}
//求三个整数的和
public static void getSum(int a,int b,int c){
System.out.println("int int int");
System.out.println(a+b+c);
}
//求两个小数的和
public static void getSum(double d1,double d2){
System.out.println("double double");
System.out.println(d1+d2);
}
//求三个小数的和
public static void getSum(double d1,double d2,double d3){
System.out.println("double double double");
System.out.println(d1+d2+d3);
}
}
五、递归
基本思想:自己调用自己。不推荐使用,容易内存溢出
递归结构包括两个部分:
- 递归头: 停止自己调用自己的条件
- 递归体: 自己调用自己
临界条件: 停止自己调用自己的条件
递归前进段:到达临界条件之前一致自己调用自己
递归后推段:从临界条件开始,把结果返回给调用的上一层
public class Recursion07{
public static void main (String[] args){
// System.out.println(test(5));
Multiple(1);
}
//阶乘 求某个数的阶乘 5*4!
/* public static int test(int i){
if(i==1){
return 1;
}
return i*test(i-1);
}
}