>익명 클래스(anonymous inner class)
이름이 없는 클래스
클래스 객체명 = new 클래스() { }; <------ 익명 클래스:
*노란색부분이 그대로 객체를 의미하기 때문에 부모 클래스에 자식 객체를 담는다는 의미
-익명 클래스는 앞에 있는 생성자의 클래스를 상속받고 있는 이름없는 자식 클래스이다. 또한 그 앞에 있는 생성자를 통해 만드는 객체 딱 하나만을 위한 클래스이다. 그래서 일회용 클래스이다.
(오버라이딩이 가능하다는것은 상속관계에서만 가능하다는것을 의미한다)
-이 때 만들어지는 객체는 익명클래스 안에서 구현한 메소드 내용을 가지게 되고 이렇게 만들어지는 객체는
익명구현객체 라고 한다.
:만약 또한 안에있는 메소드를 쓰고 싶으면 또 다시 mycar2 식으로 다시 만들어주어야 한다.
-자식 객체에 새로생긴 메소드는 담을 수는 있지만 사용할 수는 없다.
why? 자식객체를 부모클래스에 넣다= 업캐스팅 했다! 라는 의미
(업캐스팅하면 부모클래스에 있는 것과 오버라이딩된 메소드를 제외하고는 쓸 수 없다)
---> 그러면 형변환해서 사용할 수 있지않나..?!!!
but, 형변환할때 클래스의 이름이 필요하다. 근데 익명클래스는 이름이 없다. 그러므로 다운캐스팅이
불가능하다.
1.익명메소드의 예
2.익명클래스로 인터페이스를 호출하는 방법
--------------------------------------------------------------------------------------------------------------------------------->예외처리
에러 : 심각한 오류
예외 : 덜 심각한 오류, 개발자들이 일부러 발생시키는 예외이다.
syso(10/0) 출력하면 어떻게 나올까? 무한대?? 아니다.. 출력후 결과는 아래와 같다.
컴퓨터는 인간이 시키는대로 수행하기 때문에 원래였으면 무한대로 계속 나누었을것이다. 근데 개발자는 이것을 막기위해 이 경우의 수를 예외로 지정한 것이다. 예외를 처리한다는것은 이 예외를 해결하는 것이 아니라 서비스 측면에서 사용자에게 정보(ex)0으로 나눌수 없습니다)를 주려고 만들어진 것이다.
>예외처리문(try ~ catch ~finally)
try {
예외가 발생할 수 있는 문장
...
}
catch(예외클래스 객체명){
예외 발생시 실행할 문장
}
...
finally {
예외 발생 여부에 상관없이 실행할 문장
}
>Exception 클래스
:모든 예외들의 부모클래스
1. 사용자에게 정수 2개 입력받아서 예외발생할 경우 처리하는 방법
1) Scanner 호출하고 num1,num2 받아준다
2) try로 묶는다
3) 각각 오류클래스에 따라 catch로 받아주고 입력내용을 쓴다
4) 위의 오류를 제외하고 모든 오류를 포함하는 exception클래스가 있다(부모) 이곳에 알수없는 오류가 발생됨을
알려주기
5)오류클래스를 알고싶으면 사용자가 입력한 값을 물어본 후 출력해본다. 그러면 어떤 예외메소드인지 나온다.
ex) 10이랑 0 넣는데 오류가 발생했어요ㅠㅠ
--> 오 그렇군요 syso(e) 하면 java.lang.ArithmeticException 이라고 뜰것이다. 아 이 오류때문에 그런거구나!!
--> catch문을 만들어서 0으로는 나눌 수 없습니다 라고 써준다. 다시 알수없는 오류발생은 출력되게 해준다
(사용자가 오류를 만날때마다 이 문장이 뜨면 우리가 또 다시 입력값 물어봐서 출력하고 예외메소드 찾고
catch로 돌려주고 무한반복..)
6)한번 정수를 입력하면 끝나기 때문에 while문을 돌려준다.
7)while문은 try문을 감싼다.
8)그런데 여기서 이대로 끝내면 무한반복을 하게된다.
why? 입력한 값이 그대로 유지되어 오류메소드 안의 내용이 계속 반복적으로 출력되기 때문이다 .그러므로 처음으로 돌아갈 필요가 있다.
9)sc라는 객체가 생성되기 위해서는 스캐너를 안쪽에 써주거나 밖으로 빼준다.
>throws
:메소드 선언부 내부에서 발생하는 예외를 무시하고 호출하는 곳으로 떠넘기는 문법
호출하는 곳에서 예외가 발생할 수 있기 때문에 try~catch로 잡아주어야 한다.
리턴타입 메소드명() throws 예외1, 예외2,...{
예외1,예외2, ... 무시하는 구역
}
when?: 매번 try catch로 묶기 귀찮을 때, 예외처리를 다른곳에서 해줄 때
(거의 대부분 이미 throw를 넣어둔 메소드를 우리가 사용하는 것이기 때문에 throw자체를 쓰는것은 아니고
호출할때 try~catch로 잡아준다고 생각하면 된다)
예제1.throw
이해를 하기 어렵긴 하지만 throw가 왜 생겼는지 먼저 생각을 해보자. 먼저 나눗셈 메소드를 만들데 div(int num1, num2)를 쓰고 예외처리를 위해 if 문을 써준다. 0이면 ArithmeticException 메소드를 호출한것을 데려오고
1이면 FileNotFoundException 을 호출하게 한다. 만약에 이 메소드안에서 오류를 처리하게 되면 애매해진다. 왜냐하면 보통 이 메소드를 우리가 호출해서 사용하는데 우리가 어떤 오류가 발생했을때 다른 내용을 쓰고 싶을 수 있다. 뭐 예를 들어 'ArithmeticException이 뜨면 0이 나오는구려 라고 하고 싶은데 메소드안에서 다 처리해버리면 불가능하다.
그러므로 이 메소드를 던져(throw) 메인 메소드에서 잡는다(try catch)
----------------------------------------------------------------------------------------------------------------------------------
>API(Application Programming Interface)
-자바 시스템을 제어하기 위해서 자바에서 제공하는 명령어들을 의미한다. 선배 개발자들이 java에서 코딩을 쉽게 할 수 있도록 미리 만들어 놓은것들
-API의 종류는 굉장히 많고 다양하기 때문에 모두 외우는 것은 절대 불가능하다. 그렇기 때문에 처음 보는 API라도 설명과 이름, 매개변수 등을 잘 읽고 맞는 목적으로 잘 사용하는 방법을 알아야 한다.
*API 이클립스로 가져오는 방법
1.API 다운받은것을 잘라내기 한 후에 resource 폴더에 넣어준다.
2.넣으려는 java project에 우클릭하여 build path > configure build path > libraries >external jars > 추가하고 확인
3.이제 이 안에 있는 클래스 사용가능함. 클래스들 다 import 해주고 api 특성에 맞게 코드를 작성해준다. 끗!
'프로그래밍 > Java 정리' 카테고리의 다른 글
Java 13일차 - Collection Framework (0) | 2021.12.02 |
---|---|
Java 12일차 -Object, Wrapper,Generic class (0) | 2021.12.02 |
Java 10일차 - 추상,내부 클래스 (0) | 2021.11.30 |
Java 9일차 -Up casting, Down casting (0) | 2021.11.26 |
Java 실습 : 비지니스 프로그램 만들어보기 (0) | 2021.11.26 |