方法
什么是方法
System.out.println("=========================");
//Syste是类
//out是对象
//pintln()是方法
- 方法是语句的集合,他们在一起可以执行一个功能
- 方法名规则,驼峰规则
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被使用
- 方法就是一个功能块,一个方法完成一个功能,有利月后期调试
方法的定义和调用
java的方法类似其他语言的函数,用一段代码片段完成一个功能
方法包含方法头和方法体
修饰符 返回值类型 方法名(参数类型 参数名){
方法体
return 返回值:
}
- 修饰符,可选,告诉编译器如何调用该方法,定以该方法的访问类型
- 方法的返回值,可能返回,也可能不返回,void表示不返会
- 方法名,注意命名规范
- 参数类型像是一个占位符,用于接受输入参数
public class Demo02 {
public static void main(String[] args) {
int a=max(10,20);
System.out.println(a);
}
public static int max(int a,int b){
int num;
if(a==b){
return 0;//终止方法,返回值
}
if(a>b){
num=a;
}else{
num=b;
}
return num;//返回值
}
}
- 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。java只有值传递。
- 引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
方法的重载
- 重载就是在一个类中,函数名称相同,传的参数不同
- 方法名称必须相同
- 参数列表必须不同(参数个数或参数类型或参数排列顺序不同)
- 方法的返回值类型可以相同也可以不同
- 仅仅返回值类型不同,不构成重载
- 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等,逐个进行匹配。以选择对应的方法,如果匹配失败则编译器报错。
命令行传参
有时候希望你运行一个程序的时候,在传递给他消息。这就靠命令行参数给main()函数实现
可变参数(不定项参数)
- jdk1.5开始,java支持传递一个同类型的可变参数给一个方法
- 在方法的申明中,在指定参数后加省略号()
- 一个方法中只能有一个可变参数,任意其他参数要在他之前,它要放在最后
递归
- A方法调用A方法,自己调用自己
- 利用递归我们可以用简单的程序来解决复杂的问题,它通常把一个大型复杂的问题,通过层层转化,把问题转化为一个与问题相似的小问题解决。大大尖山程序的代码量。
- 递归包含两个部分
- 递归头,什么时候不调用自己的方法,没有此项就会陷入死循环。
- 递归体,什么时候需要调用自己。
- 递归深度越大,就会花费大量时间,占用大量内存。
- 小计算可以用,大计算另选他法。
练习
写一个计算器,要求可以实现加减乘除功能,并且可以循环接收数据。
package calculator;
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
int i=5;
while(i!=0) {
System.out.println("=======================计算器");
System.out.println("============你要进行什么运算");
System.out.println("============1、加法");
System.out.println("============2、减法");
System.out.println("============3、乘法");
System.out.println("============4、除法");
System.out.println("============0、退出");
System.out.print("============你的选择是:");
Scanner scanner=new Scanner(System.in);
i=scanner.nextInt();
double x=0;
switch (i) {
case 1:
x=add(shu());
System.out.println("============输入计算结果为"+x);
if(xia()==1){
break;
}
case 2:
x=min(shu());
System.out.println("============输入计算结果为"+x);
if(xia()==1){
break;
}
case 3:
x=cheng(shu());
System.out.println("============输入计算结果为"+x);
if(xia()==1){
break;
}
case 4:
x=chu(shu());
System.out.println("============输入计算结果为"+x);
if(xia()==1){
break;
}
}
}
}
public static void close(){
Scanner scanner=new Scanner(System.in);
scanner.close();
//scanner关闭一次后不会被再次唤醒,因此需要加入一个方法在main函数结束时统一关闭
}
public static int xia(){
//添加一个选择,用于答案案输出,不直接刷到主页
System.out.println("============是否进行其他计算");
System.out.println("============1、是");
System.out.print("============你的选择是:");
Scanner scanner=new Scanner(System.in);
int i=scanner.nextInt();
return i;
}
public static int shu(){
//询问输入几个数,有助于之后的循环计算
System.out.println("几个数计算");
Scanner scanner=new Scanner(System.in);
int num=scanner.nextInt();
return num;
}
public static double add(int i){
//加法
System.out.println("============输入计算的数");
Scanner scanner=new Scanner(System.in);
double n=scanner.nextDouble();
i-=1; //先前接收了一个,以后要少接受一个数
while(i!=0){
double j=scanner.nextDouble();
n=n+j;
i--;
}
return n;
}
public static double min(int i){
//减法
System.out.println("============输入计算的数");
Scanner scanner=new Scanner(System.in);
double n=scanner.nextDouble();
i-=1; //先前接收了一个,以后要少接受一个数
while(i!=0){
double j=scanner.nextDouble();
n=n-j;
i--;
}
return n;
}
public static double cheng(int i){
//乘法
//先接受一个数,避免原始赋值出现影响
System.out.println("============输入计算的数");
Scanner scanner=new Scanner(System.in);
double n=scanner.nextDouble();
i-=1; //先前接收了一个,以后要少接受一个数
while(i!=0){
double j=scanner.nextDouble();
n=n*j;
i--;
}
return n;
}
public static double chu(int i){
//除法
System.out.println("============输入计算的数");
Scanner scanner=new Scanner(System.in);
double n=scanner.nextDouble();
i-=1; //先前接收了一个,以后要少接受一个数
while(i!=0){
double j=scanner.nextDouble();
n=n/j;
i--;
}
return n;
}
}