Java基础应用

1、数组

1.1数组的介绍:

            数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。

1.2数组的定义:

1.2.1 第一种格式

数据类型[ ] 数组名

示例:

int[] arr;        
double[] arr;      
char[] arr;
1.2.2 第二种格式

数据类型 数组名[]

示例:

int arr[];
double arr[];
char arr[];

1.3数组的初始化:

1.3.1动态初始化数组

数组动态初始化就是只给定数组的长度,由系统给出默认初始化值

1.3.1 动态初始化格式
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
1.3.2 动态初始化格式详解
  • 等号左边:

    • int:数组的数据类型

    • [ ]:代表这是一个数组

    • arr:代表数组的名称

  • 等号右边:

    • new:为数组开辟内存空间

    • int:数组的数据类型

    • [ ]:代表这是一个数组

    • 5:代表数组的长度

    • package com.wedu.array;
      
      public class Demo2Array {
          /*
              数组的动态初始化:
                              在初始化的时候, 需要手动指定数组的长度, 系统会为数组容器分配初始值.
      
              动态初始化格式:
                              数据类型[] 数组名 = new 数据类型[数组的长度];
      
              注意:
                              打印数组变量的时候, 会打印出数组的内存地址
      
              [I@10f87f48 :
      
                              @ : 分隔符
                              [ : 当前的空间是一个数组类型
                              I : 当前数组容器中所存储的数据类型
                              10f87f48 : 十六进制内存地址
      
                                      0 1 2 3 4 5 6 7 8 9 a b c d e f
           */
          public static void main(String[] args) {
              // 数据类型[] 数组名 = new 数据类型[数组的长度];
              // 通过new关键字创建了一个int类型的数组容器, 该容器可以存储5个int类型的整数, 该容器被arr数组变量所记录
              int[] arr = new int[5];
              // [I@10f87f48
              System.out.println(arr);
      
              byte[] bArr = new byte[3];
              // [B@b4c966a
              System.out.println(bArr);
      
          }
      }
      
1.3.3静态初始化数组

在创建数组时,直接将元素确定

  • 完整版格式

    数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
  • 简化版格式

    数据类型[] 数组名 = {元素1,元素2,...};
        示例代码

                

package com.wedu.array2;

public class Demo1Array {
    /*
        数组静态初始化 : 初始化时指定每个数组元素的初始值,由系统决定数组长度

        完整格式:
                    数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};
        简化格式:
                    数据类型[] 数组名 = {数据1,数据2,数据3...};
     */
    public static void main(String[] args) {
        // 数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};
        int[] arr = new int[]{11,22,33};
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        // 数据类型[] 数组名 = {数据1,数据2,数据3...};
        int[] arr2 = {44,55,66};
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);

    }
}

1.4数组的元素访问

1.4.1什么是索引

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。

这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。

1.4.2访问数组元素的格式

数组名[索引];

示例代码
package com.wedu.array;

public class Demo3ArrayIndex {
    /*
        数组动态初始化:
                初始化的时候, 手动指定数组长度, 系统会为数组容器分配初始值.

        数组的元素访问格式:
                数组名[索引]

                索引: 数组中数据的编号方式, 编号从0开始
                作用: 访问数组容器中的空间位置

        注意:
                数组在创建完毕后, 即使没有赋值, 也可以取出, 但取出的元素都是默认初始化值.

     */
    public static void main(String[] args) {
        int[] arr = new int[3];         // 0 1 2
        System.out.println(arr);        // 数组的内存地址  [I@10f87f48

        // 数组名[索引]  访问数组容器中的空间位置
        System.out.println(arr[0]);     // 0  系统自动分配的默认初始化值
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        System.out.println("--------------");

        // 数组名[索引]
        arr[0] = 11;
        arr[1] = 22;
        arr[2] = 33;

        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

1.4.2数组的遍历

  • 数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。

    public class ArrayTest01 {
        public static void main(String[] args) {
            int[] arr = { 1, 2, 3, 4, 5 };
            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]);
        }
    }

    以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。

    public class ArrayTest01 {
        public static void main(String[] args) {
            //定义数组
            int[] arr = {11, 22, 33, 44, 55};
    ​
            //使用通用的遍历格式
            for(int x=0; x<arr.length; x++) {
                System.out.println(arr[x]);
            }
        }
    }

1.5数组的两个常见问题

