Java学习10
·
上午(2.5h)方法核心语法 + 原理
1. 方法完整格式(必须背)
java
运行
修饰符 返回值类型 方法名(参数列表) {
方法体;
return 返回值;
}
今天固定写:
java
运行
public static ...
2. 无参无返回值方法
java
运行
public class MethodDemo {
// 无参无返回值:只做事,不接收、不返回
public static void printHello() {
System.out.println("Hello Method");
}
// 打印分割线
public static void printLine() {
System.out.println("========================");
}
public static void main(String[] args) {
// 调用方法
printHello();
printLine();
}
}
知识点
void:没有返回值- 调用直接写方法名 ()
- 方法必须在类里,且调用写在 main 里
3. 有参有返回值方法(高频)
① 求和
java
运行
public static int add(int a, int b) {
return a + b; // 返回结果
}
int:返回整数return必须有,且类型匹配
② 判断奇偶数
java
运行
public static boolean isOdd(int num) {
return num % 2 != 0;
}
③ 求圆面积
java
运行
public static double getCircleArea(double r) {
return 3.14 * r * r;
}
④ 求数组最大值(数组作为参数)
java
运行
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) max = arr[i];
}
return max;
}
调用示例
java
运行
public static void main(String[] args) {
int sum = add(10, 20);
System.out.println(sum); // 30
int[] arr = {1,3,5};
int max = getMax(arr);
}
知识点
- 有形参:
(int a,int b) - 实参:调用时传的真实数据
add(10,20) - 有返回值就必须
return void可以不写 return,或写return;
4. 参数传递机制(面试必考)
① 基本类型:值传递(副本)
java
运行
public static void change(int a) {
a = 100; // 只改副本
}
public static void main(String[] args) {
int num = 10;
change(num);
System.out.println(num); // 10 不变
}
② 引用类型(数组):地址传递
java
运行
public static void changeArr(int[] arr) {
arr[0] = 100; // 改原数组
}
public static void main(String[] args) {
int[] arr = {1,2,3};
changeArr(arr);
System.out.println(arr[0]); // 100 变了
}
核心结论
- 基本类型:方法内改不影响外面
- 数组 / 对象:方法内改会影响原数据
- 原因:数组传递的是地址
下午(3h)方法重载 + 递归 + 封装
1. 方法重载 Overload(三要素)
- 同类中
- 方法名相同
- 参数列表不同(个数 / 类型 / 顺序)
- 与返回值无关
java
运行
// 1. 两个int
public static int add(int a, int b) {
return a + b;
}
// 2. 两个double → 重载
public static double add(double a, double b) {
return a + b;
}
// 3. 三个int → 重载
public static int add(int a, int b, int c) {
return a + b + c;
}
// 4. int+double → 重载
public static double add(int a, double b) {
return a + b;
}
不是重载的例子
java
运行
// 只改返回值 → 不是重载
public static double add(int a,int b) {}
// 只改参数名 → 不是重载
public static int add(int x,int y) {}
知识点
- 重载让同一个方法名能处理不同类型 / 个数
- 编译器靠参数匹配自动找对应方法
2. 递归入门(自己调用自己)
① 阶乘 n!
java
运行
public static int factorial(int n) {
if (n == 1) return 1; // 出口
return n * factorial(n - 1);
}
- factorial(5) = 54321
② 1~n 和
java
运行
public static int sum(int n) {
if (n == 1) return 1;
return n + sum(n - 1);
}
③ 斐波那契第 n 项
java
运行
public static int fib(int n) {
if (n == 1 || n == 2) return 1;
return fib(n - 1) + fib(n - 2);
}
知识点
- 必须有出口,否则
StackOverflowError - 递归 = 方法栈不断入栈
3. 数组工具类封装(企业风格)
java
运行
public class ArrayUtil {
// 遍历
public static void printArr(int[] arr) {
for (int num : arr) System.out.print(num + " ");
}
// 最大值
public static int max(int[] arr) {
int m = arr[0];
for (int num : arr) if (num > m) m = num;
return m;
}
// 冒泡排序
public static void sort(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) {
int t = arr[j]; arr[j]=arr[j+1]; arr[j+1]=t;
}
}
}
}
// 反转
public static void reverse(int[] arr) {
int i=0,j=arr.length-1;
while(i<j){
int t=arr[i]; arr[i]=arr[j]; arr[j]=t;
i++;j--;
}
}
}
调用
java
运行
int[] arr = {3,1,4,2};
ArrayUtil.sort(arr);
ArrayUtil.printArr(arr);
晚上(1.5h)综合实战题(完整可运行)
1. 成绩等级方法
java
运行
public static char getLevel(int score) {
if (score >= 90) return 'A';
if (score >= 80) return 'B';
if (score >= 60) return 'C';
return 'D';
}
2. 数组最大值方法
java
运行
public static int findMax(int[] arr) {
int max = arr[0];
for (int num : arr) {
if (num > max) max = num;
}
return max;
}
3. 3 组重载求和
java
运行
add(int,int)
add(double,double)
add(int,int,int)
4. 递归 1~n 求和
java
运行
public static int sumN(int n) {
if(n==1) return 1;
return n + sumN(n-1);
}
5. 完整工具类 ArrayUtil
上面已经写好,直接用。
Day5 核心知识点总复习(面试必问)
- 方法:复用代码、模块化
- void:无返回值
- return:结束方法并返回结果
- 值传递:基本类型,不影响外部
- 地址传递:数组,会影响原数组
- 重载:同名不同参
- 递归:自己调用自己,必须有出口
- 工具类:把通用功能封装,方便反复调用
知识点:
- 计算机是二进制
- 像
0.1、0.14这种十进制小数二进制里是无限循环小数 - 只能存近似值,存不完整
- 所以算出来会差一点点
这不是你的错,是double 类型天生的小瑕疵。
3. 怎么解决?(两种最常用方法)
方法 1:输出时保留两位小数(最简单,最推荐)
java
运行
double area = getCircleArea(3);
System.out.printf("%.2f", area);
输出:
plaintext
28.26
方法 2:用 String 格式化
java
运行
String result = String.format("%.2f", area);
System.out.println(result);
输出:
plaintext
28.26
2.像 for while if这类控制语句如果后面只有一行循环体/条件体后面的大括号可以省略
3.方法括号里只能放值或变量,不能定义变量!
4.关于传递:基本类型:方法内改不影响外面数组 / 对象:方法内改会影响原数据原因:数组传递的是地址
- 基本类型 = 传复印件 → 改复印件不影响原件
- 数组 / 对象 = 传地址 → 改的就是同一个东西
拓展:
斐波那契数列,简单说就是:
从第三个数开始,每个数 = 前两个数相加
更多推荐

所有评论(0)