最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java入門指南之IDEA高效調(diào)試與數(shù)組

 更新時(shí)間:2026年05月14日 09:28:08   作者:我愛學(xué)習(xí)yyds  
調(diào)試是指在程序運(yùn)行過程中,通過各種手段觀察程序的執(zhí)行狀態(tài)、變量值的變化等,以找出程序中存在的錯(cuò)誤或異常的過程,這篇文章主要介紹了Java入門指南之IDEA高效調(diào)試與數(shù)組的相關(guān)資料,需要的朋友可以參考下

前言

作為 Java 開發(fā)者,調(diào)試能力決定排錯(cuò)效率,數(shù)組功底決定代碼質(zhì)量。這篇文章把 IDEA 調(diào)試全套技巧、數(shù)組從基礎(chǔ)到進(jìn)階的知識(shí)點(diǎn)一次性講透,適合新手夯實(shí)基礎(chǔ)、老手快速回顧。

一、先搞懂:什么是程序調(diào)試?

調(diào)試(Debugging)不是簡單 “改代碼”,而是定位問題 → 縮小范圍 → 修復(fù)驗(yàn)證的完整過程。

  • 小代碼:肉眼讀 + 打印日志
  • 復(fù)雜項(xiàng)目:必須用 IDE 調(diào)試器

IDEA 內(nèi)置的調(diào)試器是 Java 開發(fā)效率神器,掌握它能讓你快速揪出隱藏 Bug。

二、IDEA 調(diào)試

1. 調(diào)試三步基礎(chǔ)

  1. 打斷點(diǎn):代碼行號(hào)左側(cè)單擊,出現(xiàn)紅色圓點(diǎn)
  2. 啟動(dòng)調(diào)試:右鍵 → Debug
  3. 控制執(zhí)行:用快捷鍵一步步觀察變量與流程

2. 核心調(diào)試操作

操作快捷鍵作用
逐過程(不進(jìn)方法)F8一行一行走,跳過方法內(nèi)部
逐語句(進(jìn)入方法)F7進(jìn)入自定義方法內(nèi)部
強(qiáng)制進(jìn)入Alt+Shift+F7強(qiáng)行進(jìn)入 JDK 庫方法 / 無源碼方法
跳出方法Shift+F8執(zhí)行完當(dāng)前方法并返回調(diào)用處
運(yùn)行到光標(biāo)Alt+F9直接跳到光標(biāo)所在行
恢復(fù)程序F9跳到下一個(gè)斷點(diǎn) / 結(jié)束
重新調(diào)試Ctrl+F5重啟調(diào)試會(huì)話
停止調(diào)試Ctrl+F2終止調(diào)試
查看所有斷點(diǎn)Ctrl+Shift+F8統(tǒng)一管理斷點(diǎn)

3. 進(jìn)階:條件斷點(diǎn)

循環(huán)幾百次只想在特定值停下?用條件斷點(diǎn)

  1. 右鍵斷點(diǎn)
  2. 填入條件(如 i == 20
  3. 調(diào)試只會(huì)在條件成立時(shí)暫停

4. 調(diào)試面板看什么?

  • Debugger 面板:調(diào)用棧 + 實(shí)時(shí)變量值 + 表達(dá)式計(jì)算
  • Console 面板:程序正常輸出 / 異常信息
  • Mute Breakpoints:一鍵臨時(shí)屏蔽所有斷點(diǎn)

三、Java 數(shù)組

數(shù)組是 Java 最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),相同類型、連續(xù)內(nèi)存、下標(biāo)從 0 開始,這三個(gè)特征刻在心里。

1. 為什么要用數(shù)組?

不用數(shù)組:存 100 個(gè)成績要定義 100 個(gè)變量。用數(shù)組:一行搞定,遍歷、修改、傳參都更簡潔。

2. 數(shù)組創(chuàng)建與初始化(兩種方式)

