JAVASE第5天笔记

标签(空格分隔): 未分类


数组的概述(非常非常重要)

数组是什么?
可以存储同一数据类型数据的集合/容器
格式
数据类型[] 数组名 = new 数据类型[数组的长度];
int[] arr = new int[3];
char[] arr = new char[5];
double[] arr = new double[10];
数据类型: 基本数据类型 引用数据类型
基本数据类型 :四类八种
String 引用数据类型
String[] arr = new String[5];
分解
左边:
int:数据类型
[]:代表的数组,几个中括号就代表几维数组
arr:合法的标识符

    右边:
    new:创建新的实体或对象
    int:数据类型
    []:代表的数组
    5:代表数组的长度

数组的动态初始化(重要)

class DataArray_Demo {
    public static void main(String[] args) {
        /*
            什么是数组初始化? 为数组开辟连续的内存空间
            默认初始化值
            整数 0 小数 0.0 布尔 false char '\u0000'
            数组的动态初始化格式
            数据类型 [] 数组名 = new 数据类型[数组的长度];
        */
        int [] arr = new int[5];  //整型
        char [] arr1 = new char[10]; //字符型
        double [] arr2 = new double[5]; // 浮点型
        String [] arr3 = new String [5]; //字符串类型

        //问题: 怎么获取数组中元素?  
        // 数组名[索引/下标/角标]
        System.out.println(arr[0]);
        System.out.println(arr1[0]);
        System.out.println(arr2[0]);
        System.out.println(arr3[0]);
    }
}

数组的内存图(要会画出来)

内存分区:
栈内存 堆内存 方法区 本地方法区 寄存器
栈内存 堆内存
举例:int [] arr = new int[5] ;
栈内存 : 方法进栈 存放局部变量
堆内存 : new 出来的对象

内存图的练习

要求能够自己根据案例画出内存图 
    一个数组 两个数组 三个引用两个数组

疑问:

class ArrayDemo {
    public static void main(String[] args) {
        int [] arr1 = new int[5]; 
        int [] arr2;
        int [] arr3;
        //疑问: 没有初始化的引用数据类型,能直接用吗?不可以,要初始化后才在堆内存赋予默认值
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println(arr1[3]);
        System.out.println(arr1[4]);
    }
}

数组静态初始化(非常重要)

静态初始化
 一开始创建数组,直接给数组赋值
格式:
    数据类型 [] 数组名 = new 数据类型[] {元素1,元素2....}; 
    简写版本
    数据类型[] 数组名 = {元素1,元素二...};

注意事项:
    举例 int [] arr ;
            arr = {1,2,3...};
    简写版本不允许写成两条语句,标准版本可以.简写不可以!
    不允许动静结合
    举例 int [] arr = new int[5]{1,2,4,5,6}; //不允许!
    定义什么数据类型的就写什么类型的元素,不要搞错!
class ArrayDemo01 {
    public static void main(String[] args) {
        //静态初始化 简写版本
        int[] arr = {1,2,5,6};
        char [] arr2 = {'我','爱','超','帅'};
        double [] arr3 = {1.1,1.2,13.5,2.0};
        //标准版本
        int [] arr4 = new int[]{5,6,7,8};
        char [] arr5 = new char[]{'超','帅','很','帅'};
    }
}

数组两个异常(非常重要)

数组越界异常ArrayIndexOutOfBoundsException
空指针异常NullPointerException
class ArrayException_Demo {
    public static void main(String[] args) {
        //定义一个数组,开辟三个连续空间
        int[] arr = new int[3]; 
        //System.out.println(arr[5]); ///java.lang.ArrayIndexOutOfBoundsException: 5 越界异常
        //空指针异常 没有任何指向,地址值木有了....
        int [] arr2 = new int[4]; 
        arr2 = null;
        System.out.println(arr2[2]); java.lang.NullPointerException

    }
}

数组的遍历(非常非常非常重要)

遍历:把数组中的元素依次输出
属性: 数组名.length 可以求出数组的长度
int[] arr = {1,2,3,4,5};
for(int i = 0;i < arr.length;i++){
    System.out.println(arr[i]);
}
/*
* A:案例演示
    * 数组遍历:就是依次输出数组中的每一个元素。
    * 数组的属性:arr.length数组的长度
    * 数组的最大索引:arr.length - 1;
*/
class Demo8_Array {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};

        /*System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println(arr[3]);
        System.out.println(arr[4]);*/

        for (int i = 0;i < 5 ;i++ ) {
            System.out.println(arr[i]);
        }
        System.out.println("---------------");
        //arr.length 代表的是数组的长度
        System.out.println(arr.length);
        for (int i = 0;i < arr.length ;i++ ) {
            System.out.println(arr[i]);
        }

        int[] arr2 = {3,4,5};
        print(arr2);
    }

    /*
    数组的遍历
    1,返回值类型void
    2,参数列表int[] arr
    */

    public static void print(int[] arr) {
        for (int i = 0;i < arr.length ;i++ ) {
            System.out.print(arr[i] + " ");
        }
    }
}