1.5.1索引越界

索引越界异常
  • 出现原因

    public class ArrayDemo {
        public static void main(String[] args) {
            int[] arr = new int[3];
            System.out.println(arr[3]);
        }
    }

    数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。

    程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

  • 解决方案

    将错误的索引修改为正确的索引范围即可!

1.5.2空指针异常

  • 出现原因

    public class ArrayDemo {
        public static void main(String[] args) {
            int[] arr = new int[3];
    ​
            //把null赋值给数组
            arr = null;
            System.out.println(arr[0]);
        }
    }

    arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,空指针异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

  • 解决方案

    给数组一个真正的堆内存空间引用即可!

1.6基础练习

1.6.1数据交换

案例需求

已知两个整数变量a = 10,b = 20,使用程序实现这两个变量的数据交换 ​ 最终输出a = 20,b = 10;

package com.wedu.test;
public class Test1 {
    /*
        需求:已知两个整数变量a = 10,b = 20,使用程序实现这两个变量的数据交换
        最终输出a = 20,b = 10;
        思路:
        1. 定义一个三方变量temp,将a原本记录的值,交给temp记录 (a的值,不会丢了)
        2. 使用 a 变量记录 b 的值,(第一步交换完毕,b的值也丢不了了)
        3. 使用 b 变量记录 temp的值,也就是a原本的值 (交换完毕)
        4. 输出 a 和 b 变量即可
     */
    /*
        动态初始化格式:
            数据类型[][] 变量名 = new 数据类型[m][n];
            m表示这个二维数组,可以存放多少个一维数组
            n表示每一个一维数组,可以存放多少个元素
     */
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        // 将a原本记录的值,交给temp记录 (a的值,不会丢了)
        int temp = a;
        // 用 a 变量记录 b 的值,(第一步交换完毕,b的值也丢不了了)
        a = b;
        // 使用 b 变量记录 temp的值,也就是a原本的值 (交换完毕)
        b = temp;
        // 输出 a 和 b 变量即可
        System.out.println("a=" + a);
        System.out.println("b=" + b);
    }
}

1.6.2数组反转

案例需求:

                请将”我” “爱” “中”“国”存入数组,然后正着和反着输出

package CombinedTraning;

import java.util.Scanner;

public class qwe {

    public static void main(String[] args) {
        //1.请将”我” “爱” “中”“国”存入数组,然后正着和反着输出
        String[] arr={"我","爱","中","国"};
        //正向
        for (String s : arr) {
            System.out.print(s+" ");
        }
        //定义两个指针
        int left=0;
        int right= arr.length-1;
        for (int i = 0; i < arr.length; i++) {
            if (left<right) {
                String temp = arr[left];
                arr[left] = arr[right];
                arr[right] = temp;
            }
            left++;right--;
        }
        System.out.println();
        //逆向
        for (String s : arr) {
            System.out.print(s+" ");
        }
    }
}

1.7二维数组

1.7.1 二维数组概述

概述 : 二维数组也是一种容器,不同于一维数组,该容器存储的都是一维数组容器

1.7.2静态初始化

