36일차 java 연산(2023-02-13)

권단비·2023년 2월 13일
0

IT

목록 보기
67/139

[Eclipse 연습]

[계산]
//결과
//From Samsung printer
//This is a report about...
//
//From LG printer
//This is a report about...
interface Printable2 {
	public void print(String doc);
}
class SPrinterDriver2 implements Printable2 {
	@Override
	public void print(String doc) {
		System.out.println("From LG printer");
		System.out.println(doc);
	}
}
class LPrinterDriver2 implements Printable2 {
	@Override
	public void print(String doc) {
		System.out.println("From Samsung printer");
		System.out.println(doc);
	}
}
public class Test52 {
	public static void main(String[] args) {
		String myDoc = "This is a report about...";
		// 삼성 프린터로 출력
		Printable2 prn = new SPrinterDriver2();
		prn.print(myDoc);
		System.out.println();
		// LG 프린터로 출력
		prn = new LPrinterDriver2();
		prn.print(myDoc);
	}
}
[결과값]
From LG printer
This is a report about...

From Samsung printer
This is a report about...

[예외처리]

단순한 문법 오류가 아닌 실행 중간에 발생하는 '정상적이지 않은 상황'을 뜻한다.

에러 2 가지 종류

콜스택 : JVM이 쌓는다.
실시간 에러처리 메커니즘

1.컴파일 에러
  - 주체 : 컴파일 시점에서 발생하는 에러
  - 프로그램이 그 자리에서 프로그램을 중단시키고 객체로 표현한다.
2.실시간 에러
  - 주체 : JVM
  - JVM은 티비의 메인

java.lang.ArithmeticException

→수학 연산에서의 오류 상황을 의미하는 예외 클래스

java.util.InputMismatchException

→클래스 Scanner를 통한 값의 입력에서의 오류 상황을 의미하는 예외 클래스
[계산]
import java.util.Scanner;

public class Test52 {
	public static void main(String[] args) {
		Scanner kb = new Scanner(System.in);

		System.out.print("a/b... a? ");
		int n1 = kb.nextInt();

		System.out.print("a/b... b? ");
		int n2 = kb.nextInt();

		System.out.printf("%d / %d = %d \n", n1, n2, n1 / n2);
		System.out.println("Good bye~~!");
	}
}
[결과값]
a/b... a? 10
a/b... b? 5
10 / 5 = 2 
Good bye~~!

[만약 0으로 나눌 시 에러 발생]
a/b... a? 10
a/b... b? 0
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at Test52.main(Test52.java:13)

[만약 정수가 아닌 a를 넣을 시 에러 발생]
a/b... a? 10
a/b... b? a
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at Test52.main(Test52.java:11)

[try ~ catch]

try ~ catch 사용하는 이유

① 안 죽이려고

JVM은 에러가 나오면 그 자리에서 중단시키는 역할인데,
try ~ catch를 사용하면 개발자가 try{}안의 내용에서 에러 발생 시 책임을 지겠다는 것.
try{} : 에러가 발생할 수 있는 코드를 넣는다.
catch{} : 에러 발생 시 catch 안에 넣은 내용으로 출력
finally{} : 정상 실행이든 에러가 나든 무조건 실행 됨.
[계산]
import java.util.Scanner;
public class Exception2 {
	public static void main(String[] args) {
		Scanner kb = new Scanner(System.in);

		try {
			System.out.print("a/b... a? ");
			int n1 = kb.nextInt();

			System.out.print("a/b... b? ");
			int n2 = kb.nextInt();

			System.out.printf("%d / %d = %d \n", n1, n2, n1 / n2);
		} catch (Exception e) { // e 객체 넣는 JVM
			System.out.println(e.getMessage());
		}
		System.out.println("Good bye~~!");
	}
}
[결과값]
a/b... a? 10
a/b... b? 0
/ by zero
Good bye~~!

[계산]
import java.util.Scanner;

