본문 바로가기
수업내용

2030509 수업내용😶‍🌫️😶‍🌫️

by titlejjk 2023. 5. 9.

자바에서 try catch에 대해서 어제에 이어 배우고있다.

예제👉

package test.main;

import java.util.Scanner;

public class MainClass02 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.println("나눌 수 입력 :");
		String inputNum1 = scan.nextLine();
		System.out.println("나누어 지는 수 입력 : ");
		String inputNum2 = scan.nextLine();
		try {
			int num1 = Integer.parseInt(inputNum1);
			int num2 = Integer.parseInt(inputNum2);
		
			int result = num2/num1; //몫
			int result2 = num2%num1; //나머지
			System.out.println(num2 + " 를 " + num1 + " 으로 나눈 몫 :" + result);
			System.out.println(num2 + " 를 " + num1 + " 으로 나눈 나머지 :" + result2);
		}catch(NumberFormatException nfe) {
			System.out.println("숫자 형식으로 입력해 주세요!");
		}catch(ArithmeticException ae) {
			System.out.println("어떤수를 0 으로 나눌 수는 없어요");
		}
		System.out.println("main 메소드가 정상 종료 됩니다.");
	}
}

Exception 은 모든 Exception의 부모 type이다.

예외의 종류는 크게 2가지로 분류할 수 있다,

1. RuntimeExeption을 상속받은 예외

      try ~ catch 블럭으로 감싸는 것은 option 이다.

2. RuntimeException을 상속 받지 않은 예외

     try ~ catch 블럭으로 감싸는 것은 의무 이다.

package test.main;

import java.util.Scanner;

public class MainClass02 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.println("나눌 수 입력 :");
		String inputNum1 = scan.nextLine();
		System.out.println("나누어 지는 수 입력 : ");
		String inputNum2 = scan.nextLine();
		try {
			int num1 = Integer.parseInt(inputNum1);
			int num2 = Integer.parseInt(inputNum2);
		
			int result = num2/num1; //몫
			int result2 = num2%num1; //나머지
			System.out.println(num2 + " 를 " + num1 + " 으로 나눈 몫 :" + result);
			System.out.println(num2 + " 를 " + num1 + " 으로 나눈 나머지 :" + result2);
		}catch(Exception e) {
			//Exception type 은 모든 예외의 부모 type 이기 때문에 모든 예외가 여기서 처리 된다.
			System.out.println("예외가 발생했습니다.");
			System.out.println("예외 메세지 : " + e.getMessage());
		}finally {
			//여기는 예외가 발생을 하건 안하건 반드시 실행이 보장되는 블럭이다.
			//중요한 마무리 작업을 여기서 주로 수행한다.
			System.out.println("중요한 마무리 작업을 합니다!");
		}
		System.out.println("main 메소드가 정상 종료 됩니다.");
		/*
		 *  Exception 은 모든 Exception의 부모 type이다.
		 *  예외의 종류는 크게 2가지로 분류할 수 있다.
		 *  	1. RuntimeException을 상속 받은 예외
		 *  		try~catch 블럭으로 감싸는 것은 option 이다.
		 *  		
		 *  	2. RuntimeException을 상속 받지 않은 예외
		 *  		try~catch 블럭으로 감싸는 것은 의무 이다.
		 */
	}
}

일정 시간 실행의 흐름을 잡아 놓을 수 있다.

여기서 실행의 흐름이란 스레드(Thread)라 하면 작업 단위라고도 부른다.

package test.main;

public class MainClass03 {
	public static void main(String[] args) {
		System.out.println("main 메소드가 시작 되었습니다.");
		
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		System.out.println("main 메소드가 종료 되었습니다.");
	}
}

실행의 흐름을 스레드라고 하는데 스레드를 임의로 5초동안 잡아둔 예제 코드이다.

package test.main;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class MainClass05 {
	public static void main(String[] args) {
		/*
		 *	현재 존재하거나 혹은 존재하지 않는 파일이나 폴더를 제어 할 수 있는 File 객체를 생성해서
		 *	참조값을 f 라는 지역변수에 담기
		 */
		File f = new File("c:/acorn202304/myFolder/memo.txt");
		
		//File 객체의 메소드를 활용해서
		//실제 memo.txt 파일이 존재하지 않으면 파일을 만들고
		//존재하면 memo.txt 파일을 삭제하도록 프로그래밍해 보세요.
		Scanner scan = new Scanner(System.in);
		if(f.exists() == false) {
			System.out.println("파일이 존재하지 않아 새롭게 생성하겠습니다.");
			try {
				f.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}else {
			System.out.println("파일이 존재해 기존 파일을 삭제 하겠습니다.");
			f.delete();
		}
	}
}

File class에 대해서...

package test.mypac;

public class MyUtil {
	//5 초가 걸리는 가상의 그림을 그리는 메소드
	public static void draw() {
		System.out.println("5 초 동안 그림을 그려요...");
	
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		System.out.println("그림 완성!");
	}
	//5초가 걸리는 가상의 전송을 하는 메소드
	public static void send() throws InterruptedException {
		System.out.println("5초 동안 전송을 해요...");
		Thread.sleep(5000);
		System.out.println("전송 완료!");
	}
}

직접 만들어보는 예외처리 클래스

package frame05;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame extends JFrame{
	
	//생성자
	public MyFrame(String title) {
		super(title);
		//setBounds(x, y, width, height) 창의 위치와 크기 설정
		this.setBounds(100, 100, 500, 500);
		//이 프레임(MyFrame)의 x 버튼(close 버튼)을 눌렀을때 프로세스도 같이 종료 되도록 설정
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		setLayout(new FlowLayout());
		
		JButton sendBtn = new JButton("전송");
		add(sendBtn);
		
		//ActionListener 인터페이스 type 의 참조값을 얻어내서
		ActionListener listener1 = new ActionListener() {
			//이 리스너를 등록한 UI에 어떤 액션이 발생하면 호출되는 메소드
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("전송 버튼을 눌렀네?");
			}
			
		};
		
		//전송 버튼에 등록하기
		sendBtn.addActionListener(listener1);
		
		JButton deleteBtn = new JButton("삭제");
		add(deleteBtn);
		/*
		deleteBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("삭제 버튼을 눌렀네?");
			}
		});
		*/
		deleteBtn.addActionListener((e)->{
			System.out.println("삭제 버튼을 눌렀네?");
		});
		//프레임을 화면상에 실제 보이게 하기(false 하면 화면에 보이지 않는다.)
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		//MyFrame 객체 생성
		new MyFrame("나의 프레임");
		System.out.println("main 메소드가 종료 됩니다.");
	}
}

댓글