*完整格式 :** 数据类型[][] 变量名 = new 数据类型[][]{ {元素1, 元素2...} , {元素1, 元素2...} 

**简化格式 :**  数据类型[][] 变量名 = { {元素1, 元素2...} , {元素1, 元素2...} ...};

代码实现

package com.wedu.demo;

public class Demo3Array {
    /*
        完整格式:数据类型[][] 变量名 = new 数据类型[][]{ {元素1, 元素2...} , {元素1, 元素2...} ...};

        简化格式: 数据类型[][] 变量名 = { {元素1, 元素2...} , {元素1, 元素2...} ...};
     */
    public static void main(String[] args) {
        int[] arr1 = {11,22,33};
        int[] arr2 = {44,55,66};

        int[][] arr = {{11,22,33}, {44,55,66}};
        System.out.println(arr[0][2]);

        int[][] array = {arr1,arr2};
        System.out.println(array[0][2]);
    }
}

1.7.3二维数组的动态初始化

动态初始化格式:

数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组,可以存放多少个一维数组
n表示每一个一维数组,可以存放多少个元素

package com.wedu.demo;

public class Demo1Array {
    /*
        动态初始化格式:

            数据类型[][] 变量名 = new 数据类型[m][n];
            m表示这个二维数组,可以存放多少个一维数组
            n表示每一个一维数组,可以存放多少个元素
     */
    public static void main(String[] args) {
        // 数据类型[][] 变量名 = new 数据类型[m][n];
        int[][] arr = new int[3][3];
        /*
            [[I@10f87f48

            @ : 分隔符
            10f87f48 : 十六进制内存地址
            I : 数组中存储的数据类型
            [[ : 几个中括号就代表的是几维数组
         */
        System.out.println(arr);

        /*
            二维数组存储一维数组的时候, 存储的是一维数组的内存地址
         */
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        System.out.println(arr[0][0]);
        System.out.println(arr[1][1]);
        System.out.println(arr[2][2]);

        // 向二维数组中存储元素
        arr[0][0] = 11;
        arr[0][1] = 22;
        arr[0][2] = 33;

        arr[1][0] = 11;
        arr[1][1] = 22;
        arr[1][2] = 33;

        arr[2][0] = 11;
        arr[2][1] = 22;
        arr[2][2] = 33;

        // 从二维数组中取出元素并打印
        System.out.println(arr[0][0]);
        System.out.println(arr[0][1]);
        System.out.println(arr[0][2]);
        System.out.println(arr[1][0]);
        System.out.println(arr[1][1]);
        System.out.println(arr[1][2]);
        System.out.println(arr[2][0]);
        System.out.println(arr[2][1]);
        System.out.println(arr[2][2]);
    }
}

1.7.4二维数组访问元素的细节问题

问题 : 二维数组中存储的是一维数组, 那能不能存入 [提前创建好的一维数组] 呢 ?

代码实现:

package com.wedu.demo;

public class Demo2Array {
    /*
        问题: 二维数组中存储的是一维数组, 那能不能存入 [提前创建好的一维数组] 呢 ?
        答 : 可以的
     */
    public static void main(String[] args) {
        int[] arr1 = {11,22,33};
        int[] arr2 = {44,55,66};
        int[] arr3 = {77,88,99,100};

        int[][] arr = new int[3][3];

        arr[2][3] = 100;

        arr[0] = arr1;
        arr[1] = arr2;
        arr[2] = arr3;

        System.out.println(arr[1][2]);
        System.out.println(arr[2][3]);
    }
}

1.7.5二维数组的遍历

案例需求

              求一个3*3矩阵对角线元素之和,要求矩形里面的值为随机赋值

代码实现

        int[][] dimensionalArray=new int[3][3];
        Random r=new Random();
        for (int i = 0; i < dimensionalArray.length; i++) {
            for (int j = 0; j < dimensionalArray[i].length; j++) {
                dimensionalArray[i][j]=r.nextInt(10);//随机赋值0~10
            }
        }
        //打印出来
        for (int i = 0; i < dimensionalArray.length; i++) {
            for (int j = 0; j < dimensionalArray.length; j++) {
                System.out.print(dimensionalArray[i][j]+"  ");
            }
            System.out.println();
        }
        //对角线元素求和
        int sum1=0;
        int sum2=0;
        int sum3=0;
        for (int i = 0; i < dimensionalArray.length; i++) {
            //正对角线
            sum1+=dimensionalArray[i][i];
            //副对角线
            sum2+=dimensionalArray[i][2-i];
        }
        //中间的元素算了两次,得减去一次
        sum3=(sum1+sum2)-dimensionalArray[1][1];
        System.out.println("对角线元素之和为:"+sum3);

2、ArrayList集合

(浅浅了解)

3、方法(函数)

3.1方法概述

方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集

  • 注意:

    • 方法必须先创建才可以使用,该过程成为方法定义

    • 方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用

3.2方法的定义和调用

3.2.1无参数方法的定义和调用

 定义格式:

        public static void 方法名 (   ) {
            // 方法体;
        }

范例:

        public static void method (    ) {
            // 方法体;
        }

调用格式:    

        方法名();

        method();

  • 注意:

    方法必须先定义,后调用,否则程序将报错

3.3带参数方法的定义和调用

  • 定义格式:

    参数:由数据类型和变量名组成 - 数据类型 变量名

    参数范例:int a

    public static void 方法名 (参数1) {
        方法体;
    }
    ​
    public static void 方法名 (参数1, 参数2, 参数3...) {
        方法体;
    }
  • 范例:

    public static void isEvenNumber(int number){
        ...
    }
    public static void getMax(int num1, int num2){
        ...
    }
    • 注意:

      方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序将报错
      ​
      方法定义时,多个参数之间使用逗号( ,)分隔
  • 调用格式:

    方法名(参数);
    ​
    方法名(参数1,参数2);
  • 范例:

    isEvenNumber(10);
    ​
    getMax(10,20);
    • 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错

方法练习:判断一个数是奇数还是偶数

public class Demo1Method {
    /*

        带参数方法的定义格式:
                public static void 方法名  ( 参数 )  { … … }
                public static void 方法名  ( 数据类型 变量名 )  { … … }

        带参数方法的调用格式:
                方法名 ( 参数 ) ;
                方法名 ( 变量名/常量值 ) ;

        tips: 参数可以是一个, 也可以是多个.

        需求: 判断一个数是奇数还是偶数
     */
    public static void main(String[] args) {
        isEvenNumber(10);
    }

    public static void isEvenNumber(int num){
        if(num % 2 == 0){
            System.out.println("偶数");
        }else{
            System.out.println("奇数");
        }
    }
}

3.4带返回值方法的定义和调用

  • 定义格式

    public static 数据类型 方法名 ( 参数 ) { 
        return 数据 ;
    }
  • 范例

    public static boolean isEvenNumber( int number ) {           
        return true ;
    }
    public static int getMax( int a, int b ) {
        return  100 ;
    }
    • 注意:

      • 方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错

  • 调用格式

    方法名 ( 参数 ) ;
    数据类型 变量名 = 方法名 ( 参数 ) ;
  • 范例

    isEvenNumber ( 5 ) ;
    boolean  flag =  isEvenNumber ( 5 ); 
    • 注意:

      • 方法的返回值通常会使用变量接收,否则该返回值将无意义

  • 案例需求:设计一个方法可以获取两个数的较大值,数据来自于参数

  • 思路:

    1. 定义一个方法,声明两个形参接收计算的数值,求出结果并返回

    2. 使用 if 语句 得出 a 和 b 之间的最大值,根据情况return具体结果

    3. 在main()方法中调用定义好的方法并使用 【 变量保存 】

  • 代码:

       

    public static void main(String[] args) {
            // 3. 在main()方法中调用定义好的方法并使用 【 变量保存 】
            System.out.println(getMax(10,20));  // 输出调用
    
            int result = getMax(10,20);
            System.out.println(result);
    
            for(int i = 1; i <= result; i++){
                System.out.println("HelloWorld");
            }
    
        }
    
        // 方法可以获取两个数的较大值
        public static int getMax(int a, int b){
            if(a > b){
                return a;
            }else{
                return b;
            }
        }
    
    }

