728x90
반응형
이틀 연속으로 예외 처리에 대해서 배웠다.
사실 수업 끝나고 바로는 힘들기도 하고 정신도 없어서 지금 주말에 몰아서 블로깅을 시작하고 있는데
며칠 지났다고 벌써 가물가물하다. 정말 꼭 남아서 블로깅을 다 하는 습관을 다시 들여야겠다...
package com.sist.main;
/*
* 1. 클래스 만들기 : 재사용 ===> import (라이브러리 만들기 => .jar) => 상속(재정의)
* = 변수
* = 메모리를 따로 생성 (new 사용) - 인스턴스변수
* = 메모리를 한개만 사용 (static)
* = 메소드 => 리턴형(결과값), 매개변수(사용자로부터 전송받은 값)
* => 기본데이터형 => 모아서 한개의 데이터형(클래스)
* 1) 리턴형
* 결과값이 없으면 - void
* 일반데이터 (int, double, char, boolean, long)
* 클래스 - 상세보기
* 배열 - 목록
* 2) 매개변수
* 기본데이터형
* 클래스. 배열
*
* = 연산자 (항상 같은 데이터형끼리만 연산이 가능)
* 단항연산자 (++, --, !, (type))
* 이항연산자
* 산술(+,-,*,/,%) - 형변환
* 비교연산자 ( ==, !=, <, >, <=, >)
* 논리연산자 (&&, ||)
* 범위나 기간에 포함 (&&), 미포함 (||)
* 대입연산자 (=, +=, -=)
*
* = 제어문
* 조건문 (if, else if,else)
* 반복문 (while, for)
* 반복제어 (break)
* 2. 에러 발생 방지하는 프로그램 - 예외처리
* 미리 예측해서 => 구현
* = 예외 복구 - try~catch
* try - 정상수행할 수 있는 문장
* catch - 프로그래머의 실수, 사용자가 입력, 복구가 완료
* finally (생략가능) => 오라클, 네트워크, 파일 => (종료: close)
* => 자동으로 에러를 처리하는 것은 아니다 (점프)
* => catch는 예상되는 에러퍼리 (여러개 사용이 가능) => 예외처리 클래스의 순서
* => 잘 모른다 catch(Exception e)
* => 에러메세지 확인
* = getMessage() (*문제 - 오라클 연결시에 null이라고 뜸)
* = printStackTrace() *** 권장 => 위치 지정
* => try~catch는 항상 소스 전체를 대상으로 하지 않는다 (에러가 예상되는 부분)
* = 예외 회피 => Throws
* = 예외 전환 => 다른 예외를 발생해서 화면 변경
* 3. 라이브러리 활용
*
*
*
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/*
* 초기화 => 처음에 필요한 데이터값을 설정
* 페이지 => 0 => page=1
* ==============================
* class Movie
* {
* int page=1; // 명시적 초기화
* }
* class Login
* {
* String id, pwd;
* => cookie (자동로그인)
* {
* 구현 (초기화 블록)
* }
* Login()
* {
* 구현 (생성자)
* }
* }
*/
public class MainClass extends JFrame implements ActionListener{
// JFrame 윈도우 => MainClass 윈도우의 모든 기능을 사용할 수 있다.
// ActionListener => Menu, Button, Textfield (Enter)
// 포함 클래스
JTextField tf; // 입력창 (한줄) => ID, Password
JTextArea ta; // 입력창 (여러줄)
JButton bu1, bu2;
// class 안에서 변수 : 기본데이터형, 배열, 클래스 (여러개를 한번에 저장하는 공간)
// 게임관련 변수
int[] com= {5,8,3};
int[] user=new int[3];
int s,b; // 멤버변수는 초기화가 안된 상태에서는 0값으로 초기화 되어 있음
public MainClass() //멤버변수에 대한 초기화 담당
{
tf=new JTextField(10);
tf.setEnabled(false);// 클래스는 초기화 => new
ta=new JTextArea();
JScrollPane js=new JScrollPane(ta);
ta.setEnabled(false); // 비활성화 => 힌트출력 영역
bu1=new JButton("시작");
bu2=new JButton("종료");
// 윈도우에 배치
JPanel p=new JPanel();
p.add(tf); p.add(bu1); p.add(bu2);
add("Center", js);
add("South",p);
// 윈도우 크기 설정
setSize(350, 500);
setVisible(true);
tf.addActionListener(this); // 숫자를 입력하고 엔터를 치면 => actionPerformed
bu1.addActionListener(this);
bu2.addActionListener(this);
}
public static void main(String[] args) {
MainClass m=new MainClass();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==bu2)
{
System.exit(0); // 프로그램 종료
}
else if (e.getSource()==bu1)
{
JOptionPane.showMessageDialog(this, "게임을 시작합니다!!"); // this - 윈도우 창 위에 띄우라는 명령어
bu1.setEnabled(false); // 비활성화
tf.setEnabled(true); // 활성화
tf.requestFocus(); //focus
}
else if(e.getSource()==tf)
{
// 입력한 값을 가져 온다
String strNum=tf.getText();
if(strNum.length()<1)
{
String msg="세자리 정수를 입력하세요";
ta.append(msg+"\n");
}
// 문자열 => 정수변환
try
{
int num=Integer.parseInt(strNum); // javac java
/*
* CheckException UncheckException
* ===============
* 컴파일시 검사 실행시에 검사
* = 반드시 예외처리 = 필요할때 예외처리
* IO (입출력) ***
* URL (네트워크)
* SQL (데이터베이스) ***
* Thread (쓰레드)
* 클래스 관련
*/
}
catch(NumberFormatException ex) // RunTimeException - 생략이 가능
{
String msg="정수만 입력이 가능합니다!!";
ta.append(msg+"\n");
tf.setText("");
tf.requestFocus();
// 처음으로 다시 돌아간다 (매소드만 종료할때)
return;
}
}
}
}
숫자야구게임을 윈도우 창에 띄우는 코드이다. 처음부터 끝까지 다 짜여진 코드는 아니고, 사용자가 입력할 가능성이 있는 코드들을 모아서 예외처리를 하는 과정때문에 쓰여진 코드이다.
숫자를 입력해야 게임이 가능하기 때문에 try-catch절을 사용해서 정수를 입력하지 않으면 다시 처음으로 돌아가게 하는 형식으로 코드를 짜고 있다.
package com.sist.main;
/*
* 예외 회피 : 시스템에서 처리 => throws
* 형식)
* 접근지정어 리턴형 메소드명 (매개변수..) throws 예상되는 에러등록 .....
* 예)
* public void display throws NumberFormatException, NullPointerException,
* ClassCastException, Exception
* =============================== 순서가 없다
*
* => display() 호출시에
* = 회피
* public void main() throws NumberFormatException, NullPointerException,
* ClassCastException, Exception
* {
* display();
* }
*
* public void main() throws Exception
* {
* display();
* }
* public void main() throws Throwable
* {
* display();
* }
*
* =복구
* {
* try
* {
* display()
* }catch(Exception ex){}
* }
*
*
*/
public class MainClass2 {
public void display() throws Exception, NumberFormatException, ArrayIndexOutOfBoundsException, ArithmeticException // 그동안 생략하고 있었던것 - 그래서 안써도 가능하다 , Exception을 주면 check 에러들이 있기 때문에 반드시
// 에러처리를 해줘야함
{
}
public static void main(String[] args) throws Exception { // 이렇게 쓰면 에러 복구를 못하고 지나가기만함
MainClass2 m =new MainClass2();
// FileReader fr=new FileReader("c:\\javaDev\\movie.json");
}
}
에러를 처리하는 방법에는 에러를 복구하는 방법 | 회피하는 방법이 있는데, 후자는 간접처리에 해당한다.
package com.sist.main;
/*
* 복구
* 회피 => 에러 통과 (복구할 수 없다) throws
* 전환 => 임의로 에러를 발생할 수 있다 throw
*
* 프로그램 제작
* =========
* 자바 : 미국 => 한국실정에 맞춰서 변경 => 사용자 정의
* throw -> 사용자 정의를 찾기 위해 사용하는 문장
* 예외처리
* throw new 예외()
*
*/
public class MainClass3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
String s=" 100";
int i=Integer.parseInt(s); // 문자열을 정수로 변환
}catch(NumberFormatException ex)
{
System.out.println("정수 변환 오류");
try {
throw new Exception(); //예외 처리 호출
// throw => 사용자 정의 예외처리를 호출할때 주로 사용
// throw => 마지막줄에 소스코딩을 한다
}
catch (Exception e) {
System.out.println("다시 입력하세요!!");
}
}catch(ArrayIndexOutOfBoundsException ex) {
System.out.println("배열 범위 초과");
}catch(Exception ex) {
}
}
}
위의 코드 역시 에러 처리를 해주는데 try-catch절을 이중으로 사용한 것을 볼 수 있다.
throw new 예외()의 형식으로 써주면서 예외처리를 할 수 있다.
학원에 나갔던 날이었는데 그냥 이정도로 예외처리를 복습하고 크게 색다른 내용은 배우지 않았던거 같다.
728x90
반응형
'programming > Gukbi' 카테고리의 다른 글
국비 교육 23일차 - 라이브러리 활용 (0) | 2021.01.25 |
---|---|
국비 교육 22일차 - 라이브러리 활용 (0) | 2021.01.24 |
국비 교육 19일차 - 예외처리 (0) | 2021.01.20 |
국비 교육 18일차 - abstract & interface (0) | 2021.01.19 |
국비 교육 17일차 - 상속, 포함 (0) | 2021.01.19 |