動(dòng)態(tài)初始化(指定長度)

int[] arr = new int[5]; // 默認(rèn)值:0
String[] strs = new String[3]; // 默認(rèn)值:null

靜態(tài)初始化(指定內(nèi)容)

// 完整寫法
int[] arr1 = new int[]{1,2,3,4,5};
// 簡寫(推薦)
int[] arr2 = {1,2,3,4,5};

?? 注意:

  • 簡寫形式不能拆分兩行寫
  • 下標(biāo)范圍:[0, length),越界拋 ArrayIndexOutOfBoundsException

3. 數(shù)組遍歷:3 種寫法

  1. 普通 for 循環(huán)(可修改元素)
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}
  1. for-each 循環(huán)(只讀更簡潔)
for (int num : arr) {
    System.out.println(num);
}
  1. Arrays.toString(快速打?。?/li>
System.out.println(Arrays.toString(arr));

4. 關(guān)鍵:數(shù)組是引用類型

  • 基本類型:變量存
  • 引用類型:變量存堆內(nèi)存地址
  • arr1 = arr2指向同一塊內(nèi)存,不是拷貝
int[] a = {1,2,3};
int[] b = a;
b[0] = 100; // a[0] 也會(huì)變成 100
  • null:空引用,訪問會(huì)拋 NullPointerException

5. 數(shù)組作為方法參數(shù) / 返回值

  • 傳基本類型:值傳遞,不影響原變量
  • 傳數(shù)組:引用傳遞,方法內(nèi)修改會(huì)影響原數(shù)組
  • 數(shù)組可直接作為返回值,返回一組數(shù)據(jù)

6. 數(shù)組常用工具方法(java.util.Arrays)

Arrays.toString(arr):數(shù)組轉(zhuǎn)字符串

import java.util.Arrays;

/**
 * Arrays.toString():數(shù)組轉(zhuǎn)字符串
 * 特點(diǎn):
 * 1. 一維數(shù)組直接輸出易讀格式
 * 2. 多維數(shù)組需用 Arrays.deepToString()
 * 3. 空數(shù)組輸出 []
 */
public class ArraysToStringDemo {
    public static void main(String[] args) {
        // 測試1:普通int數(shù)組
        int[] intArr = {1, 2, 3, 4, 5};
        System.out.println("int數(shù)組轉(zhuǎn)字符串:" + Arrays.toString(intArr));

        // 測試2:字符串?dāng)?shù)組
        String[] strArr = {"Java", "數(shù)組", "工具類"};
        System.out.println("字符串?dāng)?shù)組轉(zhuǎn)字符串:" + Arrays.toString(strArr));

        // 測試3:空數(shù)組
        int[] emptyArr = new int[0];
        System.out.println("空數(shù)組轉(zhuǎn)字符串:" + Arrays.toString(emptyArr));

        // 測試4:多維數(shù)組(注意:一維toString不適用,需用deepToString)
        int[][] multiArr = {{1,2}, {3,4}};
        System.out.println("多維數(shù)組用toString:" + Arrays.toString(multiArr)); // 輸出地址
        System.out.println("多維數(shù)組用deepToString:" + Arrays.deepToString(multiArr)); // 正確輸出
    }
}


/*結(jié)果:
int數(shù)組轉(zhuǎn)字符串:[1, 2, 3, 4, 5]
字符串?dāng)?shù)組轉(zhuǎn)字符串:[Java, 數(shù)組, 工具類]
空數(shù)組轉(zhuǎn)字符串:[]
多維數(shù)組用toString:[[I@7852e922, [I@4e25154f]
多維數(shù)組用deepToString:[[1, 2], [3, 4]]
*/

Arrays.copyOf(arr, len):數(shù)組拷貝(新對(duì)象)

import java.util.Arrays;

/**
 * Arrays.copyOf():數(shù)組拷貝
 * 特點(diǎn):
 * 1. 返回新數(shù)組,原數(shù)組不受影響(深拷貝)
 * 2. len < 原長度:截取前l(fā)en個(gè)元素
 * 3. len > 原長度:補(bǔ)默認(rèn)值(int補(bǔ)0,String補(bǔ)null)
 */
public class ArraysCopyOfDemo {
    public static void main(String[] args) {
        int[] originalArr = {10, 20, 30, 40, 50};
        System.out.println("原數(shù)組:" + Arrays.toString(originalArr));

        // 場景1:拷貝長度 = 原長度(完整拷貝)
        int[] copyFull = Arrays.copyOf(originalArr, originalArr.length);
        System.out.println("完整拷貝:" + Arrays.toString(copyFull));

        // 場景2:拷貝長度 < 原長度(截?。?
        int[] copyShort = Arrays.copyOf(originalArr, 3);
        System.out.println("截取前3個(gè)元素:" + Arrays.toString(copyShort));

        // 場景3:拷貝長度 > 原長度(補(bǔ)默認(rèn)值)
        int[] copyLong = Arrays.copyOf(originalArr, 7);
        System.out.println("補(bǔ)0到7個(gè)元素:" + Arrays.toString(copyLong));

        // 驗(yàn)證:修改新數(shù)組,原數(shù)組不變
        copyFull[0] = 999;
        System.out.println("修改后新數(shù)組:" + Arrays.toString(copyFull));
        System.out.println("原數(shù)組仍不變:" + Arrays.toString(originalArr));
    }
}

/*結(jié)果:
原數(shù)組:[10, 20, 30, 40, 50]
完整拷貝:[10, 20, 30, 40, 50]
截取前3個(gè)元素:[10, 20, 30]
補(bǔ)0到7個(gè)元素:[10, 20, 30, 40, 50, 0, 0]
修改后新數(shù)組:[999, 20, 30, 40, 50]
原數(shù)組仍不變:[10, 20, 30, 40, 50]
*/

Arrays.copyOfRange(arr, from, to):范圍拷貝

import java.util.Arrays;

/**
 * Arrays.copyOfRange():范圍拷貝
 * 特點(diǎn):
 * 1. 左閉右開:[from, to)
 * 2. from = 0 且 to = 原長度 → 等價(jià)于 copyOf
 * 3. 下標(biāo)越界會(huì)拋 ArrayIndexOutOfBoundsException
 */
public class ArraysCopyOfRangeDemo {
    public static void main(String[] args) {
        String[] originalArr = {"A", "B", "C", "D", "E", "F"};
        System.out.println("原數(shù)組:" + Arrays.toString(originalArr));

        // 場景1:拷貝中間范圍(下標(biāo)1到4,包含1,不包含4)
        String[] range1 = Arrays.copyOfRange(originalArr, 1, 4);
        System.out.println("拷貝[1,4):" + Arrays.toString(range1)); // [B, C, D]

        // 場景2:拷貝從0到末尾(完整拷貝)
        String[] range2 = Arrays.copyOfRange(originalArr, 0, originalArr.length);
        System.out.println("拷貝完整數(shù)組:" + Arrays.toString(range2));

        // 場景3:拷貝到超出原長度(補(bǔ)默認(rèn)值null)
        String[] range3 = Arrays.copyOfRange(originalArr, 3, 8);
        System.out.println("拷貝[3,8)(補(bǔ)null):" + Arrays.toString(range3));
    }
}

/*結(jié)果:
原數(shù)組:[A, B, C, D, E, F]
拷貝[1,4):[B, C, D]
拷貝完整數(shù)組:[A, B, C, D, E, F]
拷貝[3,8)(補(bǔ)null):[D, E, F, null, null]
*/

Arrays.sort(arr):高效排序

import java.util.Arrays;

/**
 * Arrays.sort():數(shù)組排序
 * 特點(diǎn):
 * 1. 基本類型數(shù)組:快速排序/雙軸快排,效率高
 * 2. 直接修改原數(shù)組(原地排序)
 * 3. 字符串?dāng)?shù)組:按Unicode編碼升序(字母A-Z對(duì)應(yīng)升序)
 */
public class ArraysSortDemo {
    public static void main(String[] args) {
        // 場景1:int數(shù)組升序排序
        int[] intArr = {5, 2, 9, 1, 5, 6};
        System.out.println("排序前int數(shù)組:" + Arrays.toString(intArr));
        Arrays.sort(intArr);
        System.out.println("排序后int數(shù)組:" + Arrays.toString(intArr));

        // 場景2:字符串?dāng)?shù)組排序
        String[] strArr = {"Java", "Python", "C", "JavaScript"};
        System.out.println("\n排序前字符串?dāng)?shù)組:" + Arrays.toString(strArr));
        Arrays.sort(strArr);
        System.out.println("排序后字符串?dāng)?shù)組:" + Arrays.toString(strArr));

        // 場景3:指定范圍排序(sort(arr, from, to):左閉右開)
        int[] rangeArr = {10, 5, 8, 2, 7, 1};
        System.out.println("\n排序前范圍數(shù)組:" + Arrays.toString(rangeArr));
        Arrays.sort(rangeArr, 1, 5); // 只排序下標(biāo)1到4的元素
        System.out.println("排序[1,5)后:" + Arrays.toString(rangeArr));
    }
}

/*結(jié)果:
排序前int數(shù)組:[5, 2, 9, 1, 5, 6]
排序后int數(shù)組:[1, 2, 5, 5, 6, 9]

排序前字符串?dāng)?shù)組:[Java, Python, C, JavaScript]
排序后字符串?dāng)?shù)組:[C, Java, JavaScript, Python]

排序前范圍數(shù)組:[10, 5, 8, 2, 7, 1]
排序[1,5)后:[10, 2, 5, 7, 8, 1]
*/

Arrays.binarySearch(arr, key):有序數(shù)組二分查找

import java.util.Arrays;

/**
 * Arrays.binarySearch():二分查找
 * 前提:數(shù)組必須是升序排序后的!
 * 特點(diǎn):
 * 1. 找到:返回元素下標(biāo)
 * 2. 未找到:返回 -(插入點(diǎn)) - 1
 * 3. 有重復(fù)元素:返回任意一個(gè)匹配下標(biāo)(不保證是第一個(gè))
 */
public class ArraysBinarySearchDemo {
    public static void main(String[] args) {
        int[] sortedArr = {1, 2, 3, 5, 7, 9, 10}; // 必須先排序!
        System.out.println("有序數(shù)組:" + Arrays.toString(sortedArr));

        // 場景1:查找存在的元素
        int key1 = 7;
        int index1 = Arrays.binarySearch(sortedArr, key1);
        System.out.println("查找" + key1 + ":下標(biāo)=" + index1);

        // 場景2:查找不存在的元素
        int key2 = 4;
        int index2 = Arrays.binarySearch(sortedArr, key2);
        System.out.println("查找" + key2 + ":返回值=" + index2 + "(插入點(diǎn)是3,-(3)-1=-4)");

        // 場景3:查找超出范圍的元素
        int key3 = 11;
        int index3 = Arrays.binarySearch(sortedArr, key3);
        System.out.println("查找" + key3 + ":返回值=" + index3 + "(插入點(diǎn)是7,-(7)-1=-8)");

        // 錯(cuò)誤示例:未排序數(shù)組查找(結(jié)果不可靠)
        int[] unsortedArr = {5, 2, 9};
        int index4 = Arrays.binarySearch(unsortedArr, 2);
        System.out.println("\n未排序數(shù)組查找2:" + index4 + "(結(jié)果錯(cuò)誤,不可信)");
    }
}

/*結(jié)果:
有序數(shù)組:[1, 2, 3, 5, 7, 9, 10]
查找7:下標(biāo)=4
查找4:返回值=-4(插入點(diǎn)是3,-(3)-1=-4)
查找11:返回值=-8(插入點(diǎn)是7,-(7)-1=-8)

未排序數(shù)組查找2:-1(結(jié)果錯(cuò)誤,不可信)
*/

7. 經(jīng)典算法手寫(面試??迹?/h3>

順序查找

/**
 * 順序查找(線性查找)
 * 核心:逐個(gè)遍歷、逐一比較,找到返回下標(biāo),未找到返回-1
 * 適用:無序/有序數(shù)組都能查,優(yōu)點(diǎn)是簡單,缺點(diǎn)是效率低(時(shí)間復(fù)雜度 O(n))
 */
public class SequentialSearch {
    public static void main(String[] args) {
        // 測試數(shù)組(無序也能查)
        int[] arr = {8, 3, 9, 7, 2, 5, 1, 6, 4};
        int target = 7;
        
        // 調(diào)用查找方法
        int index = sequentialSearch(arr, target);
        
        // 輸出結(jié)果
        if (index != -1) {
            System.out.println("找到目標(biāo)值 " + target + ",下標(biāo)為:" + index);
        } else {
            System.out.println("未找到目標(biāo)值 " + target);
        }
    }

    /**
     * 順序查找核心方法
     * @param arr 待查找的數(shù)組
     * @param target 要找的目標(biāo)值
     * @return 找到返回下標(biāo),未找到返回-1
     */
    public static int sequentialSearch(int[] arr, int target) {
        // 健壯性處理:數(shù)組為空/長度為0,直接返回-1
        if (arr == null || arr.length == 0) {
            return -1;
        }
        
        // 遍歷數(shù)組,逐個(gè)比較
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == target) {
                return i; // 找到立即返回下標(biāo),無需繼續(xù)遍歷
            }
        }
        
        // 遍歷完都沒找到,返回-1
        return -1;
    }
}