3.5方法的重载

  • 方法重载概念

    方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载

    • 多个方法在同一个类中

    • 多个方法具有相同的方法名

    • 多个方法的参数不相同,类型不同或者数量不同

  • 注意:

    • 重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式

    • 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载

    • 正确范例:

      public class MethodDemo {
      	public static void fn(int a) {
          	//方法体
          }
          public static int fn(double a) {
          	//方法体
          }
      }
      
      public class MethodDemo {
      	public static float fn(int a) {
          	//方法体
          }
          public static int fn(int a , int b) {
          	//方法体
          }
      }

      方法重载练习:

    • 需求:使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)

    • 思路:

      ①定义比较两个数字的是否相同的方法compare()方法,参数选择两个int型参数

      ②定义对应的重载方法,变更对应的参数类型,参数变更为两个long型参数

      ③定义所有的重载方法,两个byte类型与两个short类型参数

      ④完成方法的调用,测试运行结果

public class MethodTest {
    public static void main(String[] args) {
        //调用方法
        System.out.println(compare(10, 20));
        System.out.println(compare((byte) 10, (byte) 20));
        System.out.println(compare((short) 10, (short) 20));
        System.out.println(compare(10L, 20L));
    }

    //int
    public static boolean compare(int a, int b) {
        System.out.println("int");
        return a == b;
    }

    //byte
    public static boolean compare(byte a, byte b) {
        System.out.println("byte");
        return a == b;
    }

    //short
    public static boolean compare(short a, short b) {
        System.out.println("short");
        return a == b;
    }

    //long
    public static boolean compare(long a, long b) {
        System.out.println("long");
        return a == b;
    }

}

 (简易版思维导图)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值