2021_2_23_方法详解
JAVA方法详解
什么是方法
- 方法指的是语句的集合,它们在一起实现一个功能
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法先被创建,然后在其他地方被调用
- 设计方法的原则:方法的初衷是功能块。设计方法时要注意方法的原子性,也就是一个方法完成一个功能。这样有利于方法的调用和后期的扩展。
public class Demo1 {
// main方法
public static void main(String[] args) {
System.out.println(addition(2,3)); // 调用addition方法
}
// 创建一个加法方法 public-公开修饰符 static-类方法修饰符 int-返回值数据类型(void为不返回) 括号中写参数
public static int addition(int a, int b){
return a+b; //返回两个数的和
}
}
// 5
方法的定义和调用
-
方法包含一个方法头和一个方法体。
-
以下是一个方法的所有部分:
- 修饰符:可选的,告诉编译器将如何调用该方法。定义了该方法的访问类型。
- 返回值类型:顾名思义,returnValueType是方法返回值的数据类型。有些方法并不会有返回值,此时将这个值设为void。
- 方法名
- 参数:
- 形式参数:定义方法时,接收外界数据的接口。占位符
- 实参:调用方法时传给方法的实际参数。
- 方法体:包含了实现方法功能的语句。
-
方法的基本格式如下
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
public class Demo02 { public static void main(String[] args) { System.out.println(isBigger(2,10)); // 调用比大小方法 } // 比大小方法 public static int isBigger(int a, int b){ if (a>=b) { return a; }else { return b; } } } //10
方法的重载
- 重载就是在一个类中,有相同的函数名称,但形参不同的方法。
- 方法重载规则:
- 方法名相同
- 参数列表必须不同(个数、类型或者参数排序不同)
- 方法的返回类型可以相同也可以不同
- 仅仅返回类型不同不足以成为方法重载
- 实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型去逐个匹配来选择对应的方法。但是若匹配失败就会报错。
public class Demo02 {
public static void main(String[] args) {
System.out.println(isBigger(2,10)); // 调用比大小方法
System.out.println(isBigger(2.0, 10.0)); // 调用比大小方法,触发重载
}
// 比大小方法重载
public static double isBigger(double a, double b){
if (a>=b) {
return a;
}else {
return b;
}
}
// 比大小方法
public static int isBigger(int a, int b){
if (a>=b) {
return a;
}else {
return b;
}
}
}
//10
//10.0
命令行传参
当你希望运行一个程序时再传递给它信息。这就要靠传递命令行参数给main()函数来实现。
public class Demo03 {
public static void main(String[] args) { //args可以接受命令栏传入的参数
for (String item : args) { //遍历args的元素
System.out.println(item);
}
}
}
在终端中,Demo03.java的位置下输入:
javac Demo03.java
由此,Demo03.class被编译完成。
然后在src的位置,在终端中输入:
java Method.Demo03 Command Line Message
在运行Demo03的时候要加上包名 然后加上终端中传入的命令(Command Line Message)
得到的结果为,
Command
Line
Message
可变参数
- JDK1.5开始,JAVA支持传递同类型的可变参数给一个方法。
- 格式为,在指定参数类型后加省略号 ...
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
public class Demo04 {
public static void main(String[] args) {
int sum = addition(1, 5, 7, 7, 10);
System.out.println(sum);
}
// 不指定个数的求和
public static int addition (int... numbers){
int sum = 0;
for (int number : numbers) {
sum += number;
}
return sum;
}
}
// 30
递归
-
在一个方法内调用自己的结构被称为递归结构。
-
递归可以简化重复嵌套的复杂问题。
-
递归结构包括两部分:
- 递归头:什么时候不调用自己。如果没有头,将陷入死循环。
- 递归体:什么时候需要调用自己。
public class Demo05 {
public static void main(String[] args) {
System.out.println(ladder(6));
}
// 阶乘方法
public static int ladder (int size) {
if (size == 1) {
return 1;
} else {
return size * ladder(size - 1);
}
}
}
练习:计算器
import java.util.Scanner;
// 写一个拥有加减乘除功能的计算器
public class Homework {
public static void main(String[] args) throws InterruptedException {
while (true) {
int firstNumber = inputFirstNumber();
int secondNumber = inputSecondNumber();
String operation_type = inputOperation();
switch (operation_type) {
case "+":
System.out.println(firstNumber + "+" + secondNumber + "=" + addition(firstNumber, secondNumber));
break;
case "-":
System.out.println(firstNumber + "-" + secondNumber + "=" + subtraction(firstNumber, secondNumber));
break;
case "*":
System.out.println(firstNumber + "*" + secondNumber + "=" + multiplication(firstNumber, secondNumber));
break;
case "/":
System.out.println(firstNumber + "/" + secondNumber + "=" + division(firstNumber, secondNumber));
break;
default:
System.out.println("Not a valid operation");
continue;
}
break;
}
Scanner scanner1 = new Scanner(System.in);
scanner1.close();
}
// 输入运算符
public static String inputOperation() {
Scanner scanner1 = new Scanner(System.in);
String operation_type;
System.out.println("Please enter the operation:");
operation_type = scanner1.next();
return operation_type;
}
// 输入第一个数字
public static int inputFirstNumber() {
Scanner scanner1 = new Scanner(System.in);
int firstNumber;
while (true) {
System.out.println("Please enter the first number");
if (scanner1.hasNextInt()) {
firstNumber = scanner1.nextInt();
break;
} else {
System.out.println("Not a valid number");
scanner1.nextLine();
}
}
return firstNumber;
}
// 输入第二个数字
public static int inputSecondNumber() {
Scanner scanner1 = new Scanner(System.in);
int secondNumber;
while (true) {
System.out.println("Please enter the second number");
if (scanner1.hasNextInt()) {
secondNumber = scanner1.nextInt();
break;
} else {
System.out.println("Not a valid number");
scanner1.nextLine();
}
}
return secondNumber;
}
// 加
public static double addition(int a, int b){
return a + b;
}
// 减
public static double subtraction(int a, int b){
return a - b;
}
// 乘
public static double multiplication(int a, int b){
return a * b;
}
// 除
public static double division(int a, int b) {
return (double) a / b;
}
浙公网安备 33010602011771号