본문 바로가기

자바

3-3. main() 과 예외처리

* main( ) 메소드

 

 

-형태

 

public static void main(String[] args){

 

}

 

 

 

 

-특징

1. 프로그램의 시작은 main( )부터 시작 된다.

2. public 속성은 메소드가 다른 클래스에서 호출이 가능하다는 것을 나타냄. 프로그램 실행시에 JVM에서 호출

3. static 속성과 관련 - main( )메소드가 포함된 객체가 생성되기 전에 JVM에 의해 미리 호출됨을 나타냄   // 논리적으론 이해했는데 정확히 뭔말인지.. 

4. void는 리턴값이 없음

5. 주어지는 모든 인자를 문자열 배열(String[] )로 처리하여 main( )메소드에 전달 된다.

 

 

 

 

cf. main( )메소드는 클래스마다 1개씩 존재 할 수 있다. 그러나 여러 클래스 중 시작되는 main( )메소드를 가진 클래스는 1개이고 이것을 메인클래스라고 한다.

 

 

 

 

5번과 관련하여 조금 더 자세히

 

 

 

1. IDE 없이 그냥 메모장에 작성한 코드와 명령창을 이용하는 경우, 메인메소드에 인자 전달

 

C:\> java Hello option1 option2 ... optionN

 

빨간표시 한것이 명령행 인자(command line argument)  

이 명령행 인자들은 Hello 클래스의 메인메소드에 인자로 전달 됨.

 

 

 

실제 예

 

 

C:\> java Hello abc 3 % 5.7

 

 

 

 

class Hello

 

public static void main(String[] args){

 

}

 

args라는 문자열 레퍼런스 변수가 생기고

 

args.length 는 4이고

 

args[0] 값은  "abc", args[1] 값은 "3" , args[2] 값은 "%" , args[3] 값은 "5.7" 인 문자열 배열이 생기는 것.

 

 

 

 

 

2. Eclipse에서 메인메소드에 인자 전달

 

Run 메뉴 ㅡ> Run Configurations 메뉴 항목에서 Arguments 라는 배너에 들어가서  main( )메소드의 인자를 지정가능

 

 

 

 

-인자의 실제 이용

 

알다시피 전달 되는 값은 문자열 값이므로 이것을 이용하기 위해선 변환이 필요하기도 한다.

 

가령 사용한다면 다음과 같은 형태가 되겠다

 

 

C:\> java Calc 2 44 68

 

public class Calc {

public static void main(String[] args)

 

int sum = 0;

for(int i = 0; i<args.length; i++){

int n = Integer.parseInt(args[i]);     //하나 궁금한 사실은 n이 계속 다시 선언되는게 문제 안되나보네? C에서는 이런거 안되는거 같은데,  

sum+= n;                                       //그것도 가물가물함

}

 System.out.println("sum = "+sum);

}

 

 

 

 

 

 

*자바의 예외 처리

 

-컴파일시에 문법을 검사하므로 문법에 어긋나는 것들을 잡아냄(compile error). 그러나 실행 중(run-time)중에 발생하는 error를 미리 걸러내진 못함.

 

그래서 "예외"를 사용하여 처리함.  // 예외처리 하지 않으면 프로그램 실행도중에 그냥 강제종료 되어버림.

 

 

 

 

-try - catch -finally 문

 

try {

예외 발생가능성이 있는 실행문

}

catch(예외 종류) {

예외시 처리문

}

finally{

예외 발생여부와 상관없이 무조건 실행되는 문장

}                                                                                                          //finally 부분은 잘 안쓰임

 

 

 

예외 종류

 예외 내용

 ArithmeticException

 정수를 0으로 나눌 때

 NullPointerException

 NULL 레퍼런스 참조

 ClassCastException

 변환할수 없는 타입으로 객체 변환

 OutOfMemoryException

 메모리 부족한 경우

 ArrayIndexOutOfBoundsException

 배열의 범위를 벗어난 접근

 IllegalArgumentException

 잘못된 인자 전달

 IOException

 입출력 동작 실패 또는 인터럽트 발생

 NumberFormatException

 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환시

 

 

예외처리로 프로그램 종료 하고 싶을 땐 System.exit(0); 사용하면 됨.

 

'자바' 카테고리의 다른 글