
一、函数方法1. 基础概念函数 方法程序运行本质是函数执行main 是程序入口函数完整语法修饰符 返回值类型 方法名(形参列表){ 代码逻辑; return 返回值; // void方法可省略return也可单独写return; }public class Main{ public static void main(String[] args) { song(重要的事情说三遍,3);//调用函数 } static void song(String s,int n){//定义函数 for (int i0;in;i){ System.out.println(s); } } } //输出结果 重要的事情说三遍 重要的事情说三遍 重要的事情说三遍 进程已结束退出代码为 0三类基础方法示例无参无返回值static void speak(){}有参无返回值static void speak(String msg,String name){}有参有返回值static double area(double r){return Math.PI*r*r;}2. 形参与实参形参方法定义时括号内变量属于方法局部变量实参调用方法传入的数据传参本质值拷贝两者名称无关调用规则实参个数、类型、顺序必须和形参匹配3. return 规则执行到return方法立刻结束有返回值类型int/double/boolean 等所有代码分支必须有 return否则编译报错void无返回值可不用 return也能写return;直接终止方法4. JVM 内存栈 堆栈内存Stack每个方法调用生成栈帧压入虚拟机栈局部变量、形参全部存在栈帧中方法执行完毕栈帧弹出销毁局部变量直接消失堆内存Heapnew 创建的数组、对象实体存放在堆栈中引用变量仅保存堆内存地址 多个引用指向同一堆实体一个修改全部可见无引用指向则变为垃圾等待 GC 回收5. 方法重载定义同一个类方法名相同参数列表不同多个同名方法共存判断标准只看参数返回值不参与重载判定 满足任意一条即为重载参数个数不同参数类型不同参数顺序不同不构成重载仅返回值不同、参数完全一致 → 编译报错6. 函数经典练习题思路//编写程序接收用户输入年份自定义方法判断平闰年 //需求 //方法接收 int 类型年份参数返回 boolean 类型 //闰年规则能被 400 整除或能被 4 整除且不能被 100 整除 //使用 Scanner 控制台输入年份调用判断方法输出该年是闰年还是平年public class Test4{ public static void main(String[] args) { Scanner scan new Scanner(System.in); System.out.println(请输入年份); int yearscan.nextInt(); boolean resultisLeapYear(year); System.out.println(resulttrue?闰年:平年); scan.close(); } static boolean isLeapYear(int year){ if(year%4000){ return true; }else if(year%40year%100!0){ return true; } return false; } }二、一维数组1. 核心定义数组同类型元素容器下标从 0 开始属于引用数据类型2. 合法声明写法int[] arr new int[5]; int arr[] new int[5]; int[] arr new int[]{1,2,3}; int[] arr {1,2,3};3. 绝对错误写法int[5] arr ...等号左侧[]不能写长度int[] arr new int[]未指定长度、无初始化值int[] arr new int[3]{1,2,3}初始化列表和长度不能共存数组元素类型不统一float[] arr{1,3.14}3.14 默认 double4. 基础属性与规则下标支持byte/short/int/char不允许 long.length获取数组长度是属性不是方法无括号数组长度创建后不可修改扩容本质新建数组复制元素默认初始值基本类型int0、double0.0、booleanfalse、char 空字符引用类型String / 数组nullchar 数组直接打印输出字符其他数组打印地址哈希值5. 两大运行异常数组下标越界ArrayIndexOutOfBoundsException访问下标 ≥ 数组长度public class test2 { public static void main(String[] args) { int[] a {1,2,3,4,5}; for(int i 0;ia.length;i){ System.out.println(a[i]); } } } //输出结果 1 2 3 4 5 Exception in thread main java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at test2.main(test2.java:5)空指针异常NullPointerException数组引用赋值null后访问.length或任意下标触发 局部变量不初始化不能直接打印使用6. 数组复制4 种方式注意int[] a2 a1仅复制栈引用堆数组共用修改互相影响不算真正复制手动循环遍历复制基础写法arr.clone()数组克隆浅拷贝Arrays.copyOf(源数组,新长度)工具类复制可同步扩容System.arraycopy(src,src起始,dest,dest起始,复制个数)原生高效复制7. 数组扩容原有数组长度固定扩容逻辑创建更长新数组将原数组元素全部复制进新数组原数组引用指向新数组 快捷写法arr Arrays.copyOf(arr, arr.length * 2);8. 冒泡排序逻辑相邻元素两两比较逆序则交换每轮循环把最大值移到末尾双层循环外层控制轮次i arr.length-1内层比较j arr.length-1-i时间复杂度 O (n²)大数据量效率极低JDK 内置排序Arrays.sort()底层优化速度远快冒泡三、二维数组1. 本质二维数组 一维数组每个元素又是一维数组2. 合法定义int[][] arr new int[10][20]; //固定行列 int[][] arr new int[10][]; //仅指定外层长度内层数组后续创建 int arr[][] {{1,2},{3}};3. 错误定义int[][] arr new int[][];int[][] arr new int[][3];int[3][] arr ...左侧不能写数字长度int[][] arr new int[2][]{ {1},{2} }长度与初始化列表不能同写4. 遍历方式双层 for 循环外层遍历一维数组行内层遍历每行内部元素列for(int i0;iarr.length;i){ for(int j0;jarr[i].length;j){} }5. 经典练习随机填充二维数组指定范围数字求和、计算平均值随机填充 a-z 字符二维数组查找第一个指定字符的坐标找到直接 return 结束四、高频易错题总结1. 自增运算符变量先取值后自增变量先自增后取值int a9;aa;最终 a 仍为 9赋值时先取旧值再自增2. 位移运算a n仅返回新数值不改变原变量本身优先级低于加减a 2 1等价a 33. 数组定义歧义int[] x,y[]int[] x; //一维数组 int[] y[]; //二维数组正确判断y[0] x✔ 二维数组一行存放一维数组y[0][0] x❌ 数字不能接收数组y[0][0] x[0]✔ 数字接收数组元素五、配套编程习题考点速记水仙花数三位数每位立方和 自身阶乘递归 / 循环相乘注意 0! 1数组分区基准值小放左、大放右累加特殊数列222222…键盘控制数字与相加次数char 数组随机填充字母查找指定字符下标十进制转二进制统计 1 的个数十进制转十六进制算法实现100~200 素数判断只能被 1 和自身整除有序数组插入数字保持升序计算 x 的 n 次方统计 0-9 数字出现次数