- 컴파일 에러
- 컴파일 할때 에러 검출
- 오타
- 런타임 에러
- 실행시 에러 검출 (컴파일시 에러 없음)
- Exception
- 강제로 프로그램이 종료됨
→Exception 처리
API
- java.util
- 컬렉션
집합데이터형 (배열)을 확장한 집합데이터형 - 순서(index)가 있는 컬렉션
- ArrayList / Vector
- 크기가 신축성있게 늘어난다
- 순서가 없는 컬렉션
- HashMap / HashTable
- HashSet : 중복데이터 배제
- ...
- Date / Calendar
- 문자열 데이터 다음으로 많이쓰는 것이 날짜 데이터
- Random
- Scanner
public class ExceptionEx02 {
public static void main(String[] args) {
//예외
System.out.println("프로그램 시작");
int num1 = 0;
int num2 = 10;
//int result = num2/num1; //java.lang.ArithmeticException: / by zero
//전통적인 예외 처리 방법 if문으로 검사
//if(num1 != 0){
// int result = num2/num1;
//}
//예외처리 try catch
try { //try의 영역은 Exception이 일어날것 같은 최소의 영역을 잡아준다. //try 안에서 변수를 선언하면 지역변수가 된다
System.out.println("Exception 시작");
int result = num2/num1;
System.out.println("Exception 끝"); //Exception 발생하면 밑에 줄은 처리하지 않음
} catch (ArithmeticException e) { //e는 변수명 //Exception발생시 JVM에서 인스턴스화 시킴 → new ArithmeticException();
System.out.println("Exception 발생");
System.out.println(e.getLocalizedMessage()); //Excepton 메소드는 Throwable클래스 메소드를 상속받음
System.out.println(e.getMessage());
e.printStackTrace();
}
System.out.println("프로그램 끝");
}
}
2
public class ExceptionEx03 {
public static void main(String[] args) {
System.out.println("프로그램 시작");
int num1 = 0;
int num2 = 10;
//예외처리 try catch finally
try {
System.out.println("Exception 시작");
int result = num2/num1;
System.out.println("Exception 끝");
} catch (ArithmeticException e) {
System.out.println("Exception 발생");
} finally {
System.out.println("무조건 실행"); //자원을 쓰다가 Exception 발생유무에 상관없이 반납할 때 필요합
}
System.out.println("프로그램 끝");
}
}
3
public class ExceptionEx04 {
public static void main(String[] args) {
System.out.println("시작");
//예외 2개 처리
//catch 는 else if와 비슷함 : 하나의 값이 만족하면 뒤에구문을 실행하지 않음
try {
String name = null;
int num1 = 0;
int num2 = 10;
int result = num2/num1;
System.out.println(name.length());
System.out.println(result);
} catch (ArithmeticException e) {
System.out.println("에러1 : "+ e.getMessage());
} catch (NullPointerException e) {
System.out.println("에러2 : "+ e.getMessage());
}
System.out.println("끝");
}
}
4
public class ExceptionEx05 {
public static void main(String[] args) {
System.out.println("시작");
//예외 2개 처리
//catch 는 else if와 비슷함 : 하나의 값이 만족하면 뒤에구문을 실행하지 않음
try {
String name = null;
int num1 = 2;
int num2 = 10;
int result = num2/num1;
System.out.println(name.length());
System.out.println(result);
} catch (ArithmeticException e) {
System.out.println("에러1 : "+ e.getMessage());
} catch (Exception e) { //Exception은 모든 예외의 상위 클래스이므로 모든 에러를 잡는다. 따라서 하위 ArithmeticException 보다 먼저 오면 에러남
System.out.println("에러2 : "+ e.getMessage());
}
System.out.println("끝");
}
}
5
public class ExceptionEx06 {
// 강제 익셉션 발생 throw
public void method1(int num){
System.out.println("메서드 시작");
try {
if(num >= 100){
throw new Exception("num 값이 100보다 크다"); //개발자가 익셉션을 만들 수 있음
}
} catch (Exception e) {
System.out.println("exception 발생");
}
System.out.println("메서드 끝");
}
//강제 익셉션의 위임 throws
public void method2(int num) throws Exception {
System.out.println("메서드 시작");
if(num >= 100){
throw new Exception("num 값이 100보다 크다");
}
System.out.println("메서드 끝");
}
//MyException 강제 위임
public void method3(int num) throws MyException {
System.out.println("메서드 시작");
if(num >= 100){
throw new MyException("num 값이 100보다 크다");
}
System.out.println("메서드 끝");
}
public static void main(String[] args) {
ExceptionEx06 ex = new ExceptionEx06();
ex.method1(10);
ex.method1(200);
try {
ex.method2(200);
} catch (Exception e) {
System.out.println("메소드에서 강제위임된 exception 처리");
}
try {
ex.method3(200);
} catch (MyException e) {
//System.out.println("Myexception 발생 : "+e.getMessage());
e.printStackTrace();
}
}
}
6
import java.io.*;
class MyException extends Exception{
private String message;
private Throwable cause;
//constructor
public MyException() {
super();
}
public MyException(String message, Throwable cause) {
super(message, cause);
this.message = message;
this.cause = cause;
}
public MyException(String message) {
super(message);
this.message =message;
}
public MyException(Throwable cause) {
super(cause);
this.cause = cause;
}
//setter getter
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Throwable getCause() {
return cause;
}
public void setCause(Throwable cause) {
this.cause = cause;
}
//method
public void printStackTrace(){
System.out.println(":: Error 발생 !! ::");
System.out.println("에러 사유 = "+message);
System.out.println("관련 클래스 = "+cause);
System.out.println(":: Error 출력 끝 !! ::");
super.printStackTrace(System.out);
}
public void printStackTrace(PrintStream out){
super.printStackTrace(out);
}
public void printStackTrace(PrintWriter out){
super.printStackTrace(out);
}
}
public class Ex07 {
public static void main(String[] args) {
int x = 100;
int y = 0;
int tot = 0;
try {
tot = x/y;
} catch (ArithmeticException ae) {
MyException me = new MyException("나눗셈", ae);
// throw me;
me.printStackTrace();
}
System.out.println("tot = "+ tot);
}
}
7
public class ArrayListEx01 {
public static void main(String[] args) {
ArrayList al1 = new ArrayList();
ArrayList al2 = new ArrayList(100);
String data1 = "박문수";
String data2 = "이몽룡";
String data3 = "이순신";
//add
al1.add(data1); //자동형변환 al1.add((Object)data1);
al1.add(data2);
Object obj3 = data3;
al1.add(obj3);
//size
System.out.println(al1.size());
al1.add("성춘향");
System.out.println(al1.size()); //데이터가 들어 올때 자동으로 사이즈가 늘어남
//get
for(int i=0; i<al1.size(); i++){
System.out.println((String)al1.get(i));
}
System.out.println();
//향상된 for문
for(Object obj: al1){
String str = (String)obj;
System.out.println(str);
}
System.out.println();
//set
al1.set(0, "방자");
System.out.println(al1.get(0));
//remove
al1.remove(0);
System.out.println(al1.get(0));
//clear
al1.clear();
System.out.println(al1.size());
}
}
8
public class ArrayListEx02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList al = new ArrayList();
//Object ← Wrapper ← 기본자료형
//Autoboxing
al.add(10);
al.add(20);
al.add(30);
al.add(30.1);
//unboxing //기본자료형 ← Wrapper ← Object
int a = (Integer)al.get(0);
int b = (Integer)al.get(1);
int c = (Integer)al.get(2);
int sum = a+b+c;
System.out.println(a);
System.out.println(b);
System.out.println(c);
//향상된 for 문
for(Object obj : al){
Integer i = (Integer)obj; //실수로 정수가 아닌 데이터가 들어왔을때 처리못함 //data 안정성이 떨어짐
System.out.println(i);
}
}
}
9
import java.util.ArrayList;
public class ArrayListEx03 {
public static void main(String[] args) {
//Generic
//컬렉션에 데이터 안정성을 위해
//입력 데이터 제한
ArrayList<String> al = new ArrayList<>(); //Object가 아니라 String으로 받을것을 예약함
al.add("홍길동");
//al.add(10); //String 타입이 아니면 에러
al.add("박문수");
al.add("성춘향");
for(String data : al){ //String으로 받음
System.out.println(data);
}
ArrayList<Integer> al1 = new ArrayList<>(); //Object가 아니라 Integer으로 받을것을 예약함
al1.add(10);
al1.add(20);
int a = al1.get(0); //Wrapper로 형변환 할 필요없음
int b = al1.get(1);
int sum = al1.get(0) + al1.get(1);
System.out.println(a);
System.out.println(b);
System.out.println(sum);
}
}
10
//자바빈(Bean)
//데이터를 저장할 목적으로 만든 클래스
public class Person {
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
import java.util.ArrayList;
public class ArrayListEx04 {
public static void main(String[] args) {
Person p1 = new Person("홍길동",21);
Person p2 = new Person("박문수",22);
Person p3 = new Person("성춘향",18);
// ArrayList 데이터타입을 클래스로 받음
ArrayList<Person> al = new ArrayList<>();
al.add(p1);
al.add(p2);
al.add(p3);
Person p = al.get(0);
System.out.println(p.getName());
System.out.println(al.get(0).getAge());
System.out.println();
//향상된 for문
for(Person pp : al){
//System.out.println(pp.getName());
//System.out.println(pp.getAge());
System.out.printf("%s의 나이는 %d \n", pp.getName(), pp.getAge()); //프린트 문자서식 %s 숫자서식 %d
}
}
}
11
import java.util.Collection;
import java.util.HashMap;
import java.util.Set;
public class HashMapEx01 {
public static void main(String[] args) {
// HashMap
HashMap<String, String> hm = new HashMap<>();
hm.put("a", "이몽룡");
hm.put("b", "박문수");
hm.put("c", "성춘향");
System.out.println(hm.size());
System.out.println(hm.toString()); //Object의 toString메소드를 오버라이딩해서 만들었음
System.out.println(hm.get("a"));
System.out.println(hm.get("b"));
System.out.println(hm.get("c"));
//key를 가져오는 방식
Set<String> keys = hm.keySet();
System.out.println(keys.toString());
for(String key : keys){
System.out.println(key);
System.out.println(hm.get(key));
}
//values를 가져오는 방식
Collection<String> values = hm.values();
for(String value: values){
System.out.println(value);
}
}
}
12
import java.util.HashSet;
import java.util.Iterator;
public class HashSetEx01 {
public static void main(String[] args) {
//HashSet 순서없음
HashSet<String> hs = new HashSet<>();
hs.add("자바");
hs.add("에스프레소");
hs.add("카푸치노");
System.out.println(hs.size());
System.out.println(hs.toString());
//HashSet 중보의 배제
hs.add("자바");
hs.add("자바");
System.out.println(hs.toString());
//향상된 for
for(String str : hs){
System.out.println(str);
}
//반복자
Iterator<String> i = hs.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
}
13
import java.util.Properties;
import java.util.Set;
public class PropertiesEx01 {
public static void main(String[] args) {
// Properties (시스템환경)은 HashMap기반임
Properties props = System.getProperties();
Set<Object> keys = props.keySet();
for(Object obj : keys){
System.out.println((String)obj);
System.out.println(props.getProperty((String)obj));
}
}
}
14
import java.util.Calendar;
import java.util.Date;
public class DateEx01 {
public static void main(String[] args) {
// Date클래스 //잘 사용하지 않음 Calendar클래스를 많이 사용
// 시스템의 현재 날짜 정보를 가져옴
Date d = new Date();
System.out.println(d.toString());
System.out.println(d.toLocaleString()); //API설명서를 보면 이 메소드는 Deprecated 된다고 함
//Calendar c = new Calender();
Calendar c = Calendar.getInstance();
System.out.println(c.toString());
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH)+1); //달은 0부터 시작
System.out.println(c.get(Calendar.DATE));
System.out.println(c.get(Calendar.DAY_OF_WEEK)); //일요일 1
String[] arrWeek = {"일","월","화","수","목","금","토"};
System.out.println(arrWeek[c.get(Calendar.DAY_OF_WEEK)-1]);
System.out.println(c.get(Calendar.HOUR));
System.out.println(c.getActualMaximum(Calendar.MONTH)+1); //max 달+1
System.out.println(c.getActualMinimum(Calendar.MONTH)+1);
System.out.println(c.getActualMaximum(Calendar.DATE)); //max 일
System.out.println(c.getActualMinimum(Calendar.DATE));
System.out.println(c.getTime()); //Data 객체로 반납함
}
}
15
import java.util.Calendar;
public class DateEx02 {
public static void main(String[] args) {
// 시스템 날짜
Calendar c = Calendar.getInstance();
//새로운 날짜에 대한 정보
c.set(2014, 1-1, 1);
System.out.println(c.getTime());
c.set(2014, 1-1, 1-1); //일짜에 1-1로 세팅하면 전날이 나옴
System.out.println(c.getTime());
//날짜 더하기
Calendar c1 = Calendar.getInstance();
c1.add(Calendar.DATE, 1); //일짜 1더하기
System.out.println(c1.getTime());
c1.add(Calendar.MONTH, -6); //월짜 6빼기
System.out.println(c1.getTime());
}
}
16
import java.util.Random;
public class RandomEx01 {
public static void main(String[] args) {
// Random
Random r1 = new Random();
Random r2 = new Random(System.currentTimeMillis()); //seeding 주기 //중복되지 않는 수
System.out.println(r2.nextInt());
System.out.println(r2.nextInt());
System.out.println(r2.nextInt());
System.out.println(r2.nextInt(10));
System.out.println(r2.nextInt(10));
System.out.println(r2.nextInt(10));
}
}
17
import java.util.StringTokenizer;
public class StringTokenizerEx01 {
public static void main(String[] args) {
String data1 = "사과&배&복숭아";
// 문자열 자르기
StringTokenizer st1 = new StringTokenizer(data1, "&"); //구분자 입력
System.out.println(st1.countTokens());
while(st1.hasMoreTokens()){
System.out.println(st1.nextToken());
}
}
}
18
import java.util.StringTokenizer;
public class StringTokenizerEx02 {
public static void main(String[] args) {
String data1 = "사과&배&&&복숭아";
// 문자열 자르기
// StringTokenizer 데이터가 없으면 제거해 버림
StringTokenizer st1 = new StringTokenizer(data1, "&");
System.out.println(st1.countTokens());
while(st1.hasMoreTokens()){
System.out.println(st1.nextToken());
}
System.out.println();
//split 데이터를 없으면 공백으로 비워둠
String[] arrs = data1.split("&");
System.out.println(arrs.length);
for(String data : arrs){
System.out.println(data);
}
}
}
19
import java.util.Scanner;
public class ScannerEx01 {
public static void main(String[] args) {
// 프로그램 외부에서 입력 받는 방법
// 1. String[] args
// 2. Scanner
Scanner scan = new Scanner(System.in); //system.in 시스템 인풋
System.out.print("입력 : ");
String msg = scan.next(); //lock //프로그램 실행 멈춤 //입력대기 상태, 엔터키를 치면 입력
System.out.println("입력 메시지 : " +msg);
scan.close(); //스캔 닫기
}
}
20
import java.util.Scanner;
public class ScannerEx02 {
public static void main(String[] args) {
// Scanner 여러줄입력 //띄어쓰기를 하더라도 하나의 줄로 읽는다
Scanner scan = new Scanner(System.in);
System.out.print("이름 : ");
String msg1 = scan.nextLine();
System.out.print("암호: ");
String msg2 = scan.nextLine();
System.out.println("입력 메시지 : " +msg1);
System.out.println("입력 메시지 : " +msg2);
scan.close();
}
}
21
import java.util.HashSet;
import java.util.Random;
final class Lotto{ //더이상 바뀔 필요가 없는 클래스이기 때문에 final 선언
private static Random r1 = new Random(System.currentTimeMillis()); //랜덤객체를 멤버화 한것을 사용자가 알 필요없으므로 private 선언
//메소드를 시행하기 전에 먼저 실행되어있어야 하므로 static 선언
private Lotto(){} //인스턴스를 만들 필요가 없으므로 생성자에 private선언
public static void castNum(){ //다른 곳에서 메소드를 사용해야 하므로 public선언
//인스턴스를 생성하지 않고 메소드 사용이 가능하게 static선언
//리턴값이 없으므로 void 선언
for(int i=1; i<=5;i++){
HashSet<Integer> hs = new HashSet<>();
while(hs.size()<=5){
hs.add(r1.nextInt(44)+1);
}
System.out.println(hs.toString());
}
}
}
public class LottoEx01 {
public static void main(String[] args) {
Lotto.castNum();
}
}
댓글 없음:
댓글 쓰기