目录
1.方法
1.1 方法的概念
- 就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。 当我 们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象
1.2 方法的格式
//1.有返回值类型的方法定义格式
public static 返回值类型 方法名(参数列表){
方法体...
return 返回值;
}
//2.无返回值的方法定格式:
public static void 方法名(参数列表){
方法体...
}
格式组成解释
- 修饰符:目前固定写法 public static 返回值类型 用于限定返回值的数据类型
- 方法名 一个名称,为了方便我们调用方法
- 参数类型 限定调用方法时传入参数的数据类型
- 参数名 是一个变量,接收调用方法时传入的参数
- 方法体 完成功能的代码 return 结束方法以及返回方法指定类型的值
- 返回值 程序被return带回的结果,返回给调用者
1.3 方法的调用
有明确返回值的方法调用:
- 单独调用,没有意义
- 输出调用,有意义,但是不够好,因为我不一定非要把结果输出
- 赋值调用,推荐方式
无明确返回值的方法调用:
- 其实就是void类型方法的调用 只能单独调用
例题
import java.util.Scanner;
class Array{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
int[] arr = new int[5];
for(int i=0 ;i <5;i++){
arr[i] = sc.nextInt();
}
System.out.println("排序前");
ergodic(arr); //调用无返回值类型方法----遍历
choice(arr); //调用无返回值类型方法----选择排序
System.out.println("排序后");
ergodic(arr); //调用无返回值类型方法----遍历
int result = table(arr); //调用有返回值类型方法---查询
System.out.println("所查元素的索引值为:"+result);
}
//遍历
public static void ergodic(int[] arr){
System.out.print("{");
for(int i=0; i<arr.length;i++){
if(i==arr.length-1){
System.out.println(arr[i]+"}");
}else{
System.out.print(arr[i]+",");
}
}
}
//选择排序
public static void choice(int[] arr){
for(int i=0;i<arr.length-1;i++){
int min=i;
for(int j=i+1; j<arr.length;j++){
if(arr[j]<arr[min]){
min = j;
}
}
if(i!=min){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
//查询数组元素索引值
public static int table(int[] arr){
Scanner sx = new Scanner(System.in);
System.out.println("请输入需要查询的数字:");
int a = sx.nextInt();
for(int i=0; i<arr.length;i++){
if(a==arr[i]){
return i;
}
}
return 0;
}
}
1.4方法的重载
定义:
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
- 方法名相同,参数列表不同
1)参数类型一样,参数个数 不一样( 或参数的前后位置不同)
2)参数类型不同
2.数组
是我学习的第一个引用类型
2.1 数组的概念
- 数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
- 数组既可以存储基本数据类型,也可以存储引用数据类型。
2.2 数组定义的格式
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
例
//格式一 int[] array;//推荐格式一,其可读性更强 //格式二 int array[];
2.3 数组的初始化
为什么要初始化?
- Java中的数组必须先初始化,然后才能使用。
- 所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
数组初始化的方式
- 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
- 静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
动态初始化格式;
格式:数据类型[] 数组名 = new 数据类型[数组长度];
例
int[] array = new int[5]; //解释:定义了一个int类型的数组,这个数组中可以存放5个int类型的值。
- 就是如何取得数组中的元素呢?
数组为每个元素都分配了编号,从0开始。获取的时候只要数组名配合编号即可。 最大编号是长度-1。这个编号专业叫法称:索引
静态初始化格式:
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
int[] array = new int[]{1,2,4,5,6,8}; //简写方法 int[] array = {1,2,4,5,6,8}
解释:定义了一个int类型的数组,这个数组中可以存放6个int类型的值,并且值分别是1,2,4,5,6,8。
注意:但是一定要注意不能同时进行动态初始化和静态初始化
2.4 数组中常见的两个小问题
- 数组索引越界 ArrayIndexOutOfBoundsException 访问到了数组中的不存在的索引时发生。
- 空指针异常 NullPointerException 数组引用没有指向实体,却在操作实体中的元素时。
2.5 Java中的内存分配
Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分, 因为每一片区域都有特定的处理数据方式和内存管理方式。
- 栈 存储局部变量
- 堆 存储new出来的东西
- 方法区(面向对象部分讲)
- 本地方法区(和系统相关)
- 寄存器(给CPU使用
2.6 二维数组
概述:它就是一个包含多个一维数组的数组!
定义格式:
- 数据类型[] 数组名称[] ;
- 数据类型[][] 数组名称 ;
二维数组的初始化
动态初始化:
格式1:数据类型[][] 数组名称 = new 数据类型 [m][n];
- m:表示有m个一维数组
- n:表示每一个一维数组的长度
int[][] arr = new int[3][2] ; int[] arr[] = new int[3][2] ;
二维数组格式2:
数据类型[][] 数组名称 = new 数据类型[m][] ;
数据类型[] 数组名称[] = new 数据类型[m][] ;int[] arr[] = new int[2][] ;
静态初始化
二维数组格式3 (标准格式)
数据类型[][] 数组名称 =new 数据类型[][]{{元素1,元素2,...},{元素1,元素2...},{元素1,元素2...}};int[][] arr = new int[3][2]{{1,2,3},{4,5,6}} ; //简化 int[][] arr = {{1,2,3},{4,5,6}} ;
练习
二维数组的遍历
class Array2Test3{ public static void main(String[] args){ //定义一个二维数组,静态初始化 int[][] arr = {{1,2,3},{4,5},{6}} ; //编程题 printArray2(arr) ; } //二维数组的遍历 public static void printArray2(int[][] arr){ //输出:"{" System.out.print("{") ; //开始遍历二维数组 //外层循环arr.length :当前整个一维数组的个数 for(int x = 0 ; x < arr.length ; x ++){ System.out.print("{") ; //先输出:一个{ //内层循环:遍历每一个一维数组 for(int y = 0 ; y < arr[x].length ; y ++){ //当前已经取到了最后一个一维数组: 元素内容arr[x][y]以及带一个"}" if(x == arr.length-1){ System.out.print(arr[x][y]+"}") ; }else if( y==arr[x].length-1) { //如果是中间的元素并且是取到一维数组的最后一个元素 System.out.print(arr[x][y]+"}"+",") ; }else{ //中间的每一元素 System.out.print(arr[x][y]+",") ; } } } //输出"}" System.out.print("}") ; } }
运行结果
2.7数组的高级排序:冒泡排序
冒泡排序的思想:
相邻两两比较,大的往后放,第一次比较完毕,最大值就出现在最大索引处,依次这样比较。
代码
class TestBubbling{
public static void main(String[] args){
int[] array = {15,16,24,1,19,29,41,13};
Ergodic(array); // 调用遍历
bubbling(array); //调用冒泡排序的方法
Ergodic(array); // 调用遍历
}
//冒泡排序方法:从大到小的排序
public static void bubbling(int[] array){
for(int i = 0; i < array.length-1;i++){
for(int j = 0; j < array.length-i-1;j++){
if(array[j]<array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
//遍历数组
public static void Ergodic(int[] arr){
System.out.print("[");
for(int i = 0; i < arr.length; i++){
if(i==arr.length-1){
System.out.println(arr[i]+"]");
}else{
System.out.print(arr[i]+", ");
}
}
}
}
结果