자바에서 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 메소드가 종료 됩니다.");
}
}
'수업내용' 카테고리의 다른 글
20230511 수업내용🤦♂️🤦♂️ (1) | 2023.05.11 |
---|---|
20230510 수업내용🤦♂️🤦♂️ (0) | 2023.05.10 |
20230508 수업내용😢😢😢 (0) | 2023.05.08 |
20230504 수업내용😶🌫️😶🌫️ (0) | 2023.05.04 |
20230503 수업내용🤣🤣 (0) | 2023.05.03 |
댓글