二分查找(有序數(shù)組)

/**
 * 二分查找(折半查找)
 * 核心:利用有序數(shù)組特性,每次排除一半元素,效率高(時(shí)間復(fù)雜度 O(log?n))
 * 前提:數(shù)組必須是有序的(升序/降序,代碼需對(duì)應(yīng)調(diào)整)
 */
public class BinarySearch {
    public static void main(String[] args) {
        // 測試數(shù)組(必須是有序數(shù)組,這里用升序)
        int[] sortedArr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        int target = 5;
        
        // 調(diào)用二分查找方法
        int index = binarySearch(sortedArr, target);
        
        // 輸出結(jié)果
        if (index != -1) {
            System.out.println("找到目標(biāo)值 " + target + ",下標(biāo)為:" + index);
        } else {
            System.out.println("未找到目標(biāo)值 " + target);
        }
    }

    /**
     * 二分查找核心方法(升序數(shù)組)
     * @param sortedArr 有序數(shù)組(升序)
     * @param target 要找的目標(biāo)值
     * @return 找到返回下標(biāo),未找到返回-1
     */
    public static int binarySearch(int[] sortedArr, int target) {
        // 健壯性處理
        if (sortedArr == null || sortedArr.length == 0) {
            return -1;
        }
        
        // 定義左右指針
        int left = 0;
        int right = sortedArr.length - 1;
        
        // 循環(huán)條件:左指針 <= 右指針(注意是 <=,否則會(huì)漏查最后一個(gè)元素)
        while (left <= right) {
            // 計(jì)算中間下標(biāo)(避免溢出:等價(jià)于 (left + right) / 2,但更安全)
            int mid = left + (right - left) / 2;
            
            if (sortedArr[mid] == target) {
                return mid; // 找到目標(biāo),返回下標(biāo)
            } else if (sortedArr[mid] < target) {
                // 目標(biāo)在右半部分,左指針右移
                left = mid + 1;
            } else {
                // 目標(biāo)在左半部分,右指針左移
                right = mid - 1;
            }
        }
        
        // 循環(huán)結(jié)束仍未找到,返回-1
        return -1;
    }
}

