05.01 方法概述和格式说明
简单的说:方法就是完成特定功能的代码块
在很多语言里面都有函数的定义,函数在Java中被称为方法
格式:
修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2...)
{
函数体;
return 返回值;
}
方法格式解释:
修饰符:后面会详细介绍。目前public static
返回值类型:用于限定返回值的数据类型
方法名:一个名称,方便我们调用方法
参数类型:限定调用方法时传入参数的数据类型
参数名:是一个变量,接收调用方法时传入的参数
方法体:完成功能的代码
return:结束方法以及返回方法指定类型的值
返回值:程序被return带回的结果,返回给调用者
05.02 方法的定义求和案例
根据两个明确来写一个方法
1.返回值类型,明确功能结果的数据类型
2.参数列表,明确有几个参数,以及参数的类型
例:求两个数据之和
1 public static int add(int i,int j) 2 { 3 return i+j; 4 }
05.03 方法的调用有明确返回值的方法调用
有明确返回值的方法调用:
1. 单独调用,没有意义
例:add(2,3);
2. 输出调用,有意义,但是不够好,因为不一定要把结果输出
例:System.out.println(result);
3. 赋值调用,推荐方式
例:int result = add(2,3);
System.out.println(result);
05.04 方法的调用图解
05.05 方法的练习1获取两个数中的较大值
键盘录入两个数据,返回两个数中的较大值
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入第1个数:"); 8 int num1 = sc.nextInt(); 9 System.out.println("请输入第2个数:"); 10 int num2 = sc.nextInt(); 11 int max = getMax(num1 , num2); 12 System.out.println("较大的数是:"+max); 13 } 14 //返回值类型:int 15 //参数列表:int i,int j 16 public static int getMax(int i,int j) 17 { 18 return (i > j)? i : j; 19 } 20 }
运行结果:
请输入第1个数: 43 请输入第2个数: 56 较大的数是:56
05.06 方法的练习2比较两个数是否相等
键盘录入两个数据,比较两个数是否相等
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入第1个数:"); 8 int num1 = sc.nextInt(); 9 System.out.println("请输入第2个数:"); 10 int num2 = sc.nextInt(); 11 boolean flag = compare(num1 , num2); 12 System.out.println("比较结果:"+flag); 13 } 14 //返回值类型:boolean 15 //参数列表:int i,int j 16 public static boolean compare(int i,int j) 17 { 18 return i == j; 19 } 20 }
运行结果:
请输入第1个数: 34 请输入第2个数: 65 比较结果:false
05.07 方法的练习3获取三个数中的最大值
键盘录入三个数据,返回三个数中的最大值
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入第1个数:"); 8 int num1 = sc.nextInt(); 9 System.out.println("请输入第2个数:"); 10 int num2 = sc.nextInt(); 11 System.out.println("请输入第3个数:"); 12 int num3 = sc.nextInt(); 13 int max = getMax(num1 , num2 ,num3); 14 System.out.println("最大的数是:"+max); 15 } 16 //返回值类型:int 17 //参数列表:int a,int b,int c 18 public static int getMax(int a,int b,int c) 19 { 20 int temp = (a > b)?a : b; 21 int max = (temp > c)?temp : c; 22 return max; 23 } 24 }
运行结果:
请输入第1个数: 23 请输入第2个数: 54 请输入第3个数: 21 最大的数是:54
05.08 方法的注意事项
1.方法不调用不执行
2.方法与方法之间是平级关系,不能嵌套定义
3.方法定义的时候参数之间用逗号隔开
4.方法调用的时候不用再传递数据类型
5.如果方法有明确的返回值,一定要有return返回一个值
05.09 方法的调用void类型方法的定义和调用
没有明确返回值的函数调用:其实就是void类型方法的调用,只能单独调用
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 print(3,4); 6 } 7 //返回值类型:没有明确的返回值,用void 8 //参数列表:int m,int n 9 public static void print(int m,int n) 10 { 11 for(int i = 0;i < m;i++) 12 { 13 for(int j = 0;j <n;j++) 14 { 15 System.out.print("* "); 16 } 17 System.out.println(); 18 } 19 } 20 }
运行结果:
* * * *
* * * *
* * * *
05.10 方法的练习4根据行数和列数输出星形
键盘录入行数和列数,输出对应的星形
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入行数:"); 8 int row = sc.nextInt(); 9 System.out.println("请输入列数:"); 10 int col = sc.nextInt(); 11 print(row,col); 12 } 13 //返回值类型:void 14 //参数列表:int m,int n 15 public static void print(int m,int n) 16 { 17 for(int i = 0;i < m;i++) 18 { 19 for(int j = 0;j <n;j++) 20 { 21 System.out.print("* "); 22 } 23 System.out.println(); 24 } 25 } 26 }
运行结果:
请输入行数: 4 请输入列数: 5 * * * * * * * * * * * * * * * * * * * *
05.11 方法的练习5根据键盘录入输出对应的乘法表
键盘录入一个数据n(1<=n<=9),输出对应的nn乘法表
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 Scanner sc = new Scanner(System.in); 7 System.out.println("请输入一个数(1~9):"); 8 int num = sc.nextInt(); 9 print(num); 10 } 11 //返回值类型:void 12 //参数列表:int m 13 public static void print(int m) 14 { 15 for(int i = 1;i <= m;i++) 16 { 17 for(int j = 1;j <= i;j++) 18 { 19 System.out.print(j+"*"+i+"="+(i*j)+" "); 20 } 21 System.out.println(); 22 } 23 } 24 }
运行结果:
请输入一个数(1~9):
3
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
05.12 方法重载概述和基本使用
方法法重载概述:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
方法重载特点:与返回值类型无关,只看方法名和参数列表,在调用时,虚拟机通过参数列表的不同来区分同名方法。
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int result1 = add(2,3); 6 System.out.println("result1 = "+result1); 7 int result2 = add(2,3,4); 8 System.out.println("result2 = "+result2); 9 } 10 //求2个数的和 11 public static int add(int a,int b) 12 { 13 return a + b; 14 } 15 //求3个数的和 16 public static int add(int a,int b,int c) 17 { 18 return a + b + c; 19 } 20 }
运行结果:
result1 = 5
result2 = 9
05.13 方法重载练习比较数据是否相等
比较两个数据是否相等
参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型,并在main方法中进行测试
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 //测试byte 6 byte b1 = 2; 7 byte b2 = 3; 8 System.out.println("byte:"+compare(b1,b2)); 9 10 //测试short 11 short s1 = 5; 12 short s2 = 5; 13 System.out.println("short:"+compare(s1,s2)); 14 15 //测试int 16 int i1 = 6; 17 int i2 = 7; 18 System.out.println("int:"+compare(i1,i2)); 19 20 //测试long 21 long l1 = 6788; 22 int l2 = 6788; 23 System.out.println("long:"+compare(l1,l2)); 24 } 25 //byte类型 26 public static boolean compare(byte a,byte b) 27 { 28 return a == b; 29 } 30 31 //short类型 32 public static boolean compare(short a,short b) 33 { 34 return a == b; 35 } 36 37 //int类型 38 public static boolean compare(int a,int b) 39 { 40 return a == b; 41 } 42 43 //long类型 44 public static boolean compare(long a,long b) 45 { 46 return a == b; 47 } 48 }
05.14 数组概述和定义格式说明
数组概念:
1.数组是存储同一种数据类型多个元素的集合,也可以看成是一个容器。
2.数组既可以存储基本数据类型,也可以存储引用数据类型。
数组的定义格式:
格式1:数据类型[] 数组名; 例:int[] arr;
格式2:数据类型数组名[]; 例:int arr[];
注意:这两种定义做完了,数组中的元素是没有值的
05.15 数组的初始化动态初始化
数组初始化概述:Java中的数组必须先初始化,然后才能使用。
初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
数组的初始化方式:
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
格式:数据类型[] 数组名 = new 数据类型[数组长度];数组长度其实就是数组中元素的个数。
例:int[] arr = new int[3];
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值。
数组中的每个元素都是有编号的,编号从0开始到数组的长度减1,用数组名与编号的配合就可以获取数组中指定编号的元素,编号的专业名称叫索引,格式:数组名[索引]
05.16 Java中的内存分配以及栈和堆的区别
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
1.栈:存储局部变量
2.堆:存储new出来的东西
3.方法区:(面向对象)
4.本地方法区:(和系统相关)
5.寄存器:(给CPU使用)
局部变量:方法定义中或者方法声明上的所有变量,使用完毕,立即消失
栈内存:存储的都是局部变量,局部变量就是定义在方法中的变量,局部变量所属的作用域一旦结束,该变量就自动释放
堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的对象都在堆中
堆内存特点:
1.每一个实体都有首地址值
2.堆内存中的每一个变量都有默认初始化值,根据数据类型的不同而不同
byte、short、int、long默认为0
float、double默认为0.0或0.0f
boolean默认为false
char默认为'u0000'
引用类型默认为null
3.使用完毕后,会被垃圾回收器空闲的时候回收
05.17 数组的内存图解1一个数组
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[] arr = new int[3]; 6 7 //输出数组名称 8 System.out.println(arr); 9 10 //输出数组元素值 11 System.out.println(arr[0]); 12 System.out.println(arr[1]); 13 System.out.println(arr[2]); 14 15 //给数组元素赋值 16 arr[0] = 100; 17 arr[2] = 200; 18 19 //输出数组名称 20 System.out.println(arr); 21 22 //输出数组元素值 23 System.out.println(arr[0]); 24 System.out.println(arr[1]); 25 System.out.println(arr[2]); 26 } 27 }
运行结果:
[I@1175422 ( [表示数组实体 I表示Int型 1175422表示十六进制哈希值 ) 0 0 0 [I@1175422 100 0 200
图解:
05.18 数组的内存图解2二个数组
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[] arr1 = new int[2]; 6 int[] arr2 = new int[3]; 7 8 arr1[1] = 10; 9 arr2[0] = 30; 10 arr2[1] = 20; 11 12 System.out.println(arr1); 13 System.out.println(arr1[0]); 14 System.out.println(arr1[1]); 15 16 System.out.println(arr2); 17 System.out.println(arr2[0]); 18 System.out.println(arr2[1]); 19 System.out.println(arr2[2]); 20 } 21 }
运行结果:
[I@1175422
0
10
[I@949f69
30
20
0
图解:
05.19 数组的内存图解3三个数组
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[] arr1 = new int[3]; 6 arr1[0] = 10; 7 arr1[1] = 20; 8 arr1[2] = 30; 9 10 int[] arr2 = new int[3]; 11 arr2[0] = 50; 12 arr2[1] = 60; 13 arr2[2] = 70; 14 15 int[] arr3 = arr1; 16 arr3[0] = 100; 17 arr3[1] = 200; 18 19 System.out.println(arr1); 20 System.out.println(arr1[0]); 21 System.out.println(arr1[1]); 22 System.out.println(arr1[2]); 23 24 System.out.println(arr2); 25 System.out.println(arr2[0]); 26 System.out.println(arr2[1]); 27 System.out.println(arr2[2]); 28 } 29 }
运行结果:
[I@1175422
100
200
30
[I@949f69
50
60
70
图解:
05.20 数组的初始化静态初始化及内存图
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
例:int[] arr = new int[]{1,2,3};
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
简化写法:int[] arr = {1,2,3};
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[] arr = {1,2,3}; 6 System.out.println(arr); 7 System.out.println(arr[0]); 8 System.out.println(arr[1]); 9 System.out.println(arr[2]); 10 } 11 }
运行结果:
[I@1175422 1 2 3
图解:
注意:不能同时进行动态初始化和静态初始化
05.21 数组操作的两个常见小问题越界和空指针
05.22 数组的操作1遍历
数组遍历(依次输出数组中的每一个元素)
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[] arr = {12,32,11,5,23}; 6 System.out.print("["); 7 //arr.length返回数组的长度 8 for(int i = 0;i < arr.length;i++) 9 { 10 if(i == arr.length-1) 11 System.out.println(arr[i]+"]"); 12 else 13 System.out.print(arr[i]+","); 14 } 15 } 16 }
运行结果:
[12,32,11,5,23]
05.23 数组的操作2获取最值
数组获取最值(获取数组中的最大值最小值)
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[] arr = {12,32,11,5,23,56,15,27}; 6 //假设第1个数是最大的 7 int max = arr[0]; 8 //从第2个数开始遍历,依次与max比较 9 for(int i = 1;i < arr.length;i++) 10 { 11 if(arr[i] > max) 12 max = arr[i]; 13 } 14 System.out.println("最大的数是:"+max); 15 } 16 }
运行结果:
最大的数是:56
05.24 数组的操作3逆序
数组元素逆序 (就是把元素对调)
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[] arr = {12,3,1,35,23}; 6 System.out.print("逆序前:"); 7 print(arr); 8 reverse2(arr); 9 System.out.print("逆序后:"); 10 print(arr); 11 } 12 //方法1 13 public static void reverse1(int[] arr) 14 { 15 for(int i = 0;i < arr.length / 2;i++) 16 { 17 int temp = arr[i]; 18 arr[i] = arr[arr.length-1-i]; 19 arr[arr.length-1-i] = temp; 20 } 21 } 22 //方法2 23 public static void reverse2(int[] arr) 24 { 25 for(int start = 0,end = arr.length - 1;start <= end;start++,end--) 26 { 27 int temp = arr[start]; 28 arr[start] = arr[end]; 29 arr[end] = temp; 30 } 31 } 32 //遍历数组的方法 33 public static void print(int[] arr) 34 { 35 System.out.print("["); 36 for(int i = 0;i < arr.length;i++) 37 { 38 if(i == arr.length-1) 39 System.out.println(arr[i]+"]"); 40 else 41 System.out.print(arr[i]+","); 42 } 43 } 44 }
运行结果:
逆序前:[12,3,1,35,23]
逆序后:[23,35,1,3,12]
05.25 数组的操作4查表法
数组查表法(根据键盘录入索引,查找对应星期)
1 import java.util.Scanner; 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 //定义一个字符串数组 7 String[] strArray = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"}; 8 Scanner sc = new Scanner(System.in); 9 System.out.println("请输入一个数(1~7):"); 10 int index = sc.nextInt(); 11 if(index > 7 || index < 1) 12 System.out.println("数据输入错误"); 13 else 14 System.out.println(index+"对应"+strArray[index-1]); 15 } 16 }
运行结果:
请输入一个数(1~7): 1 1对应星期一
05.26 数组的操作5基本查找
数组元素查找(查找指定元素第一次在数组中出现的索引)
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 int[] arr = {23,12,26,73,14,27}; 6 int index = getIndex(arr,14); 7 if(index == -1) 8 System.out.println("没有找到该数"); 9 else 10 System.out.println("找到该数,在第"+index+"位"); 11 } 12 //返回值类型:int 13 //参数列表:int[] arr,int key 14 public static int getIndex(int[] arr,int key) 15 { 16 for(int i = 0;i < arr.length;i++) 17 { 18 if(arr[i] == key) 19 return i; 20 } 21 //没有找到返回-1 22 return -1; 23 } 24 }
运行结果:
找到该数,在第4位