方法
1.方法的定义
概念:Java方法是语句的集合,他们在一起执行一个功能。
- 解决一类问题的有序组合;
- 包含于对象或类中;
- 方法在程序中被创建,在其他地方被引用;
设计方法的原则:最好保持方法的原子性,即一个方法只完成一个功能,这样利于后期的扩展。
修饰符:public、private、protect、default
返回值类型:int、double、void(空值)等
方法名 :首字母小写及驼峰命名(见名知意)
参数:可有可无
修饰符 返回值类型 方法名(参数类型 参数名){
···
方法体
···
return 返回值;
}
public class Demo01 {
//main方法
public static void main(String[] args) {
int sum = add(1,2);
System.out.println(sum);
test();
}
//加法
public static int add(int a, int b){
return a+b;
}
//计算1~100的奇数和和偶数和
public static void test(){
int oddSum = 0;
int evenSUm = 0;
for (int i = 0; i < 101; i++) {
if (i%2!=0){
oddSum += i;
}else {
evenSUm += i;
}
}
System.out.println("奇数的和为:"+oddSum);
System.out.println("偶数的和为:"+evenSUm);
}
}
调用方法:对象名.方法名(实参列表)
-
当方法返回一个值时,方法调用通常被当作一个值
int max = max(12,14);
-
如果返回值是void,方法调用一定是一条语句
System.out.println("Hello,World!");
Java中只有值传递!
2.方法的重写和重载
2.1区别
1)重写:是存在子类和父类之间的,子类定义的方法与父类中的方法具有相同的方法名、相同的参数类型和相同的返回类型
2)重载:是指同一个类中的多个方法具有相同的名字,但是这些方法具有不同的参数列表,即参数的数量或者
参数的类型不能完全相同
3)重写是父类与子类之间多态性的一种表现
4)重载是一类中多态性的一种表现
2.2重载
- 方法名称必须相同
- 参数列表必须不同(个数、类型或参数排列顺序不同等)
public class Demo03 {
public static void main(String[] args) {
double max = max(12, 12);
//int max = max(12, 12);
System.out.println(max);
}
//比较大小
public static int max(int num1, int num2){
int result = 0;
if (num1 == num2){
System.out.println("num1==num2");
return 0;//用于终止方法
}
if (num1 > num2){
result = num1;
}else {
result = num2;
}
return result;
}
public static double max(double num1, double num2){
double result = 0;
if (num1 == num2){
System.out.println("num1==num2");
return 0;//用于终止方法
}
if (num1 > num2){
result = num1;
}else {
result = num2;
}
return result;
}
}
3.可变参数
在方法声明中,在指定参数类型后加一个省略号(…)
一个方法只能指定一个可变参数,它必须是方法的最后一个参数。任何普通参数都必须在它之前声明。
public class Demo04 {
public static void main(String[] args) {
//调用可变参数的方法
printMax(1,2,3,4,5);
printMax(new double[]{1,2,3});
}
public static void printMax(double... numbers){
if (numbers.length == 0){
System.out.println("No argument password");
}
double result = numbers[0];
//排序
for (int i = 1; i < numbers.length; i++){
if (numbers[i] > result){
result = numbers[i];
}
}
System.out.println("The max value is " + result);
}
}
递归
定义:自己调用自己,直到达到边界条件后结束,然后返回结果。
结构:
- 递归头:递归的边界(即结束条件),没有将会陷入死循环!
- 递归体:什么时候需要调用自身方法
//了解递归思想(调用自身次数过多时,不适合使用递归)
public class Demo05 {
public static void main(String[] args) {
System.out.println(f(5));
}
//计算5的阶乘
public static int f(int i){
if (i == 1){
return 1;
}else {
return i*f(i-1);
}
}
}
练习->计算器
import java.util.Scanner;
public class EasyCalculator {
public static void main(String[] args) {
while (true) {
//创建Scanner对象
Scanner scanner = new Scanner(System.in);
//用于接收用户输入的第一个数字
System.out.println("请输入您想要计算的内容:");
double a = scanner.nextDouble();
//接收用户输入的运算符
char x = scanner.next().charAt(0);
//接收用户输入的第二个数字
double b = scanner.nextDouble();
switch (x) {
case '+':
add(a, b);
break;
case '-':
reduce(a, b);
break;
case '*':
multiply(a, b);
break;
case '/':
if (b == 0) {
System.out.println("除数不能为0!");
} else {
divide(a, b);
break;
}
}
//为了能循环计算,没有关闭Scanner,需手动关闭
//scanner.close();
}
}
//加、减、乘、除四个方法
public static void add(double a, double b){
System.out.println("两个数相加为:"+(a+b));
}
public static void reduce(double a, double b){
System.out.println("两个数相减为:"+(a-b));
}
public static void multiply(double a, double b){
System.out.println("两个数相乘为:"+(a*b));
}
public static void divide(double a, double b){
System.out.println("两个数相除为:"+(a/b));
}
}