冒泡排序

/**
 * 冒泡排序
 * 核心:相鄰元素兩兩比較,大的元素逐步“冒泡”到數(shù)組末尾
 * 優(yōu)化:如果某一輪沒有交換,說明數(shù)組已有序,直接退出(減少循環(huán)次數(shù))
 * 時(shí)間復(fù)雜度:最壞 O(n2),最好 O(n)(已排序數(shù)組)
 */
public class BubbleSort {
    public static void main(String[] args) {
        // 測試數(shù)組
        int[] arr = {8, 3, 9, 7, 2, 5, 1, 6, 4};
        System.out.println("排序前:" + Arrays.toString(arr));
        
        // 調(diào)用冒泡排序方法
        bubbleSort(arr);
        
        // 輸出結(jié)果
        System.out.println("排序后:" + Arrays.toString(arr));
    }

    /**
     * 冒泡排序核心方法(升序)
     * @param arr 待排序的數(shù)組(直接修改原數(shù)組)
     */
    public static void bubbleSort(int[] arr) {
        // 健壯性處理
        if (arr == null || arr.length <= 1) {
            return; // 空數(shù)組/只有1個(gè)元素,無需排序
        }
        
        int length = arr.length;
        
        // 外層循環(huán):控制排序輪數(shù)(最多 length-1 輪)
        for (int i = 0; i < length - 1; i++) {
            // 標(biāo)記:本輪是否發(fā)生交換
            boolean swapped = false;
            
            // 內(nèi)層循環(huán):每輪比較到 length-1-i 位置(后i個(gè)元素已排好序)
            for (int j = 0; j < length - 1 - i; j++) {
                // 相鄰元素比較,前 > 后則交換(升序)
                if (arr[j] > arr[j + 1]) {
                    // 交換兩個(gè)元素
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    
                    // 標(biāo)記發(fā)生了交換
                    swapped = true;
                }
            }
            
            // 優(yōu)化:本輪無交換,說明數(shù)組已有序,直接退出循環(huán)
            if (!swapped) {
                break;
            }
        }
    }
}

