Java基础之方法、数组

此为个人学习笔记,如有错误,欢迎指教

八、函数

概述:

-在Java中也被称为函数
-使用{}括起来,封装完成某些功能的代码块

格式:

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…){
  函数体
  return 返回值
}
当返回值类型是void的时候格式(无返回值):
修饰符 void 方法名(参数类型 参数名1,参数类型 参数名2…){
  函数体;
}

说明:

-修饰符:public private 等
-返回值类型:限定此方法得到的值的数据类型
-方法名 :就是个名称
-参数类型:在执行方法体时需要的数据的类型
-return :return 值 ,此值的数据类型就是返回值类型;当时有返回值类型的时候可以看成为此方法的值(只理解),由return带给调用者;return结束该方法。

理解:参数类型与参数名,有点像声明1个变量,当该方法被调用的时候给参数赋值,在方法体内,变量被使用;

方法重载:

在同一类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可;

方法重载,只与方法名和参数列表来区分的,与返回值类型无关
在调用时,虚拟机通过参数列表的不同来区分同名方法;

九、数组

概述:

-存储 多个元素(同一种数据类型的) 的容器
-数组可以存储数据的类型:基本数据类型+引用数据类型

定义的格式:

-数据类型[] 数组名;推荐使用这种,工作中也常用这种
-数据类型 数组名;

数组的初始化:

-Java中的数组必须先初始化才能使用(就跟变量也得初始化才能使用)
-数组的初始化:为数组中的数组元素分配了内存空间;
-动态初始化:指定数组长度,由系统为数组分配初始值;
    数据类型[] 数组名 = new 数据类型[数组长度];
-静态初始化:指定每个数组元素的值,由系统决定数组长度;
    数据类型[] 数组名 = new 数据类型[]{数据1,数据2……数据n};
-数组是带有编号的,下标的,索引的
-数组是引用类型

各种图说明

1) 图说明在创建一个数组时内存中的流程(创建一个对象)


Java基础之方法、数组_第1张图片

2) 数组的赋值及取值时内存中的流程:图和代码结合


Java基础之方法、数组_第2张图片
图数组元素赋值取值
    图数组元素赋值取值  对应的代码
public class ArrayDemo2 {

    public static void main(String[] args) {
        int[] arr1 = new int[3];
        /*
         arr1[0] = 11;把11赋值给数组中下标为0的元素
         拿着值11按照线路寻找,使用11替代原有的值
         line1->line2->line3-line4->改值
         */
        arr1[0] = 11;
        /*
         arr1[1] = 22;把11赋值给数组中下标为1的元素
         拿着值22按照线路寻找,使用11替代原有的值
         line1->line2->line5-line6->改值
         */
        arr1[1] = 22;
        /*
         arr1[2] = 33;把11赋值给数组中下标为2的元素
         拿着值33按照线路寻找,使用33替代原有的值
         line1->line2->line7-line8->改值
         */
        arr1[2] = 33;
        /*
         找值:arr1 = line1 = 0x0001
         0x0001是演示过程中为了方便随便写的,输出的才是真正的地址值;
         */
        System.out.println(arr1);//输出:[I@7852e922
        /*
         找值:arr1[0] = line1->line2->line3-line4->取值=11
         */
        System.out.println(arr1[0]);//输出:11
        /*
         找值:arr1[1] = line1->line2->line5-line6->取值=22
         */
        System.out.println(arr1[1]);//输出:22
        /*
         找值:arr1[1] = line1->line2->line7-line8->取值=33
         */
        System.out.println(arr1[2]);//输出:33
        //与arr1是一样的;
        int[] arr2 = new int[3];
        arr2[0] = 111;
        arr2[2] = 333;
        System.out.println(arr2);//输出:[I@4e25154f
        System.out.println(arr2[0]);//输出:111
        //arr2[1]没有改过值,所以还是默认值0
        System.out.println(arr2[1]);//输出:0
        System.out.println(arr2[2]);//输出:333
        
        /*
         int[] arr3 = arr1;arr1 = 0x0001
         所以 arr3 = 0x0001;
         */
        int[] arr3 = arr1;
        //
        /*
         arr3在内存中指向的是0x0001,所以改值走的也是0x0001的线
         arr3[0] = 100;把11赋值给数组中下标为0的元素
         拿着值100按照线路寻找,使用100替代原有的值
             line31->line32->line3-line4->改值为100
         */
        arr3[0] = 100;
        /*
         arr3在内存中指向的是0x0001,所以改值走的也是0x0001的线
         arr3[0] = 200;把200赋值给数组中下标为0的元素
         拿着值200按照线路寻找,使用200替代原有的值
         line31->line32->line5-line6->改值为200
         */
        arr3[1] = 200;
        System.out.println(arr3);//输出:[I@7852e922
        /*
         找值:arr3[0] = line31->line32->line3-line4->取值=100
         */
        System.out.println(arr3[0]);//输出:100
        System.out.println(arr3[1]);//输出:200
        /*
         没有使用arr3更改过此值,所以取的还是33
         找值:arr3[2] = line31->line32->line7-line8->取值=33
         */
        System.out.println(arr3[2]);//输出:33
        
        /**
         使用arr1改值,arr3拿值,取的值是最后更改过的值,
         原因就在与arr1和arr3执行的是同一个内存地址;
         */
        arr1[2] = 300;
        System.out.println(arr3[2]);//输出:300
        
    }
}

