*예외처리 : 잘못된 코드, 부정확한 데이터, 예외적인 상황에의하여 발생하는 오류.
ex)
// int x = 1;
// int y = 0;
// System.out.println("한번나눠볼까");
// try{
// int result = x / y; //y가 0이 아니라면 바로 출력 , 0이라면 밑에 catch문 실행.
//
// }
// catch(Exception e){
// System.out.println("0으로 나눌 수 없습니다.");
// }
// System.out.println("이코드가 출력이 될까요?");
finally 블록
오류가 발생하였건 발생하지 않았건 항상 실행 되어야 하는 코드는 finally블록에 넣을 수 있다.
try catch 문 밑에 finally { ~~~ } 이런식으로.
*예외의 종류
IOException 같은 경우는 예외처리를 해주지 않으면 호출 시 컴파일러가 에러를 알려준다.
ex)
public static String readString(){
byte[] buf = new byte[100];
System.out.println("문자열을 입력하시오.");
System.in.read(buf); // read 메소드는 체킹예외인 IOException을 발생시키 기 때문에 호출시 예외처리를
return new String(buf); // 해주지 않으면 컴파일러가 에러를 알려줌.
}
public static void main(String[] args) {
System.out.println(readString());
예외처리 방법
1. 예외를 직접 처리하는 방법.
위 read 메소드에 에러가 뜨는데 그곳에 마우스를 올려 놓으면 두가지 방법이 나온다. 첫번째로 직접 처리하는방법을 누르면.
public static String readString(){
byte[] buf = new byte[100];
System.out.println("문자열을 입력하시오.");
try {
System.in.read(buf);
} catch (IOException e) {
// FIXME Auto-generated catch block
e.printStackTrace();
}
return new String(buf);
}
public static void main(String[] args) {
// FIXME Auto-generated method stub
System.out.println(readString());
첫번째 방법 으로 하면 try catch 구문이 만들어진다.
2. 두번째 방법은 예외를 전가. 해당 문장이 포함된 함수를 호출하는 놈에게 토스.
public static String readString() throws IOException{
byte[] buf = new byte[100];
System.out.println("문자열을 입력하시오.");
System.in.read(buf);
return new String(buf);
}
public static void main(String[] args) {
// FIXME Auto-generated method stub
try {
System.out.println(readString());
} catch (IOException e) {
// FIXME Auto-generated catch block
e.printStackTrace();
}
// readString() 에서 전가한 예외를 메인함수에서 처리함.↑
**정규 표현식과 Pattern클래스
문자열이 정해져 있는 형식으로 구성되어 있는지 검증해야 하는 경우가 있다.
예를 들어, 이메일, 전화번호 사용자가 제대로 입력했는지 검증해야 할 때 정규표현식과 비교한다.
ex)010-8888-7777 라는 전화 번호를 정규표현식으로 표현해보면
(02|010)-\\d{3,4}-\\d{4}
맨처음 02or010은 010또는 02를 나타내고
- <<요놈은 상수처럼 사용 된다.(전화번호에는 항상 붙으니까 넣어주시고)
\\d{3,4} 이놈은 3자리또는 4자리의 숫자를 말한다.
마찬가지로 - <<이거는 -를 포함한다는 것.
\\d{4} 4자리의 숫자를 말한다.
이메일을 정규표현식으로 바꿔 보겠다 (jsm9301@hanmail.net)
\\w+@\\w+\\.\\w+(\\.\\w+)?
\\w+ 이것은 한개 이상의 알파벳 또는 숫자 를 말한다.
@ 요놈은 -와 마찬가지;
\\w+ 한개 이상의 알파벳 또는 숫자를 말한다.
\\. << .은 - 나 @처럼 그냥 사용할 수 없다. .은 모든문자중에서 한개의 문자를 뜻한다.
\\w+ 한개 이상의 알파벳또는 숫자.
(\\.\\w+)? << 이것이 없거나 한번더 올 수 있음.
예를 들자면 이메일중에 asjfa@yahoo.co.kr 같은 이메일들이 있는데 요런메일들은 저 것이 없으면 안된다.
* Pattern 클래스
boolean result = Pattern.matches("정규식","검증할 문자열")
정규표현식 으로 문자열을 검증하는 방법.
ex)
public static void main(String[] args) {
// FIXME Auto-generated method stub
String regExp = "(02|010)-\\d{3,4}-\\d{4}";
String data = "010-123-4567";
boolean result = Pattern.matches(regExp, data);
if(result)
System.out.println("일치 합니다.");
else
System.out.println("불일치 합니다.");
regExp = "\\w+@\\w+\\.\\w+(\\.\\w+)?";
data = "jsm9301@naver.com";
result = Pattern.matches(regExp, data);
if(result)
System.out.println("일치 합니다.");
else
System.out.println("불일치 합니다.");
'[JAVA]' 카테고리의 다른 글
[JAVA]9월 30일 스레드, Runnable 인터페이스, 동기화, wait() 와 notify() (0) | 2015.09.30 |
---|---|
[JAVA]9월 25일 제네릭, 컬렉션, (0) | 2015.09.25 |
[JAVA]9월23일 패키지, 시스템 클래스, StringBuffer 와 StringBuilder 의 차이점, Wrapper 클래스, Date 클래스, StringTokenizer 클래스 (0) | 2015.09.23 |
[JAVA]9월 22일 내부 클래스, 무명클래스 (0) | 2015.09.22 |
[JAVA]9월 21일 다형성, 동적 바인딩, 추상클래스, 다중상속 (0) | 2015.09.21 |