數(shù)組逆序

/**
 * 數(shù)組逆序
 * 核心:雙指針法,首尾元素交換,直到指針相遇
 * 優(yōu)點(diǎn):時(shí)間復(fù)雜度 O(n),空間復(fù)雜度 O(1)(原地逆序,不額外占用空間)
 */
public class ReverseArray {
    public static void main(String[] args) {
        // 測試數(shù)組
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println("逆序前:" + Arrays.toString(arr));
        
        // 調(diào)用逆序方法
        reverseArray(arr);
        
        // 輸出結(jié)果
        System.out.println("逆序后:" + Arrays.toString(arr));
    }

    /**
     * 數(shù)組逆序核心方法(原地逆序,直接修改原數(shù)組)
     * @param arr 待逆序的數(shù)組
     */
    public static void reverseArray(int[] arr) {
        // 健壯性處理
        if (arr == null || arr.length <= 1) {
            return; // 空數(shù)組/只有1個(gè)元素,無需逆序
        }
        
        // 定義首尾指針
        int left = 0;
        int right = arr.length - 1;
        
        // 循環(huán)交換:左指針 < 右指針時(shí)交換
        while (left < right) {
            // 交換首尾元素
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            
            // 左指針右移,右指針左移
            left++;
            right--;
        }
    }
}