使用:

数组遍历(依次输出数组中的每一个元素)
数组获取最值(获取数组中的最大值最小值)
数组元素逆序 (就是把元素对调)
数组查表法(根据键盘录入索引,查找对应星期)
数组元素查找(查找指定元素第一次在数组中出现的索引)
在demo中

二维数组:

概述:

元素为一个数组的数组就是二维数组

格式:

格式1:
int[][] arr = new int[m][n];
m是二维数组的长度,n是元素数组的长度;
格式2:静态初始化,给定数组值,由系统给出数组长度
int[][] arr = new int[m][];
m是二维数组的长度
格式3:静态初始化,给定数组值,由系统给出数组长度
int[][] arr = new int[][]{{1,2,3},{4,5,6}};

各种图说明

二维数组的初始化、赋值、取值过程(格式1)


Java基础之方法、数组_第3张图片

二维数组的初始化、赋值、取值过程(格式2)
(格式1和格式2,在内存不同在于一维数组元素是先分配还是后分配)


Java基础之方法、数组_第4张图片

二维数组的初始化、赋值、取值过程(格式3)


Java基础之方法、数组_第5张图片

使用:

  查看demo

思考:

Java中参数传递问题


Java基础之方法、数组_第6张图片
图-参数传递
/**
 * Java中参数传递:与图-参数传递配合
 * @author sexyhair
 */
public class ArrayDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        change(a,b);
        System.out.println("main(String[] args)--a="+a+",b="+b);
        int[] arr = new int[]{1,2,3,4,5};
        change(arr);
        System.out.println("main(String[] args)--arr[1]="+arr[1]);
    }
    
    public static void change(int a ,int b){
        a = b;
        b = a+b;
        System.out.println("change(int a ,int b)--a="+a+",b="+b);
    }
    public static void change(int[] arr){
        String str = "[";
        for(int i = 0 ; i < arr.length ; i++){
            if(arr[i] % 2 == 0){
                arr[i]*=2;
            }
            str = str+arr[i]+" ";
            if(i == arr.length-1){
                str = str+"] ";
            }
        }
        System.out.println("change(int[] arr)-----"+str);
    }
}
参考书籍视频:
-学习视频:黑马程序员_Java基础视频-深入浅出精华版
-阅读书籍:Java核心技术 卷I(机械工业出版社)
          API1.8

你可能感兴趣的:(Java基础之方法、数组)