System.out.println("Hello, World");

'2012/03/26'에 해당되는 글 4건

  1. 2012.03.26 자바 : 예외처리 및 기타
  2. 2012.03.26 자바 : Exception
  3. 2012.03.26 자바 : BigDecimal
  4. 2012.03.26 자바 : Exception 클래스 만들기와 Throw

throws : 예외 발생한 메소드를 호출한 caller 메소드에서 처리하도록 하는 것.
try, catch, fianlly : 발생한 예외를 직접 처리 하는 것

throws
-발생한 Exception에 대해 자신이 책임을 지지 않고 자신을 호출한 곳으로 Exception을 던져주는 역할

throws구문
[제한자] returnType 메서드이름([매개변수]) throws ExceptionType , ..... { }
ex : public void go() throws AException, BException{}


 메소드 overriding 복습
-하위 class에서 부모의 메소드 재정리
◇규칙-전제 : 이름 통일
 ① return Type, 매개변수가 동일
 ② 하위의 접근제한자가 상위것과 같거나 더 넓어야 한다.
 ③ 부모가 throws한 것만 할 수 있다.
   - 부모에서 throws 한것을 안할 수 있다. 



  Super클래스
public void go() throws AException{
~~~~}
Sub클래스
public void go(){}
가능하다 
public void go() throws AException, BException
불가능하다, 더 던지는것은 불가능하며, 최상위 부모는 보지 않고 바로 위 부모만 확인해야 한다.
public void go() throws A1Exception, A2Exception
부모타입이라면 던질수 있다. 

try, catch, finally의 사용
try{ // 오류가 발생 할지 안 할지 확실치 않으므로 일단 시도 (try)
    오류(예외)가 발생할 가능성이 있는 코드
}
catch(예외타입 e){ // 예외타입에 맞는 예외가 발생한다면 잡는다 (catch) / 다른 타입이 발생한다면 못 잡는다.
    처리코드
}

~try내부에 여러 코드를 일괄 처리 할 수 있지만 Exception이 발생하면 Exception을 처리하고 try/catch밖의 실행구문을 실행한다.
 
public class ExceptionTest1 {
	public static void main(String[] args) {
		//uncheck 계열의 Exception
		//ArrayIndexOutOfBoundsException - 배열의 index범위를 넘었을때 발생
		//NullPointerException - null값을 가진 변수의 instance멤버 호출시 발생
		//ArithmeticException - 산술 연산상 문제 발생시 발생(0으로 나눈 경우)
		String str = null;
		try{System.out.println(str.concat("def"));//null포인터 인셉션 일어남//100%
		}catch(NullPointerException ne){
			System.out.println("NullPointerException 1번);
		}
		try{System.out.println(10/0);
		}catch(ArithmeticException eee){
			System.out.println("ArithmeticException 2번");
		}try{
			int[] arr={10,20,30};
			System.out.println(arr[10]);
		}catch(ArrayIndexOutOfBoundsException eeee){
			System.out.println("ArrayIndexOutOfBoundsException 3번");
		}		
		System.out.println("메소드 종료");
	}
}

<결과창>

 예외 처리 없이 정상적으로 실행시 1번 구문에 있는 try문 안에 있는 구문 종료후 catch문을 건너뛰고 2번으로 가고 2번  도 이상없으면 3번으로 이동후 3번도 이상없으면 System.out.println("메소드 종료") 구문을 출력하고 종료되어야 한다. 
 하지만 위 소스는 모든 것에 예외처리를 주었다. 또한 각각 try-catch구문을 따로 해놓아 예외처리를 따로따로 처리한  다.

<금일 진행한 소스코드> 
  <Divide.java와 ExceptionTest.java, ZeroDivideException.java SET>
ExceptionTest 결과값
 
Posted by 김마농
오류
- 프로그램이 정상적으로 실행하지 못하는 상황


오류의 종류
Error : 심각한오류 - H/W적 오류
Exception(예외) : mild(덜 심각)한 오류 - S/W적 오류
                         실행시 정상적인 흐름, 프로그래머가 의도한 흐름으로 가지 못하는 상황을 일컫는다.



Throwable : 오류의 최상위


Unchecked
- 컴파일러가 Exception 처리여부를 check 안함
- 처리(Handling)보다는 code수정을 통해 해결한다.
발생이유 : Code상의 문제 때문에 발생
                 Complier의 check가 불가능한 경우 

Checked
 - 컴파일러가 Exception 처리 여부를 check함
 - check하지 않았을 경우 complie 에러 발생
 - Exception Handling을 통해 해결한다.
발생이유 : Code상 문제가 아니라 User가 잘못 사용하거나 실행 환경상 문제로 발생.
               발생확률은 50:50이며 처리가 필요하다. 

Exception 관련 Keyword
오류를 발생
- throw

오류를 처리하는 역할
- throws
- try : catch 또는 finally와 함께 사용되어야 한다.
- catch : try와 함께 사용되어야 한다.
- finally : try와 함께 사용되어야 한다.

Exception Class 정의하는 법
◇ Exception class 작성
1. checked : Exception을 extends
  unchecked : RuntimeException을 extends

2. public class로 정의
3. no-argument 생성자 정의
4. 필요한 Attribute, 메소드 구현
5. class의 이름 : ~~Exception(~~는 Exception 발생원인으로 네이밍한다.)

 Exception의 발생
 - 구문 : throw Throwable의 객체;

Posted by 김마농
BigDecimal
java.Math.BigDecimal - double로 표현이 안되는 부동소수점(실수)로 표현
              BigInteger  - long으로 표힌이 안되는 정수를 표현

BigDecimal의 생성
new BigDecimal("10.5");
BigDecimal 사용 예
import java.math.BigDecimal;
public class BigDecimalTest {
    public static void main(String[] args) {
        System.out.println(2.00 - 1.10); // 0.9나와야 하는데 0.899999999 나옴
        BigDecimal b1 = new BigDecimal("2.00");
        BigDecimal b2 = new BigDecimal("1.10");
        System.out.println(b1.subtract(b2)); // 제대로 나옴
    }
}
BigDecimal 나눗셈시 주의사항
- 나눗셈 계산이 끝나지 않고 무한히 반복될때(무한소수)exception이 발생하므로 표기할 자리수와 처리방식을 정해주어야 함.
import java.math.BigDecimal;
public class BigDecimalTest {
	public static void main(String[] args) {
		System.out.println(2.00-1.10);
		BigDecimal d1 = new BigDecimal("2.00");
		BigDecimal d2 = new BigDecimal("1.10");
		//+:add(), -:subtract(), / : divide(), *:multiply
		BigDecimal result = d1.subtract(d2);
		double d = result.doubleValue();
		System.out.println(result +" :"+d);
		//첫번째 인수 : 나눌수, 2번째 인수는 scale : 소수점이하 몇 자리까지, 3번째는 소수점 이하 처리 방식
		result = d1.divide(d2,3,BigDecimal.ROUND_CEILING);//소수점자리 3자리까지 반올림처리
		System.out.println("나눈결과 : "+result);
	}
}
Posted by 김마농
 
//Exception클래스 만들기
//0으로 숫자를 나눴을때의 예외상황을 표현하기 위한 클래스
public class ZeroDivideException extends Exception{
	public ZeroDivideException(){}//Exception 클래스 형태
	public ZeroDivideException(String message){
		super(message);
	}
}
 


Posted by 김마농