自定義數(shù)組拷貝

/**
 * 自定義數(shù)組拷貝
 * 核心:創(chuàng)建新數(shù)組,遍歷原數(shù)組,逐個(gè)復(fù)制元素到新數(shù)組
 * 對(duì)比 JDK 自帶的 Arrays.copyOf:邏輯一致,幫你理解底層原理
 */
public class CustomArrayCopy {
    public static void main(String[] args) {
        // 測試數(shù)組
        int[] originalArr = {8, 3, 9, 7, 2, 5, 1, 6, 4};
        System.out.println("原數(shù)組:" + Arrays.toString(originalArr));
        
        // 調(diào)用自定義拷貝方法
        int[] copyArr = customCopyOf(originalArr, originalArr.length);
        System.out.println("拷貝數(shù)組:" + Arrays.toString(copyArr));
        
        // 驗(yàn)證:修改拷貝數(shù)組,原數(shù)組不受影響(證明是深拷貝)
        copyArr[0] = 100;
        System.out.println("修改后拷貝數(shù)組:" + Arrays.toString(copyArr));
        System.out.println("修改后原數(shù)組:" + Arrays.toString(originalArr));
    }

    /**
     * 自定義數(shù)組拷貝方法
     * @param original 原數(shù)組
     * @param newLength 新數(shù)組長度(可大于/小于原數(shù)組長度)
     * @return 新的拷貝數(shù)組
     */
    public static int[] customCopyOf(int[] original, int newLength) {
        // 健壯性處理:原數(shù)組為空
        if (original == null) {
            return null;
        }
        
        // 1. 創(chuàng)建新數(shù)組(指定長度)
        int[] newArr = new int[newLength];
        
        // 2. 確定要拷貝的元素個(gè)數(shù)(取原數(shù)組長度和新長度的較小值)
        int copyLength = Math.min(original.length, newLength);
        
        // 3. 遍歷原數(shù)組,逐個(gè)復(fù)制到新數(shù)組
        for (int i = 0; i < copyLength; i++) {
            newArr[i] = original[i];
        }
        
        // 4. 返回新數(shù)組(如果新長度 > 原長度,多余位置默認(rèn)值為0)
        return newArr;
    }
}

