배열
- 인덱스와 인덱스에 대응하는 일련의 데이터들로 이루어진 연속적인 자료 구조
- 같은 종류의 데이터들이 순차적으로 저장된다.
배열 선언 및 생성
1) 배열에 대한 레퍼런스 변수 선언
2) 배열 생성 - 배열 공간 할당
레퍼런스 치환과 배열 공유
- 자바에서는 배열 공간과 레퍼런스 변수가 분리되어 있기 때문에 생성된 배열에 대한 공유가 쉽게 이루어진다.
- 레퍼런스의 치환은 배열을 복사하여 새로운 배열을 만드는 것이 아니라 레퍼런스만 복사된다.
- myArray는 intArray 레퍼런스 값을 가지게 됨으로써 intArray 배열을 공유하게 된다.
int intArray[] = new int[5];
int myArray[] = intArray; // 레퍼런스 치환. myArray는 intArray와 동일한 배열 참조
for-each 문
- 배열이나 나열의 크기만큼 루프를 돌면서 각 원소를 순차적으로 접근하는데 유용
// for-each 문을 사용하여 정수 배열의 합을 구하는 코드
int [] n = {1, 2, 3, 4, 5};
int sum = 0;
for (int k : n) { // n.length 만큼 반복
// 반복될 때마다 k는 n[0], ..., n[4]로 번갈아 설정
sum += k;
}
메소드의 배열 리턴
- 메소드가 배열을 리턴하는 경우, 배열 메모리 전체가 아니라 배열에 대한 레퍼런스만 리턴된다.
// 일차원 정수 배열을 생성하는 리턴하는 makeArray(), 이 메소드로부터 배열을 전달받는 프로그램
public class ReturnArray {
static int[] makeArray() { // 일차원 정수 배열 리턴
int temp[] = new int[4]; // 배열 생성
for (int i=0; i<temp.length; i++)
temp[i] = i;
return temp; // 배열 리턴. makeArray()가 종료해도 생성된 배열은 소멸되지 않음.
}
public static void main(String[] args) {
int intArray[]; // 배열 레퍼런스 변수 선언
intArray = makeArray(); // 메소드가 리턴한 배열 참조
for (int i=0; i<intArray.length; i++)
System.out.print(intArray[i] + " ");
}
}
자바의 예외 처리
예외 발생 사례
- 정수를 0으로 나누는 경우
- 배열의 크기보다 큰 인덱스로 배열의 원소를 접근하는 경우
- 정수를 읽는 코드가 실행되고 있을 때 사용자가 문자를 입력한 경우
try-catch-finally 문
try {
예외가 발생할 가능성이 있는 실행문
}
catch (처리할 예외 타입 선언) {
예외 처리문
}
finally { // 생략 가능
예외 발생 여부와 상관없이 무조건 실행되는 문장
}
예외 클래스
예외 타입 (예외 클래스) | 예외 발생 경우 | 패키지 |
ArithmeticException | 정수를 0으로 나눌 때 발생 | java.lang |
NullPointerException | null 레퍼런스를 참조할 때 발생 | java.lang |
ClassCastException | 변환할 수 없는 타입으로 객체를 변환할 때 발생 | java.lang |
OutOfMemoryError | 메모리가 부족한 경우 발생 | java.lang |
ArrayIndexOutOfBoundsException | 배열의 범위를 벗어난 접근 시 발생 | java.lang |
IllegalArgumentException | 잘못된 인자 전달 시 발생 | java.lang |
IOException | 입출력 동작 실패 또는 인터럽트 시 발생 | java.io |
NumberFormatException | 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환 시 발생 | java.lang |
InputMismatchException | Scanner 클래스의 nextInt()를 호출하여 정수로 입력받고자 하였지만, 사용자가 'a' 등과 같이 문자를 입력한 경우 | java.util |
// 0으로 나누는 예외에 대처하는 try-catch 블록
import java.util.Scanner;
public class DevideByZeroHandling {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int dividend;
int divisor;
System.out.print("나뉨수를 입력하시오:");
dividend = sc.nextInt();
System.out.print("나눗수를 입력하시오:");
divisor = sc.nextInt();
try {
System.out.println(dividend + "를 " + divisor + "로 나누면 몫은 " + dividend/divisor + "입니다.");
// divisor가 0인 경우 ArithmeticExceptio 예외 발생
}
catch(ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
}
finally {
sc.close();
}
}
}
'Language > Java' 카테고리의 다른 글
[Java] 상속 (0) | 2022.02.23 |
---|---|
[Java] 클래스와 객체 (0) | 2022.02.11 |
[Java] 자바 기본 프로그래밍 (프로그램 구조, 데이터 타입, 키 입력) (0) | 2022.02.05 |