Java方法
1-什么是方法
System.out.print()
,是什么- system:方法
- out:对象
- print():方法
- Java方法是语句的集合,他们在一起执行一个功能
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
- 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性(就是一个方法只能完成一个功能,这样有利于我们后期的扩展)
- 方法的命名规则:小写开头驼峰命名
2-方法的定义和调用
1.方法的定义:
-
语法
-
修饰符 返回值类型 方法名(参数类型 参数名){ 。。。 return 返回值; } //例子 public static int add(int a,int b){ return a+b; }
-
-
修饰符:告诉编译器怎么调用方法,定义了方法的访问类型(可选的)
-
返回类型:方法可能会返回值。return ValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值,这种情况return是关键字void
- return除了可以返回值,还可以终止方法
-
参数类型:参数像是一个占位符,当方法被调用时,传递值给参数,这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数,参数是可选的,方法可以不包含任何参数
- 形式参数:在方法被调用时用于接受外界输入的数据(方法里的参数)
- 实参:调用方法时实际传给方法的数据。(传给方法的参数)
-
方法体:方法体包含具体的语句,定义该方法的功能
2.方法的调用:
- 调用方法:对象名.方法名(实参)
- Java支持两种调用方式,根据方法返回值来选择
- 当方法返回一个值的时候,方法调用通常被当做一个值。如:
int i = max(20,20);
- 如果方法返回值是void,方法调用一定是一条语句
System.out.print("hello");
- 当方法返回一个值的时候,方法调用通常被当做一个值。如:
值传递(Java)和引用传递
- Java都是值传递
3-方法的重载
-
重载(over loading)是在一个类里,方法名相同,参数不同。返回类型可以相同也可以不相同
-
重载规则:
-
方法名必须相同
-
参数列表不同(个数不同\类型不同\参数排列顺序不同等)
-
方法的返回类型可以相同也可以不相同
-
仅仅范围类型不同不足以成为方法的重载
-
public static int add(int b ,int a){ return a+b; } public static int add(int a,double b){ return a+(int)b; } public static int add(double b ,int a){ return a+(int)b; } public static double add(double a,double b){ return a+b; }
-
-
实现理论
- 方法名相同时,编译器会根据调用方法参数个数、参数类型、等去逐个匹配,选择对应的方法,如果匹配失败,报错
4-可变参数-不定项参数
-
JJDK1.5开始,Java支持传递同类型可变参数给一个方法
-
在方法声明中,在指定参数类型后面加一个省略号…
-
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通参数都必须在它之前声明
-
public static void main(String[] args) { //调用可变参数方法 printMax(3,4,5,1,55,55);//55.0 printMax(new double[]{1,2,3,5,6,62.1,62.2});//62.2 } public static void printMax(double ... nums){ if (nums.length == 0){ System.out.println("没有数据"); return; } double result = nums[0]; //找出最大值 for (int i = 1; i < nums.length; i++) { if (nums[i] > result) { result = nums[i]; } } System.out.println("最大值为:"+result); }
5-递归
- 递归是自己调用自己
- 递归分为两个部分
- 递归头:什么时候不调用自己的方法。如果没有头,将陷入死循环
- 递归体:什么时候需要调用自身方法
/*
2! 2*1
3! 3*2*1
5! 5*4*3*2*1
*/
public static void main(String[] args) {
System.out.println(f(10));
}
//5! 5*4*3*2*1
public static int f(int n){
if ( n == 1 ) {
return 1;
}else {
return n*f(n-1);//自己调自己
}
}
6-作业:计算器
- 要求实现加减乘除功能,并且能够循环接收新数据,通过用户交互实现
- 思路推荐:
- 写四个方法:加减乘除
- 利用switch进行用户交互
- 传递需要操作的两个数
- 输出结果
public class Task01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//简单计算
for (;;) {
//运算符
String str = null;
//数字A
double a = 0 ;
//数字B
double b = 0;
//运算结果
double result = 0.0;
System.out.print("请输入运算符:如+,-,*,/ 退出:exit :");
if (scanner.hasNext()) {
str = scanner.nextLine();
if (str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/")){
System.out.print("请输入数字A:");
//接收数字A
if (scanner.hasNextDouble()){
a = new Double(scanner.nextLine());
System.out.print("请输入数字B:");
//接收数字B
if (scanner.hasNextDouble()){
b = new Double(scanner.nextLine());
//调用方法计算
result = calculation(str, a, b);
System.out.println(a + "" + str + "" + b + "=" + result);
}else{
System.out.println("请重新输入正确的数字");
scanner.reset();
continue;
}
}else{
System.out.println("请重新输入正确的数字");
scanner.reset();
continue;
}
}else if(str.equals("exit")){
System.out.println("正在退出。");
break;
}else {
System.out.println("请输入正确的操作符");
continue;
}
}
}
}
//加减乘除
public static Double calculation(String c,double a,double b){
switch (c){
case "+":
return a+b;
case "-":
return a-b;
case "*":
return a*b;
case "/":
return a/b;
default:
System.out.println("请输入正确的操作符");
return 0.0;
}
}