클래스 메소드에서 인스턴스 라면(변수) 가 올 수 없는 이유?
static 이란 한번 먼저 올려서, 공유하는 변수 이다.
class AAA {
int num = 0; //객체가 생성되야 사용 가능
static void addNum(int n) { // 스테틱변수를 먼저 메모리에 올리기 때문에
num += n; // 스테틱 함수에는 스테틱 변수만 올 수 있음.
}
}
Java
복사
main 메소드가 public이고 static인 이유는?
static인 이유! 인스턴스 생성과 관계없이 제일 먼저 호출되는 메소드이기 때문
public인 이유! main 메소드의 호출 명령은 외부로부터 시작되는 명령이다.
단순히 일종의 약송으로 이해해도 괜찮다.
예외처리
1.
try catch finaly
2.
throws
•
단순한 문법 오류가 아닌 실행 중간에 발생하는 ‘정상적이지 않은 상황’을 뜻함.
자바는 예외처리 메커니즘을 제공한다.
package day20220928;
import java.util.Scanner;
public class ExceptionCase3 {
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~~!");
}
}
Java
복사
⇒1입력 후 0입력할때; 정상적이라면 Good bye~~! 가 출력되어야 하는데, 출력되지않음
•
에러 문구를 띄워주는 주체는? ⇒ JVM 자바가상머신
•
에러가 발생한 위치에서 프로그램을 종료시켜버리고, 어떠한 에러인가에 대한 정보를 줌.
◦
/ by zero : 에러의 내용
◦
ExceptionCase3.java:16 : 16번째 줄
예외 처리 try catch (finally)
finally
•
예외가 발생하든 아니든 반드시 타야하는 부분이 있을 때 사용됨.
package day20220928;
public class trycatchTest {
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
b = a/b; //에러발생이 안되기때문에 정상적으로 a 출력
System.out.println("트라이 안");
} catch (Exception e) {
e.printStackTrace();
System.out.println("캐치"+a);
System.out.println("캐치"+b);
}finally {
System.out.println("파이널리입니다.");
}
System.out.println("트라이 캐치 바깥");
System.out.println(a);
}
Java
복사
Exercise
package day20220928;
import java.util.Scanner;
public class trycatchTest {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
try {
System.out.println("a/b...a?");
int n1 = kb.nextInt();
System.out.println("a/b...a?");
int n2 = kb.nextInt();
System.out.printf("%d / %d = %d \n", n1, n2, n1 / n2);
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
} finally {
System.out.println("무조건 실행");
}
System.out.println("Good bye~~!");
}
}
Java
복사
Exercise 문자를 넣어도 프로그램이 죽지않게
만약 catch (Exception e) 가 제일 위에서 작동한다면?