37일차 java 연산(2023-02-14)

권단비·2023년 2월 14일
0

IT

목록 보기
69/139
1.try catch
2.trows

[Eclipse 연습]

[계산]
//에러를 고치시오
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입니다.

[trows]

예외 발생 지점에서 예외를 처리하지 않으면 해당 메소드를 호출한 영역으로 예외가 전달된다.
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
캐치 잡았음

[Checked Exception]

[계산]
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


[Checked Exception]

  • IOException
  • SQLException

[자바 가상머신의 메모리 모델]

메모리 공간 활용의 효율성을 높이기 위해 메모리 공간을 이렇듯 세 개의 영역으로 구분하였다.

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이 관리해줌
참조 관계가 끊어진 인스턴스는 접근이 불가! 가비지 컬렉션 대상

0개의 댓글