'JAVA' 카테고리의 다른 글
File 클래스 (0) | 2014.09.12 |
---|---|
자바 IO ( Ⅱ ) (0) | 2014.09.12 |
예외처리 ( Exception ) (0) | 2014.09.12 |
Calendar 클래스 (0) | 2014.09.12 |
자료구조 - ArrayList / 제네릭 클래스 / 확정for 문 (0) | 2014.09.12 |
File 클래스 (0) | 2014.09.12 |
---|---|
자바 IO ( Ⅱ ) (0) | 2014.09.12 |
예외처리 ( Exception ) (0) | 2014.09.12 |
Calendar 클래스 (0) | 2014.09.12 |
자료구조 - ArrayList / 제네릭 클래스 / 확정for 문 (0) | 2014.09.12 |
1. 예외 (Exception)처리
- 예외 : 프로그램 실행도중에 예기치 못하게 발생되는 경미한 에러
- 예외처리 : 예외가 발생되었을때 이에 대한 적절한 처리를 하는것
- 형식
try{
예외가 발생될수 있는 실행문장;
...
} catch(예외타입1 참조변수){
예외가 발생되었을때의 적절한 처리문장;
....
}finally{
예외와 상관없이 무조건 수행해야 할 문장;
...
}
==> 예외가 발생될수 있는 문장을 try{}블록으로 묶고 catch 절에서 예외가 발생되었을때 해당하는 적절한 처리를 한다.
ex>
package test01.exception;
import java.util.Scanner;
public class Test01{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(true){
System.out.println("첫번째 수 입력(종료:0)");
int a=scan.nextInt();
if(a==0){
break;
}
System.out.println("두번째 수 입력");
int b=scan.nextInt();
try{
int c=a/b;
System.out.println(a+"/"+b+"="+c);
}catch(ArithmeticException e){
System.out.println("오류메시지:" + e.getMessage());
System.out.println("0으로 나눌수 없습니다.");
continue;
}
}
}
}
ex>
package test01.exception;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test02{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("1st:");
try{
int n1=scan.nextInt();
System.out.println("2st:");
int n2=scan.nextInt();
int n3=n1/n2;
System.out.println("나누기한 값 "+ n3);
}catch(InputMismatchException ie){
System.out.println("숫자만 입력하세요.");
}catch(ArithmeticException ae){
System.out.println("0으로 나눌수 없습니다.");
}
System.out.println("Exit!!");
}
}
자바의 모든 예외는 Exception의 자식클래스이므로 Exception은 모든 예외를 처리할 수 있다.
catch절에서 Excepion은 모든 예외를 처리할수는 있으나 자식예외보다 먼저 위치할 수는 없다.
ex>
package test01.exception;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test03{
private static Scanner scan;
public static void main(String[] args) {
scan = new Scanner(System.in);
System.out.println("1st:");
try{
int n1=scan.nextInt();
System.out.println("2st:");
int n2=scan.nextInt();
int n3=n1/n2;
System.out.println("나누기한 값 "+ n3);
// 모든 예외는 Exception타입으로 처리할수 있다.
}catch(InputMismatchException e){
System.out.println("숫자만 입력합니다.");
}catch(Exception ie){
// 부모예외가 반드시 아래에 와야 함.!!
System.out.println(ie.getMessage());
}
System.out.println("Exit!!");
}
}
2. Exception의 종류
- 자바에는 두가지 종류의 익셉션이 있다.
1) Checked Exception
- RuntimeException을 상속받지 않은 예외클래스
- 반드시 try~catch절로 예외처리를 해야 하며 예외처리를 하지 않으면 컴파일시에 오류를 발생시킨다.
예) IOException, FileNoFoundException,...
2) UnChecked Exception
- RuntimeException을 상속받은 예외클래스
- try~catch절로 예외처리를 하지 않아도 컴파일시에 오류가 발생되지 않으며 프로그래머가 선택적으로 try~catch로 처리한다.
예) NumberFormatException, ArithmeticException,...
EX>
package test01.exception;
import java.io.*;
public class Test04{
public static void main(String[] args){
//String a="10 00";
//int n=Integer.parseInt(a);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("keyboard로 부터 숫자를 입력받다.");
//keyboard로 부터 한줄 입력받
try{
String num=br.readLine();
int n1=Integer.parseInt(num);
System.out.println(num);
}catch(IOException ie){
System.out.println(ie.getMessage());
}catch(NumberFormatException e){
System.out.println("숫자만");
}
}
}
3. 예외처리방법
- 자바에서는 예외처리방법이 두가지가 있다.
방법1) 예외가 발생될수 있는 문장을try~catch로 직접 처리
방법2) 자신이 직접 처리하지 않고 throws로 예외를 떠넘기는 방법이 있다.
throws로 떠넘길때는 이를 호출하는 곳에서 try~catch로 처리해야 한다.
ex> 방법 1 예외가 발생될수 있는 문장을try~catch로 직접 처리
package test01.exception;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test05{
public static void main(String[] args){
String name=input("이름입력");
System.out.println(name);
String phone=input("전화번호입력");
System.out.println(phone);
}
public static String input(String msg){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(msg);
String str="";
try{
str=br.readLine();
return str;
}catch(IOException ie){
System.out.println(ie.getMessage());
return null;
}finally{
System.out.println("finally");
}
}
}
ex> 방법 2 throws로 예외를 떠넘기는 방법
package test01.exception;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test06{
public static void main(String[] args){
try{
String name;
name =input("이름입력");
System.out.println(name);
String phone=input("전화번호입력");
System.out.println(phone);
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
// 자신이 처리하지 않고 throws로 예외를 넘김.--> 메소드를 호출한 곳에서 try~catch로 처리한다.
public static String input(String msg)throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(msg);
String str="";
str=br.readLine();
return str;
}
}
ex> 값 2개 입력받아 나눗셈 실행하기.
package test01.exception;
import java.util.Scanner;
public class Test07{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("1st :");
int n1=scan.nextInt();
System.out.println("2st :");
int n2=scan.nextInt();
try{
int n3=div(n1,n2);
System.out.println("나눗셈 한 값 :" + n3);
}catch(ArithmeticException ae){
System.out.println("0으로 나눌수 없습니다.");
}finally{
System.out.println("무조건 실행");
}
System.out.println("Exit!!");
}
public static int div(int n1, int n2) throws ArithmeticException{
int n3=n1/n2;
return n3;
}
}
4. 예외를 강제로 발생시키기
문법적인 오류는 아니더라도 논리적으로 오류가 있을때 예외를 강제로 발생시킬수 있다.
형식> throw 예외객체;
EX> 가로,세로 값으로 넓이 구하기. 강제 예외 발생
package test01.exception;
public class Test08{
public static void main(String[] args){
//사각형 가로,세로
int x=100,y=-200;
try{
//사각형넓이 구하기
int rectArea = area(x,y);
System.out.println("사각형 넓이:" + rectArea);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
public static int area(int x, int y) throws Exception
{
//Exception e=new Exception("가로,세로는 0보다 커야 한다.");
// 논리적으로 잘못된 값이 들어오면
if(x<=0 || y<=0){
//강제로 예외객체 발생.
throw new Exception("가로,세로는 0보다 커야 한다.");
}
int z=x*y;
return z;
}
}
ex> 사용자 예외처리 클래스
package test01.exception;
class RectException extends Exception
{
public RectException(String msg)
{
super(msg);
}
}
public class Test09
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
int a=10, b=-10;
try{
// 논리적으로 잘못된값이 들어온 경우
if(a<=0 || b<=0){
//사용자가 만든 예외객체 생성해서 던지기
throw new RectException("가로,세로 길이는 0보다 크게");
}
}catch(RectException re){
System.out.println(re.getMessage());
return;
}
int area=a*b;
System.out.println("넓이:" + area);
}
}
자바 IO ( Ⅱ ) (0) | 2014.09.12 |
---|---|
자바 IO - Stream ( Ⅰ ) (0) | 2014.09.12 |
Calendar 클래스 (0) | 2014.09.12 |
자료구조 - ArrayList / 제네릭 클래스 / 확정for 문 (0) | 2014.09.12 |
자료구조 - Map (0) | 2014.09.12 |
1. Calendar 클래스
- 날짜와 시간에 대한 정보를 갖는 클래스
- 추상클래스이므로 객체를 생성할 수는 없고 자식클래스를 이용하거나 getInstance메소드를 통해 내부적으로 생성된 Calendar객체를 얻어와 사용
예)
// 내부적으로 생성된 현재시각에 대한 정보를 갖는 Calendar객체 얻어오기
Calendar cal=Calendar.getInstance();
import java.util.Calendar;
public class Test01_Calendar {
public static void main(String[] args) {
//public static Calendar getInstance()
//현재시각에 대한 정보는 갖는 날짜 객체 얻어오기
Calendar cal=Calendar.getInstance();
//2012년 2월 1일에 대한 정보로 설정
cal.set(2012,1,1);
//System.out.println(cal);
//public int get()
//현재 년도 얻어오기
int y=cal.get(Calendar.YEAR);
//월얻어오기(1월은 0값을 갖음)
int m=cal.get(Calendar.MONTH)+1;
//날짜 얻어오기
int d=cal.get(Calendar.DATE);
System.out.println(y +"년 " + m +"월 " + d +"일");
//요일에 해당하는 숫자값을 얻어옴(일요일:1 ~ 토요일:7)
int w=cal.get(Calendar.DAY_OF_WEEK);
String str="";
switch(w){
case Calendar.SUNDAY :
str="일요일";break;
case Calendar.MONDAY :
str="월요일";break;
case Calendar.TUESDAY :
str="화요일";break;
case Calendar.WEDNESDAY :
str="수요일";break;
case Calendar.THURSDAY:
str="목요일";break;
case Calendar.FRIDAY:
str="금요일";break;
case Calendar.SATURDAY:
str="토요일";break;
}
System.out.println("오늘은 " + str +"입니다.");
//현재시간을 출력해 보세요. xx시 xx분 xx초
Calendar cal1=Calendar.getInstance();
int h=cal1.get(Calendar.HOUR_OF_DAY);
int mi=cal1.get(Calendar.MINUTE);
int s=cal1.get(Calendar.SECOND);
System.out.println("현재시간:" + h+"시" + mi+"분" + s+"초");
//public int getActualMaximum(int field)
//field중에서 가장 큰값 얻어오는 메소드
int mm=cal1.getActualMaximum(Calendar.MONTH);
System.out.println("month중 가장 큰값:" + mm);
//해당월 중에 가장 큰 날짜(day)얻어오기
int day=cal1.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("이번달은 " + day +" 까지 있어요!");
}
}
2. GregorianCalendar
ex> GregorianCalendar사용하여 윤년인지 아닌지 확인
package test01.aa;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test02_GregorianCalendar
{
public static void main(String[] args)
{
//2011년 2월1일에 대한 정보를 갖는 날짜객체 생성
GregorianCalendar cal = new GregorianCalendar(2011,1,1);
int y=cal.get(Calendar.YEAR);
int m=cal.get(Calendar.MONTH) + 1;
int d=cal.get(Calendar.DATE);
System.out.println(y + "년 " + m + "월 "+ d + "일 ");
// 윤년인지 아닌지 얻어옴.(true,false)
boolean b=cal.isLeapYear(y);
if(b){
System.out.println("윤년입니다.");
}else{
System.out.println("윤년이 아닙니다.");
}
}
}
자바 IO - Stream ( Ⅰ ) (0) | 2014.09.12 |
---|---|
예외처리 ( Exception ) (0) | 2014.09.12 |
자료구조 - ArrayList / 제네릭 클래스 / 확정for 문 (0) | 2014.09.12 |
자료구조 - Map (0) | 2014.09.12 |
자료구조 - Stack / TreeSet (0) | 2014.09.12 |
1. ArrayList(Collection<? extends E> c)
- Collection<? extends E> c : E타입의 클래스이거나 E타입을 상속받은 자식클래스가 제네릭타입으로 지정됨
- Collection<? super E> c : E타입의 클래스이거나 E타입의 부모클래스가 제네릭타입으로 지정됨
ex>
package test01.util;
import java.util.ArrayList;
class AA{
private int a;
public AA(int a){
this.a=a;
}
public int getA(){
return a;
}
}
class BB extends AA{
private int b;
public BB(int a,int b){
super(a);
this.b=b;
}
public int getB(){
return b;
}
}
public class Test06_generic{
public static void main(String[] args)
{
ArrayList<BB> list1=new ArrayList<BB>();
list1.add(new BB(1,2));
list1.add(new BB(3,4));
list1.add(new BB(5,6));
//ArrayList<String> list=new ArrayList<String>();
//list.add(new AA(1));
//list1은 AA의 자식클래스들을 담고 있으므로 가능!
ArrayList<AA> list2=new ArrayList<AA>(list1);
for(int i=0;i<list2.size();i++){
AA aa=list2.get(i);
System.out.println(aa.getA());
}
}
}
2. 제네릭 클래스
- 특정 자료형에 상관없이 똑같은 알고리즘이 적용되는 클래스인 경우 제네릭 클래스로 만들수 있다.
EX>
package test01.util;
class Data<T>{
private T a;
public void setA(T a){
this.a=a;
}
public T getA(){
return a;
}
}
public class Test07_generic{
public static void main(String[] args)
{
Data<Integer> d1=new Data<Integer>();
d1.setA(10);
System.out.println(d1.getA());
Data<String> d2=new Data<String>();
d2.setA("아리랑");
System.out.println(d2.getA());
}
}
3. 확장for문
- jdk5.0버전 이상부터 지원됨
- 형식)
for(저장변수:컬렉션객체 또는 배열)
{
반복실행문장;
...
}
EX>
package test01.util;
import java.util.ArrayList;
public class Test08_for{
public static void main(String[] args)
{
int []a={10,20,30,40,50};
//배열a의 요소가 순차적으로 k에 저장됨
for(int k:a){
System.out.print(k +" ");
}
System.out.println();
ArrayList<String> list=new ArrayList<String>();
list.add("하나");
list.add("둘");
list.add("세엣");
list.add("네엣");
for(String str:list)
{
System.out.print(str + " ");
}
System.out.println();
ArrayList<Member> list1=new ArrayList<Member>();
list1.add(new Member("song","1234","song@naver.com"));
list1.add(new Member("kim","0000","kim@naver.com"));
list1.add(new Member("lee","1111","lee@naver.com"));
//확장for이용해서 list1의 데이터를 출력해 보세요.
for(Member mm:list1)
{
System.out.println("아이디:" + mm.getId());
System.out.println("비밀번호:" + mm.getPwd());
System.out.println("이메일:" + mm.getEmail());
}
}
}
예외처리 ( Exception ) (0) | 2014.09.12 |
---|---|
Calendar 클래스 (0) | 2014.09.12 |
자료구조 - Map (0) | 2014.09.12 |
자료구조 - Stack / TreeSet (0) | 2014.09.12 |
자료구조 API - Collection 프레임워크 (0) | 2014.09.12 |
3. Map(**)
- 데이터를 저장할때 key와 value가 한쌍으로 저장되는 자료구조
- key값은 중복될 수 없으며 value는 중복이 가능하다.
- 데이터 검색시 유용하다.
ex>
package test01.util;
import java.util.HashMap;
public class Test03_Map
{
public static void main(String[] args)
{
//key타입은 Integer,value타입은 String을 갖는 HashMap생성
HashMap<Integer,String> map=new HashMap<Integer,String>();
//Map에 값을 저장할때는 put메소드를 사용해 key와 value를 한쌍으로 저장한다.
//V put(K key, V value)
map.put(1,"홍길동");
map.put(2,"유관순");
map.put(3,"김유신");
//public V get(Object key)
//키값(2)에 해당하는 value(유관순)을 얻어옴
String aa=map.get(2);
System.out.println(aa);
}
}
ex> Map
package test01.util;
public class Person
{
private String name;
private String phone;
public Person(String name,String phone)
{
this.name=name;
this.phone=phone;
}
public String getName()
{
return name;
}
public String getPhone()
{
return phone;
}
}
package test01.util;
import java.util.HashMap;
import java.util.Scanner;
public class Test04_Map
{
public static void main(String[] args)
{
Person per1=new Person("홍길동","010-111-1234");
Person per2=new Person("홍길서","010-222-5678");
Person per3=new Person("홍길남","010-333-0987");
//key값은 String,value값은 Person객체를 갖는 Map객체 생성
HashMap<String,Person> map=new HashMap<String,Person>();
//이름을 key값으로 Person객체를 value값으로 Map추가
map.put(per1.getName(),per1);
map.put(per2.getName(),per2);
map.put(per3.getName(),per3);
System.out.println("찾을 이름 입력");
Scanner scan=new Scanner(System.in);
String find=scan.next();
//find를 key로 사용해서 검색하기
Person per=map.get(find);
if(per!=null){
System.out.println("이름:"+per.getName() +",전화번호:" + per.getPhone());
}else{
System.out.println("해당 정보가 존재하지 않아요!");
}
}
}
ex> Map
package test01.util;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test05_Map
{
public static void main(String[] args)
{
Map<Integer,String> map=new HashMap<Integer, String>();
map.put(1,"홍길동");
map.put(2,"홍길서");
map.put(3,"홍길남");
map.put(4,"홍길북");
//Map의 key값은 중복을 허용하지 않음
//데이터가 수정됨
map.put(4,"홀길동");
String value=map.get(4);
//key값이 4인 요소 삭제
map.remove(4);
//public Set<K> keySet()
//map.keySet(): map에 담긴 key값을 Set에 담아서 리턴
Set<Integer> st=map.keySet();
//Iterator<E> iterator()
//Set에 담긴 요소(key값들)을 꺼내오기 위한 Iterator얻어오기
Iterator<Integer> it=st.iterator();
//다음요소가 있으면 true
while(it.hasNext())
{
//다음요소(key값) 꺼내오기
Integer key=it.next();
//key에 대응되는 Value 꺼내오기
String val=map.get(key);
System.out.println(val);
}
}
}
Calendar 클래스 (0) | 2014.09.12 |
---|---|
자료구조 - ArrayList / 제네릭 클래스 / 확정for 문 (0) | 2014.09.12 |
자료구조 - Stack / TreeSet (0) | 2014.09.12 |
자료구조 API - Collection 프레임워크 (0) | 2014.09.12 |
자료구조 API - 제네릭(Generic) (0) | 2014.09.12 |