1.try catch
2.trows
[계산] //에러를 고치시오 import java.util.InputMismatchException; try { int num = 6 / 0; } catch (InputMismatchException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }
[계산] //부모에 있는 변수 함수 써 먹을 수 있다. //플리몰피즘 적용해서 함수 오버라이딩 해서 써 먹겠다. import java.util.Scanner; class Object1 { protected double r; public Object1(double r) { this.r = r; } public double getArr() { return this.r * this.r * Math.PI; } } class Circle16 extends Object1 { public Circle16(double r) { super(r); } @Override public String toString() { return "넓이는 " + super.getArr() + "입니다."; } } public class Test53 { public static void main(String[] args) { Object1 obj = new Circle16(10); System.out.println(obj); } }
[결과값] 넓이는 314.1592653589793입니다.
예외 발생 지점에서 예외를 처리하지 않으면 해당 메소드를 호출한 영역으로 예외가 전달된다.
public static void main(String[] args) throws Exception {...}
→ main을 호출하는 JVM한테 exception을 던진다.
JVM은 콜스택 보여주면서 오류 띄워줌
public static void function1() throws InputMismatchException {...}
→ function1을 호출하는 main한테 exception을 던진다.
[계산] import java.util.InputMismatchException; import java.util.Scanner; public class Test53 { public static void function1() throws InputMismatchException { Scanner sc = new java.util.Scanner(System.in); int num = sc.nextInt(); // 해당 메소드가 main에 있을 시 // int형이 아닌 String 입력 시 InputMismatchException 오류 발생 // function1을 호출한 main함수로 던진다. System.out.println("good bye"); } public static void main(String[] args) { try { function1(); } catch (InputMismatchException e) { System.out.println("캐치 잡았음"); } } }
[결과값] 123 good bye as 캐치 잡았음
[계산] import java.io.BufferedWriter; import java.io.IOException; import java.util.InputMismatchException; import java.util.Scanner; public class Trows2 { public static void function1() throws InputMismatchException { // throws로 넘기거나 try&catch로 예외처리하여 에러를 잡을 수 있다. BufferedWriter writer = null; try { writer.write('A'); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { try { function1(); } catch (InputMismatchException e) { System.out.println("캐치 잡았음"); } } }
・Runtime Exception(실시간) = UnChecked Exception :
-ArrayIndexOutOfBound : 범위를 벗어남
public static void main(String[] args){
int[] arr = {1,2,3};
for(int i = 0; i < 4; i++)
System.out.println(arr[i]); // 인덱스 값 3은 예외를 발생시킴 (0,1,2까지 메모리 생성되어 있음.)
-ClassCastException : 자식=부모일 때 나오는 에러
class Board {
}
class PBoard extends Board {
}
public class ClassCastException {
public static void main(String[] args) {
Board pbd1 = new PBoard();
PBoard pbd2 = (PBoard) pbd1; // Ok!
System.out.println("..intermediate location..");
Board ebd1 = new Board();
PBoard ebd2 = (PBoard) ebd1; // Exception!
}
}
-NullPointerException : str.length(); 에러
import java.util.Scanner;
public class NullPointerException {
public static void main(String[] args) {
String str = null;
System.out.println(str); // null 출력
int len = str.length(); // Exception!
}
}
-ArithmeticException
-InputMismatchException
메모리 공간 활용의 효율성을 높이기 위해 메모리 공간을 이렇듯 세 개의 영역으로 구분하였다.
JVM | 내용 |
---|---|
메소드 영역 | 메소드의 바이트코드, static 변수 |
스택 영역 | 지역변수, 매개변수 |
힙 영역 | 인스턴스(new) |
[계산]
public static void simpleMethod(){
String str1 = new String("My String");
String str2 = new String("Your String");
...
str1 = null; // 참조 관계 소멸 | 지시로 하여금 JVM에게 메모리 정리해도 좋다라는 의미로 사용해왔다.
str2 = null; // 참조 관계 소멸
...
메모리 관리는 JVM이 관리해줌
참조 관계가 끊어진 인스턴스는 접근이 불가! 가비지 컬렉션 대상