JAVA
예외 발생시키기, checked, unchecked 예외
예외 발생시키기, checked, unchecked 예외
2022.04.11예외 발생시키기 연산을 하거나, 메서드를 호출 했을 때, 예외가 발생할 수 있는데, 그것뿐만 아니라, 우리가 직접 예외를 발생시킬 수 도 있다. 먼저 객체를 만든다음, new연산자를 이용해서 예외 객체를 만들고, throw라는 키워드를 이용해서 예외를 발생시킨다 Exception e = newException("고의로 발생시켰음");. 에서 생성한 객체를 thorw e;로 던지는 것이다. 그래야 예외가 발생한다. 객체를 만드는 것 만으로는 예외가 발생하지 않는다. 꼭 throw를 써줘야 예외가 발생된다. 예제를 보면, 우선, 예외 객체를 만들었다. 생성자에 들어가는 "고의로 발생시켰음."이 예외 메시지이다. 예외 객체에는 예외에 대한 정보가 담겨있다. 그다음, 그 객체를 담고있는 참조변수 e를 throw..
printStackTrace(), 멀티 catch블럭
printStackTrace(), 멀티 catch블럭
2022.04.11printStackTrace()와 getMessage() 위의 메서드에 대해 알아보기 전에, 먼저 예외가 발생하면 어떤 일이 일어나는지 살펴보자. try블럭을 실행하다가, 0으로 나누는 부분에서 예외가 발생한다. 그러면, 이때 예외 객체가 생성된다. 이 객체의 타입은 ArithmeticException 이다. 이 객체에는 발생한 예외대한 정보가 들어있다. 그리고, 이 객체는 앞으로 살펴볼, printStackTrace(), getMessage()와 같은 메서드들을 가지고 있다. 예외가 발생하면, 예외 객체가 생성되는데, 예외 객체에는 예외에 대한 정보가 들어있고, 그 정보들을 printStackTrace(), getMessage()같은 메서드를 통해서 가져올 수 있다. 예외가 발생되었을 때, 생성된 예외..
예외 처리하기, try-catch문의 흐름
예외 처리하기, try-catch문의 흐름
2022.04.10전시간에 공부한 내용을 잠시 떠올려보자. 프로그램 오류는 크게 3가지 종류로 구분했다. 컴파일에러 런타임 에러 (실행 중에 발생한 에러) Error : 심각한 에러 Exception : 미약한 에러 Exception과 그 자손들 RuntimeException과 그 자손들 논리적 에러 이렇게 정의해서 구분해 놓았었다. 그런데, 우리가 심각한 에러인 Error는 어떻게 할 수가 없지만, 미약한 에러인 Exception을 처리하기 위해서, Exception에 대비한 코드를 작성하는 것이 "예외 처리"이다. 예외 처리하기, try-catch문 예외가 발생 할 때, 처리하는 것이 try-catch문 이고, 작성 방법은 위의 예시와 같다. 예외가 발생할 가능성이 있는 블럭을 try블럭에 넣고, 예외가 발생했을 때,..
프로그램 오류, 예외 클래스의 계층구조
프로그램 오류, 예외 클래스의 계층구조
2022.04.08프로그램 오류 [프로그램 오류의 종류] 컴파일 에러(cmpile-time error) : 컴파일 할 때 발생하는 에러 런타임 에러(runtime error) : 실행 할 때 발생하는 에러 논리적 에러(logical error) : 작성 의도와 다르게 동작 컴파일 에러는 정확히 이야기하면, 컴파일 타임에러다. 즉, 컴파일 할 때 발생하는 에러이다. System.out.println 이라고 작성해야 하는데 대문자 S를 소문자s로 작성했더니, system을 해석할 수 없다는 컴파일 에러가 발생한다. 원래는 javac.exe가 자바 컴파일러라서 이 명령어를 사용해서 컴파일 해야하는데, 인텔리제이가 자동으로 컴파일을 해준다. 커맨드창에서 직접 컴파일을 해볼까? ExceptionTest.java파일이 있는 src경..
익명 클래스
익명 클래스
2022.04.08익명 클래스 (anonymous class) 이름이 없는 일회용 클래스. 정의와 생성을 동시에 익명클래스가 뭐냐면, 이름이 없는 일회용 클래스다. 익명 클래스는 클래스 정의와 객체 생성을 동시에 한다. 익명 클래스의 문법은 아래와 같다. 보통, 일반적인 클래스는 class MyClass { } 이렇게 만들고, 객체 생성은 MyClass mc = new MyClass(); 이런식으로 할 것이다. 그런데, 만약에 클래스 이름이 없으면, 객체를 생성할 수 없을 것이다. 클래스 이름이 없으므로, 조상이름을 대신 쓴다. 그런데, 익명 클래스처럼 클래스 이름이 없으면, 일반적인 방법으로 객체를 생성할 수 없을 것이다. 따라서, 그럴 경우에는, 자기이름이 없으므로 조상이름을 대신 사용한다. new Object() {..
내부 클래스의 제어자와 접근성
내부 클래스의 제어자와 접근성
2022.04.08내부 클래스의 제어자와 접근성 내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일 원래 클래스 앞에는 (default) 혹은 public 만 가능하다. 그런데, 내부 클래스 앞에는 접근제어자 private, protected, public, (default) 이렇게 4개가 전부 가능하다. 왜냐하면 iv, cv등의 멤버들에는 4개가 모두 가능한데, 내부 클래스의 sope가 iv, cv, lv 변수들과 같기 때문이다. 예제를 보면, InstanceInner라는 인스턴스 내부클래스가 있고, StaticInner라는 static내부클래스가 있고, LocalInner라는 지역내부클래스가 있다. 여기서 핵심은, static 멤버를 가질 수 있는 것은, static내부 클래스 뿐이라는 것이다. 인스턴스 내부 ..