1. try~catch문 메커니즘
try{
1.
2. (예외발생) int num = 3/0;
3.
}catch(Exception e){ //다형성
4.
}
5.
가. 2에서 예외발생됨
나. 발생된 예외를 JVM 에게 알린다.
다. JVM에서 발생된 예외를 처리 가능한 클래스를 찾는다.
XXXException 을 찾았다.
라. XXXException 클래스를 객체생성한다.
XXXException x = new XXXException(발생된예외정보 ); / by zero
마. 자바코드로 생성된 변수 x 를 던진다.
throw x; //던진다.
2. 다중 catch 문
==> 계층구조에서 하위클래스부터 catch 해야된다.
==> 세밀한 예외처리 와 가독 성 (권장)
try{
1. ( ArithmeticException
2. ( NullPointException
}catch(ArithmeticException a){
}catch(NullPointException b){
}catch(Exception a){
}
3. finally 문
==> 반드시 수행되어야 하는 문장. (예외발생 유무와 상관없이)
==> 자원반납( 파일, 데이터베이스 ) : close 작업을 의미
try{
}catch(){
}finally{
}
4. throws 예외처리
: throw 와 별개이다.
: 실행되는 단위가 메소드이다.
: 예외가 발생된 곳에서 예외처리하지 않고
호출한 메소드로 떠넘기는 방식이다.
예>
main(){ a() throws XXXException, yyy{ b() throws XXXException,yyy
try{
a(); b(); //예외발생
}catcg(XXXEx e){
}catch(yyy e){
}
} } }
: 용도
==> 2가지
가. 원격 작업 ( 네트워크 통신 )
main():로컬 <————————-> a(): 서버
나. 사용자 정의 예외클래스 사용하는 경우
==> API 예외클래스(시스템정의예외클래스)로 예외처리가 불가능한 경우에
사용자가 만든 예외클래스로 처리할 수 있다. ( 일반적 )
==> 일반 애플리케이션을 만들면 개발자가 예외라고 가정하는 경우에
담당하는 예외클래스이다.
예>
int num = 10;
if( num == 10 ) ==> 예외라고 가정할 수 있다.
==> 발생된 시스템정의예외클래스를 사용자 정의예외클래스로
변경해서 재발생시키는 경우: 한글로 예외처리하기 위한 방법.
6. 사용자 정의 예외클래스
가. 클래스 정의
: extends Exception
public class MyException extends Excepiton{ }
나. 구현
: 문자열 하나있는 생성자 작성
public class MyException extends Excepiton{
public MyException(String mesg){
super(mesg); // e.getMessage() , e.printStackTrace() 확인
}
}
7. 예외클래스 종류
– 종류1
: 시스템정의 예외클래스
==> JVM 이 발생시킨다.
: 사용자정의 예외클래스
==> 사용자가 발생시킨다.
throw new MyException(“에러”);
==> 용도
: 특정조건에 위배될때
: 시스템예외를 사용자예외로 변경해서 발생시킬때 ( end user 편의)
– 종류2
: compile checked 예외클래스 (*)
==> 컴파일시점에 예외처리 유무를 검사한다.
반드시 예외처리를 해야 된 다.
==> IOException , SQLException 계열
==> 개발자가 신경써야 된다. 예외처리를 안하면 컴파일 에러가 발생되기 때문이다.
예>
BufferedWtier b = new BufferedWtier();
try{
b.write();
}catch(IOException e){}
: compile unchecked 예외클래스
==> 컴파일 시점에 예외처리 검사를 안한다.
예외처리를 할 필요가 없다.
==> RuntimeException 계열
==> 개발자가 잘못이기 때문에 시스템이 검사안한다.
==> 예외처리를 안한다.
==> 개발자가 신경쓸 필요가 없다. ( 자동, 코드주의하자)
8. 상속관련 예외처리
: 오버라이딩 메소드 관련
– 리턴타입 동일
– 메소드명 동일
– 인자 리스트 동일
– 접근 지정자는 확대만 가능
– 예외는 축소만 가능
Super ( public void a() {} throws IOException )
Sub public void a() throws SQLException{}
9. 대량 데이터 저장 ( ==> 데이터를저장하는 방법)
-변수
: 10 , 20 , 30 ~ 100
int n= 10;
int n1= 20;
int n2 = 30;
..
int n99 = 100;
“홍기동” , “이순신”, “유관순”;
String name = “홍기동”;
String name2 = “이순신”;
String name3 = “유관순”;
..
=====> 변수가 많아지면 관리가 어렵다.
가. 배열
: 하나의 변수이름(배열명)으로 대량의 데이터를 관리할 수 있다.
: PDT , RDT 배열로 구현 가능.
: 같은 데이터형 만 저장 가능하다.
: 배열명은 변수이고 참조형 변수이다. ( 위치값을 가진다.)
: 배열생성방법
=>문법 1 ( new 이용 )
1) 배열 선언
: 데이터형 [] 배열명; (*) , 데이터형 배열명 [];
PDT RDT
int [] num; String [] name;
2) 배열생성
: 배열명 = new 데이터형[방크기];
: 각 방에는 데이터형의 기본값이 저장된다.
num = new int[3]; name = new String[4];
==> 1),2)을 한꺼번에 가능핟.
int [] num = new int[3];
String [] name = new String[4];
3) 배열 초기화
: 각 방에 데이터 저장
: 배열명[인덱스값|첨자];
=> 인덱스값은 0 부터시작
==> 배열크기: 배열명.length
num.length ==> 3 name.length ==> 4
num[0] = 1; name[0] = “홍길동”;
num[1] = 2; name[1] = “이순신”;
num[2] = 3; name[2] = “유관순”;
name[3] = “강감찬”;
=> 문법2 ( 리터럴 이용 )
: 저장 데이터를 확실히 아는 경우.
int [] num = { 1, 2 ,3 };
String []name = {“홍길동” , “이순신” , “유관순” , “강감찬”};
==========================> 일차원 배열 ( 행 )
* 2 차원 배열
: 행 ,열
int [][] num; String[][]name;
num = new int[2][2]; name = new String[행크기][열크기];
==> 정방형형태로 생성
num[0][0] = 1;
num[0][1] = 2;
num[1][0] = 3;
num[1][1] = 4;
num = new int[3][]; //동적열 생성 가능
나. 컬렉션 ( 그릇 )
: RDT만 구현 가능.(클래스만 저장 가능 )
==> 기본데이터형은 Wrapper 클래스를 이용해서 저장한다.
====> 모든 데이터를 저장할 수 있다.
: 서로다른 데이터형도 저장 가능하다.
: 컬렉션의 계층구조 ( java.util 패키지 )
Collection (interface) – add, clear , remove, size ,,..
|
Set(Interface ) List(Interface )
: 데이터 중복안됨, : 데이터 중복 , 순서가 있다.
순서 없다.
| |
HashSet ArrayList , Vector
(Iterator) (Iterator) ( Iterator,Enumeration)
Map 계열
: 이름/값 ( 키/값 ) 쌍으로 저장한다.
: 이름을 주고 값을 얻는다.
: 검색속도가 빠르다.
: 안드로이드에서 주로 사용.
: HashMap, Hashtable, Properties
: 제네릭(generic)
: Enumeration 와 Iterator
==> java.util.Enumeration (이유멀레이션)
: hasMoreElements() =>boolean
: nextElement() =>Object
==> java.util.Iterator ( 이터레이터 )
: hasNext()==> boolean
: next() ==> Object
: remove()
==> 컬렉션에 저장된 데이터를 얻어올때 사용한다.