이 글은 명명 규칙, 자동 유형 추론, 정적 및 동적 초기화, 다차원 배열을 작성하는 기타 방법, 일반적인 오류 등 배열과 관련된 문제를 주로 소개하는 java에 대한 관련 지식을 제공합니다. 아래 내용을 보시고 모든 분들께 도움이 되었으면 좋겠습니다.
추천 학습: "java 비디오 튜토리얼"
색인: 명명 규칙, 자동 유형 추론, 정적 및 동적 초기화, 다차원 배열을 작성하는 다른 방법, 작성 시 일반적인 실수, 범위를 벗어난 배열 첨자 , 기본값 문제, 배열 길이 문제, 배열 메모리 구문 분석
1. 단계 분류 : (다음 int는 char String double 등으로 대체 가능)
① One- step writing :
int [] ids = new int []{1001,1002,1003};// 声明+初始化 int ids [] = new int []{1001,1002,1003}; // [ ]位置有两种放法 int ids [] = {1001,1002,1003};//自动类型推断,new int []可省 /**********错误示范***错误示范***错误示范***错误示范************/ int ids [] = new [] int{1001,1002,1003};//只有定义时的[]可以乱动
자동 타입 추론 : one-step writing 방식에서만 적용 가능, 오른쪽의 = new int [ ] 생략 가능 [ ]
② Two-step writing 방식 :
int ids [] ; //声明 ids = new int [ ] {1001,1002,1003} ; //初始化 /**********错误示范***错误示范***错误示范***错误示范************/ int ids []; ids [] = new int {1001,1002,1003};//分两步时,左边不加[] int ids []; ids = {1001,1002,1003};//分两步时,没有类型推断
2. 상태 분류: 정적 및 동적 둘 중 하나를 선택해야 하며, 길이에 {}를 추가하지 마세요. 길이 없이 {}를 제공하세요.
① 정적 초기화:
两个[ ]均为空 String [] name = new String [] {"张三","李四"} ; //也可写为String [] name = {"张三","李四"};e
② 동적 초기화 :
后面的[ ]必须带数字规定长度,并且不能{}赋值 String [ ] name ; name = new String [2] ; //可以合为一步写String name [] = new String [2]; /**********错误示范****错误示范****错误示范********/ int ids [3][4] = XXXXXXXXX; int ids [3][ ] = XXXXXXXXX; int ids [ ][4] = XXXXXXXXX;
기본값 문제: 동적 [i] [j]에는 기본값이 있고, static {}에는 기본값이 없습니다(자세한 설명은 마지막에 설명)
int arr1 [][] =XXXXXXXXXXX; int [] arr2 []=XXXXXXXXXXX; int [][] arr3 =XXXXXXXXXXX; //都是正确写法 Java主张 int [] arr = new int []{}; 写法 //多维数组同理 int [] arr[][] =XXXXXXXX; int [][] arr[] =XXXXXXXX; 随便瞎基8放都是正确的 Java主张 int [][] arr = new int [][]{};写法 不过我个人不习惯。。。
오류 사례:
배열 첨자가 범위를 벗어났습니다. arr[1][1]이 정적 초기화 중에 존재하지 않습니다. 값을 제공하면 메모리 공간이 할당되지 않지만 오류가 발생합니다. 접속시 신고됩니다. 이 정적 초기화의 배열 범위는 arr[0][0] arr[0][1] ~ arr[1][0]
String cod [][] = new String [3][ ];//행만 정의되었으며 열 수는 알 수 없습니다
System.out.println(cod[1][1]);//열은 정의되지 않았습니다. 기본값은 제공되지 않습니다. 실행 오류
올바른 쓰기 방법: 한 단계 추가 cod[1]=new String [234....]; 기본값이 null인 경우 열 메모리 할당
① int [ ] arr1 = new int [ ]; ③ int [ ] arr3 = new int [5] {1,2,3,4,5} //배열이 다음과 같으면 동적을 가져올 수 없습니다. 결정(선언 + 초기화)되면 길이가 고정되어 변경할 수 없습니다. 배열의 메모리 할당은 지속적으로 배열에 대해 고정된 공간을 할당해야 합니다. 나중에 100개의 공간이 다른 콘텐츠에 의해 점유되면 배열은 처음 99개의 공백만 사용할 수 있습니다. 길이를 변경할 수 있는 경우 arr[100]은 다른 공백을 변경합니다. 콘텐츠가 버그를 생성합니다
예제는 배열 길이 문제를 보여줍니다. 2차원 배열 순회, 2- 레이어 for 루프:
int arr0 [][] = {{1,2},{3,4},{5,6}};//正确:静态、自动类型推断 int arr1 [][] = new int [3][2]; int arr2 [][] = new int [3][ ];//正确:动态、可省列数[] int arr3 [][][] = new int [3][ ][ ];//正确:动态、可省后两个[]
실행 결과:
arr.length는 첫 번째 차원 길이입니다arr[i]. 길이는 i번째 행의 두 번째 차원 길이입니다arr[i][j ].length는 i번째 행 j 열의 3차원 길이입니다배열 메모리 분석:2차원 배열을 예로 들어 내부 레이어와 외부 레이어로 나눕니다. 외부 레이어는 arr[0] arr[1] 형태이고 내부 레이어는 arr[1][2] 1의 완전한 표현입니다. 외부 레이어 arr[1]의 경우 1-입니다. 차원 배열은 "초기화됨"과 "초기화되지 않음"의 두 가지 상황으로 구분됩니다.예제 1:
int arr0 [][] = new int [2][2];//动态初始化,分配内存 //数组内的4个成员全部默认为0,编译运行都不会报错 int arr0 [][] = new int [][]{ {1,2},{3} }; //静态初始化,编译能通过,arr0[1][1]没有默认值(未分配空间) //编译能通过,运行到arr[1][1]会报错 int arr0[][] = new int [3][] ; // 输出arr0[3][0] arr0[3][1] arr0[3][2] arr0[3][3]....... //都会报错
이때 외부 행 수만 알 수 있지만 내부 레이어는 초기화되지 않고 주소도 없습니다. 할당되었으므로 결과는 null
public class Test2 { public static void main(String args[]) { int arr[][] = { {1,2,3},{4,5,6,7},{8,9},{10}}; for(int i = 0 ; i <arr.length ; i++){//arr.length for(int j = 0 ; j<arr[i].length ;j++){//arr[i].length System.out.println(arr[i][j]+" "); } System.out.println(); } //System.out.println(arr[2][2]);报错下标越界 } }
이때 내부 레이어의 길이가 결정되고 초기화가 완료됩니다. arr1[1]은 첫 번째 주소 [I@15db9742
A]를 가리킵니다. arr[1]의 레이어는 1차원 배열입니다. I는 int의 첫 글자이고 @ 뒤에 Address
int arr1[][] = new int [3][]; System.out.println( arr1[1] ); //运行结果:null
String 배열은 완전히 정의되었기 때문에 공간이 할당되고 arr1이 포인트가 됩니다. arr1[0][0] 주소(전체 배열의 첫 번째 주소)
两个[[表示里面有二维数组,java.lang.String;是包名
例3:
float arr1[][] = new float [3][5]; System.out.println(arr1[0]); //结果:[F@15db9742
外层元素初始化值为:地址值
内层元素初始化值为:与一维数组初始化情况相同
一维数组初始化:
1.数组元素是整形int long short : 0
2.数组元素是浮点型float double : 0.0
3.数组元素是boolean型:false
4.数组元素是引用类型 : null
5.数组元素是char型 :0 或 '\u0000' 而非‘0’
数字0,而不是字符0,对应的ASCII码不一样
'\u0000'是Unicode码第0000号位,是一个空格符,但是不是键盘上的空格
验证如下:
經典例題:
解:b e可以,acdf都不行
推荐学习:《java视频教程》
위 내용은 Java 요약의 배열에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!