예외처리, 객체지향 프로그래밍
부정과 불능 0 / 10(부정), 10 / 0(불능)
파일입출력(자료형, 배열)
import java.util.*; // scanner클래스 기능 모두 사용
public class DivideByZero {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int dividend; // 나누어질 수
int divisor; // 나눌 수
System.out.print("나누어질 수를 입력하시오:");
dividend = scanner.nextInt();
System.out.print("나눌 수를 입력하시오:");
divisor = scanner.nextInt(); // 나눗수 입력
try {//----------------------------------------------------------------------------
System.out.println(dividend + "를 "+divisor + "로 나누면 몫은 "+dividend / divisor + "입니다.");
} catch (ArithmeticException e) {//----------------------------------------------
System.out.println("0으로 나눌 수 없습니다...");
}
}
try catch문
try{
//예외발생 가능성이 있는 실행문
}
catch(처리할 예외 타입){
//예외 처리문
}
finally{
예외발생 여부와 상관없이 무조건 실행되는 문장(생략 가능)
}
public class Main022 {
public static void main(String[] args) {
try {
int[] numbers = { 1, 2, 3 };
System.out.println(numbers[4]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열인덱스가 잘못되었습니다");
}
}
}
Exception e의 하위 폴더
ㄴArithmeticException e
ㄴArrayIndexOutOfBoundsException e
문제 3개의 값을 입력받아서 정수가 아니면 오류메세지 추력하는 프로그램
시험문제
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("정수를 3개 입력하세요.");
int sum=0;
int n = 0;
for(int i=0; i<3; i++) {
try{
n = scanner.nextInt(); // 키보드에서 정수 입력
}catch (Exception e){
System.out.println("정수가 아닙니다. 다시 입력하세요");
scanner.next();//*****
i--; //
continue;
}
sum += n;
}
System.out.println("양수의 합은 " + sum);
}
}
코드에서 scanner.next();가 하는 역할을 간단하게 설명해볼게요!
scanner.next();의 역할:
scanner.next()는 입력 버퍼에서 다음 토큰(단어)을 읽어오는 메서드입니다. 여기서 중요한 점은 입력된 데이터를 읽어오는 데 사용된다는 것인데, 입력 값이 잘못되었을 때 그 잘못된 값을 소비하고 버리기 위한 용도입니다.
이 메서드는 입력 버퍼에서 문자열을 읽기 때문에, 예외가 발생했을 때 사용자가 잘못 입력한 잘못된 입력을 "버리기" 위해서 쓰입니다.
왜 scanner.next();를 사용해야 할까요?
이 코드는 사용자가 정수가 아닌 값을 입력했을 때 예외가 발생하는데, 예외를 처리하고 나서 잘못된 입력을 건너뛰기 위해 scanner.next();를 사용합니다.
예를 들어, 사용자가 abc 같은 문자를 입력했다면, scanner.nextInt()에서 **InputMismatchException**이 발생할 것입니다. 그때 catch 블록이 실행되는데, 여기서 scanner.next();가 호출되어 abc를 소비하고 버립니다.
이렇게 함으로써 입력 버퍼에 남아 있는 잘못된 값이 다음 입력을 방해하지 않도록 하고, 다시 i--와 continue로 반복문을 실행하여 사용자가 올바른 정수를 입력할 수 있게 만듭니다.
예시로 설명:
- 사용자가 "abc"를 입력 -> InputMismatchException 발생.
- catch 블록이 실행되어 "정수가 아닙니다. 다시 입력하세요"가 출력됨.
- scanner.next();가 호출되어 "abc"를 입력 버퍼에서 소비하고 버립니다.
- 반복문에서 i--가 실행되어, 사용자에게 다시 정수를 입력받을 수 있게 합니다.
코드 설명 (다시 보기):
try {
n = scanner.nextInt(); // 사용자 입력을 정수로 받으려고 시도
} catch (Exception e) {
System.out.println("정수가 아닙니다. 다시 입력하세요");
scanner.next(); // 잘못된 입력(문자열 등)을 버리기 위해 호출
i--; // 반복문 인덱스를 하나 감소시켜 다시 입력을 받도록 함
continue; // 그 다음 로직을 건너뛰고 반복문 처음으로 돌아가도록 함
}
즉, scanner.next();는 사용자가 잘못된 입력을 했을 때, 그 입력을 버리고, 정상적인 입력을 받기 위해 사용됩니다.
정리:
- scanner.next();는 잘못된 입력을 소비하고 버리는 역할을 합니다.
- 예외가 발생했을 때 catch 블록 내에서 이 메서드를 사용하여 잘못된 값을 버리고, 프로그램의 흐름을 정상으로 되돌리기 위한 목적입니다.
public static void - method
public class Rabbit{
String shape="";
int xpos;
int ypos;
void setPosition(int x, int y){
int xpos;
int ypos;
}
void printInfo(){
System.out.println(r"모양:"+shape+", 위치:("+xpos+","+ypos+")");
}
}
/*MainRabbit클래스*/
public class MainRabbit {
public static void main(String[] args) {
Rabbit rabbit1=new Rabbit();
Rabbit rabbit2=new Rabbit();
Rabbit rabbit3=new Rabbit();
//속성값대입: 객체명.속성명
rabbit1.shape="원";
rabbit1.shape="삼각형";
rabbit1.shape="토끼";
}
}
생성자란?
• 객체가 생성될 때 자동으로 호출되는 특별한 메서드를 말함
•클래스이름과이름이같고
•리턴타입이없는메서드입니다.
•객체가생성될때(new 키워드로) 자동 실행됩니다.
접근제어자 생략,
final데이터 필드값을 고정
클래스의 접근 제어자 의 특징(상속, 다형성, 은)
~~
객체지향 프로그래밍ppt 생성자까지 시험범위
클래스 생성, 속성...
생성자의 개념 역할...
'computing' 카테고리의 다른 글
20250508_java10 (0) | 2025.05.08 |
---|---|
나는 언제쯤 행복해질까? (0) | 2025.05.08 |
20250410_java6 (1) | 2025.04.10 |
DB기말 정리 (2) | 2025.04.07 |
20250407DB_부속질의 (0) | 2025.04.07 |