JAVA方法
概念
1.方法是解决一类问题的有序步骤组合
2.方法包含于类或对象中
3.方法在程序中被创建,在其他地方被调用
方法设计原则
保持方法的原子性,即一个方法只完成一个功能,这样有利于后期扩展
方法的命名原则
首字母小写+驼峰原则
JAVA是值传递:值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
补充:引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
方法定义
/*
修饰符 返回值类型 方法名(参数类型 参数名){
方法体
return 返回值
}
*/
//retrun可以终止方法
1.修饰符:可选,例如public等,告诉编译器如何调用该方法,定义了该方法的访问类型
2.返回值类型:returnValueType,如果方法没有返回值,这里使用void
3.方法名:注意命名规范,方法名和参数表共同构成方法签名
4.参数类型:当方法被调用时,传递值给参数(方法可以不包含参数)
-
形式参数:在方法被调用时用于接收外界输入的数据
-
实参:调用方法时实际传给方法的数据
-
参数列表:方法的参数类型、顺序、参数个数
5.方法体:方法包含的具体语句,定义该方法的功能
方法调用
//对象名.方法名(实参列表)
JAVA支持两种调用方法,根据是否具有返回值来进行选择
方法一
方法返回一个值,方法调用通常被当作一个值,例如
int larger = max(30,40);
方法二
方法返回值为void,方法调用一定是一条语句,例如
System.out.println("hello");
可变参数
/*
public void sum(int... i)//参数类型后面加...表示可变参数
*/
注意
1.一个方法中只能有一个可变参数
2.可变参数必须放在最后定义
3.可变参数必须是同类型的
递归
概念:在方法调用方法自身
public static int test(int n){
if(n==1){
return 1;//递归头(边界条件)
}else{
return n*test(n-1);//递归体
}
注意
1.必须要有边界条件,即不进行自身调用可以输出的条件,否则将会陷入死循环导致内存崩溃
2.递归分为两个阶段,前阶段:根据条件,不断的调用方法;返回阶段:到达边界条件后,得到返回值,逐层返回函数值
3.尽量不要使用递归的方法,当阶数较大时,容易造成内存崩溃
示例
//比大小方法
package course.lesson.methood;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int num1 = scanner.nextInt();
System.out.println("请输入第二个数字:");
int num2 = scanner.nextInt();
int larger = max(num1,num2);//调用max方法
System.out.println("两个数中较大的一个为:"+larger);
}
//定义比较大小的方法max
public static int max(int num1,int num2){
int result = 0;
if(num1>num2){
result = num1;
}else if(num1<num2){
result = num2;
}else{
System.out.println("相等");
return result;//使用return结束该方法
}
return result;
}
}
两位计算器
package course.exercise.method;
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请选择计算方法:\n1、加法\n2、减法\n3、乘法\n4、除法");
int rule = scanner.nextInt();//输入计算类型变量
System.out.println("请选择整数或小数:\n1、整数\n2、小数");
int type = scanner.nextInt();//输入数字类型变量
System.out.println("请输入第一个数:");
//根据数字类型进行选择判断
if(type==1){
int sum =0;
int num1 = scanner.nextInt();
System.out.println("请输入第二个数:");
int num2 = scanner.nextInt();
//根据计算类型,调用不同的方法
switch (rule){
case 1:
sum = add(num1,num2);
break;
case 2:
sum = sub(num1,num2);
break;
case 3:
sum = mul(num1,num2);
break;
case 4:
sum = div(num1,num2);
break;
default:{
System.out.println("输入有误");
}
System.out.println("结果为:"+sum);
}else{
double sum = 0;
double num1 = scanner.nextDouble();
System.out.println("请输入第二个数:");
double num2 = scanner.nextDouble();
switch (rule){
case 1:
sum = add(num1,num2);
break;
case 2:
sum = sub(num1,num2);
break;
case 3:
sum = mul(num1,num2);
break;
case 4:
sum = div(num1,num2);
break;
default:{
System.out.println("输入有误");
}
System.out.println("结果为:"+sum);
}
}
}
//整数加法器
public static int add(int a,int b){
int result = a+b;
return result;
}
//小数加法器
public static double add(double a,double b){
double result = a+b;
return result;
}
//整数减法器
public static int sub(int a,int b){
int result = a-b;
return result;
}
//小数减法器
public static double sub(double a,double b){
double result = a-b;
return result;
}
//整数乘法器
public static int mul(int a,int b){
int result = a*b;
return result;
}
//小数乘法器
public static double mul(double a,double b){
double result = a*b;
return result;
}
//整数除法器
public static int div(int a,int b){
int result = a/b;
return result;
}
//小数除法器
public static double div(double a,double b){
double result = a/b;
return result;
}
}
可变参数
package course.lesson.method;
public class Demo05 {
public static void main(String[] args) {
Demo05 demo05 = new Demo05();
int numbers[]={12,12,23,34,45};
demo05.sum(numbers);
}
//可变参数
/*
public void sum(int... i)//参数类型后面加...表示可变参数
*/
public void sum(int... i){
int sum =0;
for(int j=0;j<i.length;j++){
sum=sum+i[j];
}
System.out.println("计算和为:"+sum);
}
}
计算阶乘
//计算阶乘
package course.lesson.method;
public class Demo06 {
public static void main(String[] args) {
System.out.println(test(5));
}
public static int test(int n){
if(n==1){
return 1;//递归头(边界条件)
}else{
return n*test(n-1);//递归体
}
}
}