8. 二維數(shù)組

本質(zhì):數(shù)組的數(shù)組

int[][] arr = {{1,2},{3,4},{5,6}};
// 遍歷
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
        System.out.print(arr[i][j] + " ");
    }
    System.out.println();
}

四、調(diào)試 + 數(shù)組:實(shí)戰(zhàn)組合技巧

  1. 遍歷數(shù)組時(shí)用條件斷點(diǎn),只看目標(biāo)元素
  2. 調(diào)試面板直接查看數(shù)組每一位的值
  3. 下標(biāo)越界時(shí),用調(diào)試看循環(huán)邊界是否正確
  4. 引用傳遞問題:在面板看地址是否相同

五、總結(jié)

  • 調(diào)試是程序員的基本功,IDEA 快捷鍵用熟效率翻倍
  • 數(shù)組是數(shù)據(jù)結(jié)構(gòu)基石,連續(xù)內(nèi)存、引用類型、下標(biāo) 0 起步
  • 先會(huì)調(diào)試排錯(cuò),再扎實(shí)掌握數(shù)組,Java 基礎(chǔ)才算穩(wěn)

到此這篇關(guān)于Java入門指南之IDEA高效調(diào)試與數(shù)組的文章就介紹到這了,更多相關(guān)IDEA高效調(diào)試與java數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java開發(fā)時(shí)各類工具的使用規(guī)范

    java開發(fā)時(shí)各類工具的使用規(guī)范

    這篇文章主要介紹了java編碼時(shí)各類工具的使用規(guī)范,多人協(xié)作、共同開發(fā)一個(gè)項(xiàng)目,如果沒有統(tǒng)一的代碼規(guī)范的話,項(xiàng)目中的每個(gè)人都按照自己的習(xí)慣率性而為,就會(huì)導(dǎo)致整個(gè)項(xiàng)目的代碼看上去雜亂無章,可讀性非常差,并且持續(xù)增加后續(xù)的維護(hù)成本。對(duì)此感興趣可以來了解一下
    2020-07-07
  • Java線程休眠的5種方法

    Java線程休眠的5種方法

    這篇文章主要介紹了Java線程休眠的5種方法,分別是Thread.sleep、TimeUnit、wait、Condition、LockSupport,下面文章將對(duì)這五種方法進(jìn)行詳細(xì)講解,需要的小伙伴可以參考一下
    2022-05-05
  • SpringCloud 服務(wù)注冊(cè)IP錯(cuò)誤的解決

    SpringCloud 服務(wù)注冊(cè)IP錯(cuò)誤的解決

    這篇文章主要介紹了SpringCloud 服務(wù)注冊(cè)IP錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java音樂播放器實(shí)現(xiàn)代碼

    java音樂播放器實(shí)現(xiàn)代碼

    這篇文章主要介紹了java音樂播放器的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Spring Boot集成SLF4j從基礎(chǔ)到高級(jí)實(shí)踐(最新推薦)

    Spring Boot集成SLF4j從基礎(chǔ)到高級(jí)實(shí)踐(最新推薦)

    SLF4j (Simple Logging Facade for Java) 是一個(gè)日志門面(Facade),不是具體的日志實(shí)現(xiàn),這篇文章主要介紹了Spring Boot集成SLF4j從基礎(chǔ)到高級(jí)實(shí)踐(最新推薦),需要的朋友可以參考下
    2025-05-05
  • Java實(shí)現(xiàn)讀取SFTP服務(wù)器指定目錄文件的方法

    Java實(shí)現(xiàn)讀取SFTP服務(wù)器指定目錄文件的方法

    SFTP是一種在安全通道上傳輸文件的協(xié)議,它是基于SSH(Secure Shell)協(xié)議的擴(kuò)展,用于在客戶端和服務(wù)器之間進(jìn)行加密的文件傳輸,這篇文章主要介紹了Java實(shí)現(xiàn)讀取SFTP服務(wù)器指定目錄文件,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • 詳解spring boot配置單點(diǎn)登錄

    詳解spring boot配置單點(diǎn)登錄

    本篇文章主要介紹了詳解spring boot配置單點(diǎn)登錄,常用的安全框架有spring security和apache shiro。shiro的配置和使用相對(duì)簡單,本文使用shrio對(duì)接CAS服務(wù)。
    2017-03-03
  • Spring Boot中@value的常見用法及案例

    Spring Boot中@value的常見用法及案例

    @Value注解是Spring框架中強(qiáng)大且常用的注解之一,本文主要介紹了SpringBoot中@value的常見用法及案例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Idea的Generate Sources無法生成QueryDSL問題及解決方法

    Idea的Generate Sources無法生成QueryDSL問題及解決方法

    這篇文章主要介紹了解決Idea的Generate Sources無法生成QueryDSL問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Druid(新版starter)在SpringBoot下的使用教程

    Druid(新版starter)在SpringBoot下的使用教程

    Druid是Java語言中最好的數(shù)據(jù)庫連接池,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能,DruidDataSource支持的數(shù)據(jù)庫,這篇文章主要介紹了Druid(新版starter)在SpringBoot下的使用,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

镇坪县| 墨玉县| 通江县| 嘉兴市| 鄂伦春自治旗| 天津市| 吴忠市| 鄂托克前旗| 称多县| 隆化县| 蒙山县| 青铜峡市| 河池市| 凌海市| 仁怀市| 海安县| 土默特左旗| 温州市| 美姑县| 个旧市| 西畴县| 晋城| 黎城县| 宜城市| 宿松县| 内丘县| 沂源县| 禄劝| 花垣县| 乌拉特中旗| 普格县| 嵩明县| 三门县| 景宁| 大丰市| 航空| 吉木萨尔县| 平昌县| 资兴市| 陇西县| 青岛市|