JAVASE第5天笔记

来源:互联网 发布:淘宝脱毛仪器有效果吗 编辑:程序博客网 时间:2024/06/07 06:37

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


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

数组是什么?
可以存储同一数据类型数据的集合/容器
格式
数据类型[] 数组名 = 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之父))
*/

0 0
原创粉丝点击