public class Exception2 {
	public static void main(String[] args) {
		Scanner kb = new Scanner(System.in);

		try {
			System.out.print("a/b... a? ");
			int n1 = kb.nextInt();

			System.out.print("a/b... b? ");
			int n2 = kb.nextInt();

			System.out.printf("%d / %d = %d \n", n1, n2, n1 / n2);

		} catch (Exception e) { // ArithmeticException을 사용해도 되지만, Exception을 사용하는 것이 더 좋다(부모임)
			System.out.println("메롱");
			//e.printStackTrace();
			//System.out.println(e.getMessage());
		}
		System.out.println("Good bye~~!");
	}
}
[결과값]
a/b... a? 10
a/b... b? 0
메롱
Good bye~~!

[계산]
import java.util.Scanner;

public class Exception2 {
	public static void main(String[] args) {
		Scanner kb = new Scanner(System.in);

		try {
			System.out.print("a/b... a? ");
			int n1 = kb.nextInt();

			System.out.print("a/b... b? ");
			int n2 = kb.nextInt();

			System.out.printf("%d / %d = %d \n", n1, n2, n1 / n2);

		} catch (Exception e) { // ArithmeticException을 사용해도 되지만, Exception을 사용하는 것이 더 좋다(부모임)
			System.out.println("메롱");
			e.printStackTrace();
			System.out.println(e.getMessage());
		} finally { // 정상 실행이든 에러가 나든 무조건 실행되어야하는 것은 finally에 집어 넣음
			System.out.println("파이널리 실행");
		}
		System.out.println("Good bye~~!");
	}
}
[결과값]
a/b... a? 10
a/b... b? 0
메롱
java.lang.ArithmeticException: / by zero
/ by zero
파이널리 실행
Good bye~~!
	at Exception2.main(Exception2.java:14)

[계산]
import java.util.Scanner;
public class Exception3 {
	public static void md1(int n) {
		md2(n, 0); // 이 지점으로 md2로부터 예외가 넘어온다.
	}
public static void md2(int n1, int n2) {
	int r = n1 / n2; // 예외 발생 지점
}
public static void main(String[] args) {
	try {
		md1(3); // 이 지점에서 md1으로부터 예외가 넘어온다.
	} catch (Exception e) {
		e.printStackTrace();
	}
	System.out.println("Good bye~~!");
}

}

>```
[결과값]
java.lang.ArithmeticException: / by zero
	at Exception3.md2(Exception3.java:10)
	at Exception3.md1(Exception3.java:6)
	at Exception3.main(Exception3.java:15)
Good bye~~!

[Casting 에러]

[계산]
import java.util.Scanner;

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!
	}
}
[결과값]
..intermediate location..
Exception in thread "main" java.lang.ClassCastException: class Board cannot be cast to class PBoard (Board and PBoard are in unnamed module of loader 'app')
	at ClassCastException.main(ClassCastException.java:17)

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

//public void println(String x) { // x = null
//    synchronized (this) {
//        print(x); >> F3 조회
//        newLine();
//    }
//}

//public void print(String s) { // s = null
//    write(String.valueOf(s)); //모든 데이터 타입을 String 문자열로 변경 >> F3 조회
//}

//public static String valueOf(Object obj) { // obj = null
//    return (obj == null) ? "null" : obj.toString(); // null일 경우 null을 반환
//}
[결과값]
null
Exception in thread "main" java.lang.NullPointerException
	at NullPointerException.main(NullPointerException.java:8)

[계산]
class Object {

	protected double r;

	public Object(int r) {
		this.r = r;
	}

	public double getArr(double r) {
		return this.r * this.r * Math.PI;
	}
}

class Circle15 extends Object {
	public Circle15(int r) {
		super(r);
	}

	@Override
	public String toString() {
		return "출력: 넓이는 " + super.getArr(r) + "입니다.";
	}
}

public class Test52 {
	public static void main(String[] args) {
		Object obj = new Circle15(10);
		System.out.println(obj);
	}
}
[결과값]
출력: 넓이는 314.1592653589793입니다.

0개의 댓글