JAVA自学笔记05
1、方法
1)方法就是完成特定功能的代码块,类似C语言中的函数。
2)格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,…){
函数体;
return 返回值;
}
①修饰符:对于初学者使用public static
②返回值类型:方法结果的类型
③方法名符合命名规则即可
④实际参数:实际参与运算的
形式参数:定义在方法上的,用于接收实际参数
⑤方法定义在类中但在主方法外
3)调用方式:
单独调用:方法名(变量名1,变量名2,…)一般没有意义
输出调用:System.out.println(单独调用)
赋值调用:用相同返回值类型的变量接收
4)注意事项:
方法不调用不执行
方法间是平级关系,不可嵌套定义
方法可使用常量参数
5)void类型
直接 函数名(参数列表);
@例题1:求两个数据之和的方法
1class Test{ 2public static void main(String args[]){ 3int x = 1; 4int y = -1; 5int z = sum(x,y) 6} 7public static int sum(int a,int b){ 8return a+b; 9} 10}
@例题2:输出任意长宽的矩形
1import java.util.Scanner; 2class Test{ 3public static void main(String args[]){ 4Scanner sc = new Scanner(System.in); 5 6int x = sc.nextInt(); 7int y = sc.nextInt(); 8print(x,y); 9} 10public static void print(int m,int n) { 11 int i=0,k=0; 12 13 for(;i<m;i++) { 14 for(;k<n;k++) { 15 System.out.print("*"); 16 } 17 System.out.print('\n'); 18 k=0; 19 } 20} 21}
2、方法重载
1)方法的功能相同,参数列表不同(参数数目、参数类型)时,java允许它们有相同的方法名
2)JVM依据参数列表识别,与返回值类型无关(即返回值类型可变)
@例题3:比较两个数据是否相等,参数类型分别为两个byte/short/int/longl类型,并进行测试
1public static boolean equ(int a,int b){ 2boolean x = a==b?true:false; 3return x; 4} 5public static boolean equ(byte a,byte b){ 6boolean x = a==b?true:false; 7return x; 8} 9//以此类推
3、数组
1) 数组是存储同一种数据类型的多个元素的集合,既可以存储基本数据类型,也可以存储引用数据类型
2)格式1:数据类型[]数组名;
格式2:数组类型 数组名[];
3)初始化方式:
①动态初始化:初始化只指定数组长度,由系统为 数组分配初始值
格式:数据类型[]数组名 = new 数据类型[数组长度];
eg:int[] arr = new int[3];
执行System.out.println(arr);
将输出arr的地址
用数组名和编号的配合就可以获取数组中相编号的元素,这个编号被称为索引,即:
数组名[索引];
索引从0开始,到n-1结束。
eg:System.out.println(arr[0]);
②静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型 [] 数组名 = new 数据类型【】(元素1,元素2,…);
简化格式:数据类型[] 数组名 = {元素1,元素2…};
4)内存分配:
①空间分类:
栈:存储局部变量(在方法声明中声明的变量称为局部变量)
堆:存储new出来的东西
方法区、本地的地区、寄存器
2)栈与堆的图示:
栈存函数名,函数名指向栈中相应数组首元素,堆存相应各元素

3)堆内存所赋默认值
byte/short/int/long 0
float ,double 0.0
char ‘\u0000’
boolean false
引用类型 null
栈内存的数据用完即被释放
4)数组赋值
类型 []数组名 = 另一数组名;
@例题4: 定义一个数组,输出该数组名(地址)和所有数组元素
1int []arr = new int[3]; 2System.out.println(arr); 3 4int i =0; 5for(;i<3;i++){ 6System.out.println(arr[i]); 7}
5)数组操作中的常见问题
①数组索引越界:访问到了数组中不存在的索引时发生
索引超过数组容量ArrayIndexOutOfBoundsException
②空指针异常:数组引用没有指向实体,却在操作实体中元素时
eg:arr = null;
System.out.println(arr[0]);
发生异常,数组已不再指向堆内存
NullPointerException
6)数组遍历:依次输出数组中的所有元素
使用循环
1//eg: 2int []arr = {...}; 3//用length接收数组长度 4int l = arr.length;//格式:数组名.length;
7)多个数组的遍历
利用方法改进:
1//参数列表:int[] 数组名 返回值类型:void 2//eg: 3public static void printArray(int[] arr){ 4... 5}
8)求数组的最值
1public static int maxNumber(int arr[]){ 2int max = arr[0]; 3for(int x = 1;x<arr.length;x++){ 4if(arr[x]>max){ 5max = arr[x]; 6} 7} 8return max; 9}
9)数组元素逆序
把0索引和arr.length-1的数据交换
把1索引和arr.length-2的数据交换
只要做到arr.length/2的时候即可
1public static reverse(int[]arr){ 2int i = 0; 3for(;i<=arr.length/2;i++){ 4int temp=arr[i]; 5arr[i]=arr[arr.length-i-1]; 6arr[arr.length-i-1]=temp; 7} 8}
10)数组查表
1//eg:查找星期 2class Array{ 3public static void main(String args[]){ 4String[] str ={"一","二","三"};//定义字符串数组
11)数组元素查找(查找指定元素第一次在数组中所在的位置)
1int x = 5; 2int[] arr = {1,2,3,4,5}; 3for(int i=0;i<ar.length;i++){ 4if(arr[i]==x){ 5System.out.println(i); 6break; 7} 8}