获取最值(练习)

第一步: 创建一个数组
第二步: 先把数组中第一个元素 用一个变量存储起来
第三步: 遍历数组,然后拿刚才保存的第一个元素 逐个和第二个开始的元素比较,如果第一个元素小于第二个,那就交换,定个临时变量交换!
第四步:直至遍历完成,得到的那个变量就是最大值

数组反转(练习)

class ArrayReverseDemo {
    public static void main(String[] args) {
        //第一步 创建一个数组
        int [] arr = {11,22,33,44,55};
        //第二步: reverseArr
        int[] newArr = reverseArr(arr);
        for (int j = 0;j < newArr.length ;j++ )
        {
            System.out.print(newArr[j] + " ");
        }
    }

    public static int[] reverseArr(int[] oldArr){
        //思想 
        //第一步 创建一个新的数组,然后长度和你传进来的数组长度一样
        //第二步 把旧的数组元素 从后面开始 往前一个个 存到新的数组里面
        int [] newArr = new int[oldArr.length];
        //第三步 遍历
        for (int i = 0;i < oldArr.length ;i++ )
        {
            newArr[i] = oldArr[oldArr.length - 1 - i]; 
        }
        return newArr;
        /*
        for (int j = 0;j < newArr.length ;j++ )
        {
            System.out.print(newArr[j] + " ");
        }*/

    }
}

数组的查找(练习)

第一步: 创建一个数组
第二步: 定义一个方法,方法声明要求传入你要找的值和值所在的数组
第三步: 遍历数组,把数组中的元素逐个和你要找的元素匹配,如果能找到,返回这个数的角标,如果找不到,返回-1

二维数组(了解)

本质 
    其实就是一个一维数组,在一维数组里面放的是一维数组
定义
写法一 :数据类型 [] [] 数组名 = new 数据类型 [m][n];
写法二 :数据类型 [] 数组名 [] = new 数据类型[m][n];
举例:    
    int[][] arr = new int[3][2];
    int[] arr[] = new int[5][3];
格式二
    数据类型 [][] 数组名 = new 数据类型[m][];
    举例: 
        int[] [] arr = new arr[3][];
格式三
数据类型[][] 数组名 =           {元素一,元素二..},{元素一,元素二},{...}...};
举例 : int[] [] arr = {{1,2,3},{1,2,3},{...}...};
二维数组中多个一维数组的长度可以不同(之后学习),且存储的是一维数组的地址值。

二维数组的遍历(掌握)

/*
* A:案例演示
    * 需求:二维数组遍历

    * 外循环控制的是二维数组的长度,其实就是一维数组的个数。
    * 内循环控制的是一维数组的长度。

*/
class Test1_Array {
    public static void main(String[] args) {
        int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};

        for (int i = 0;i < arr.length ;i++ ) {          //获取到每个二维数组中的一维数组
            for (int j = 0;j < arr[i].length ;j++ ) {   //获取每个一维数组中的元素
                System.out.print(arr[1][1] + " ");
            }

            System.out.println();
        }
    }
}

二维数组的求和(遍历)

/*
* A:案例演示
* 
        需求:公司年销售额求和
        某公司按照季度和月份统计的数据如下:单位(万元)
        第一季度:22,66,44
        第二季度:77,33,88
        第三季度:25,45,65
        第四季度:11,66,99
*/
class Test2_Array {
    public static void main(String[] args) {
        int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};

        int sum = 0;                                    //定义变量,记录每次相加的结果
        for (int i = 0;i < arr.length ;i++ ) {          //获取每一个一维数组
            for (int j = 0;j < arr[i].length ;j++ ) {   //获取每一个一维数组中的元素
                sum = sum + arr[i][j];                  //累加
            }
        }

        System.out.println(sum);
    }
}

java中 参数传递问题(非常非常非常重要)

/*
基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问

Java中到底是传值还是传址
1,既是传值,也是传地址,基本数据类型传递的值,引用数据类型传递的地址
2,java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令(java之父))
*/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值