Exception

try {
	int num=3/0; //정수를 0으로 나누면 애러발생
}
catch(ArithmeticException e) { 			
	System.out.println(e.getMessage()); //예외처리 메세지
	//e.printStackTrace(); //자세한 예외정보출력
}
  • try {에러 발생 가능 코드} catch {에러 해결, 처리} finally {예외 발생 무관하게 수행할 코드}
  • ArithmeticException : 산수적 예외 처리
  • NullPointerException : 생성하지 않고 클래스의 메서드를 호출하는 예외 처리
  • IOException : input, output 관련 예외 처리

반드시 Exception 처리되는 methods

#1 InputStream

InputStream is=System.in;
		
		int a=0;
		System.out.println("한글자 입력:");

	try {
		a=is.read();
	} catch (IOException e) { 
		e.printStackTrace();
	}
  • byte 기반 입력(한 글자만 가능)

#2 Thread

	System.out.println("3초뒤출력"); //출력 지연
		
	try {
		Thread.sleep(3000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
		
	System.out.println("입력값: "+(char)a);
  • 위의 #1과 이어지는 코드

파일 가져오기(#3 FileReader & BufferedReader)

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
  • 아래의 작업을 수행하기 위해 import
public class FileException_04 {

	public static void read() {
		String fileName="D:\\sist0615\\file\\Monday.txt"; //경로에서 /과\\ 같은 기호로 인식
		BufferedReader br=null;  //메서드에서는 반드시 초기값 설정
		FileReader fr=null;
  • BufferedReader(가져온 파일을 한 줄씩 읽음)와 FileReader(파일을 경로를 통해 가져옴) 생성
	try {
			fr=new FileReader(fileName);			
			br=new BufferedReader(fr);
			
			//여러줄 읽어야 하므로 while
			while(true)
			{
				//메모장에서 내용을 한줄씩 읽어온다(readLine메서드는 String 자료형 출력)
				String s=br.readLine(); //숫자 자료형 출력하려면 형변환 필요
				
				//마지막 줄일경우 null값을 읽어서,null값일경우 빠져나가기
				if(s==null)
					break;
				
				System.out.println(s);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {   //catch는 중복 가능
			                          //try문 내에서 예외처리 시 catch 중복 사용을 지향
		} finally {
			//자원은 항상 반대로 반납
			try {
				br.close();
				fr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
  • 예외 처리는 즉각 해주어야 함(그렇지 않으면 복잡해짐)
public static void main(String[] args) {
		read();
	}
}

Split & Tokenizer

import java.util.StringTokenizer;

public class StringToken_07 {

	public static void main(String[] args) {
		// 문자열을 특정문자로 분리하는 방법들
		
		String str="red,magenta,gray,pink,yellow";
		
	//String객체의 split을 이용한 분리
		String [] arrColors=str.split(",");
		System.out.println("총 "+arrColors.length);
		
		for(int i=0;i<arrColors.length;i++)
			System.out.println(i+":"+arrColors[i]);
			
	//StringTokenizer객체의 split을 이용한 분리
		StringTokenizer st=new StringTokenizer(str, ",");
		System.out.println("총 토큰수: "+st.countTokens());
		
		while(st.hasMoreTokens()) //다음토큰이있으면 true,없으면 false
		{
			System.out.println(st.nextToken());//다음토큰 얻기
		}
	}
}
  • Split은 문자열을 분리해서 배열로 만듦
  • Tokenizer는 문자열을 분리해서 각각의 문자열로 만듦(호출 위해서는 (참조변수).nextToken() 사용)
  • (참조변수).nextToken()은 각 문자열 구분 불가(순서대로 호출할 뿐, 이를 변수화 가능)
  • while((참조변수).hasMoreToken())을 통해 출력 가능

Collection & Generics

  • Set : 데이터의 중복 허용 X, 순서 유지 X
  • List : 데이터의 중복 허용 O, 순서 유지 O
  • Map : Key값을 알면 Value값을 구하기 가능

Set

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class ExHashSet_10 {

	public static void main(String[] args) {

		Set<String> set1=new HashSet<String>();
		//Set에 String데이터를 담겠다-Set은 인터페이스 이므로 객체생성이 안된다
  • Set은 인터페이스, HashSet은 클래스(다형성과 유사)
  • (인터페이스 or 클래스)<데이터형> 객체이름=new 클래스명<데이터형>;
//추가..배열에 비해 가변적
		set1.add("사과");
		set1.add("포도");
		set1.add("키위");
		set1.add("오렌지");
		set1.add("바나나");
		set1.add("사과"); //중복되었으므로 갯수 포함 안됨
		
		System.out.println(set1.size()); //데이터 개수 : 5
																		 //컬렉션에서는 length 대신 size로 크기 출력
//출력 #1_for~each

		for(String s:set1)
			System.out.println(s);
		
//출력 #2_Iterator
		
		Iterator<String> iter=set1.iterator();
		while(iter.hasNext())
		{
			System.out.println(iter.next());
		}
		
//출력 #3_for
		
		Object [] ob=set1.toArray();
		for(int i=0;i<ob.length;i++)
		{
			String s=(String)ob[i];
			System.out.println(s);
		}
  • (참조변수).toArray();는 (참조변수) 내의 자료를 배열로 만듦(리턴 값의 클래스가 Object)
//모든데이터 삭제

		set1.clear();
		
		if(set1.isEmpty())
			System.out.println("Set타입안에 데이터가 없다");
		else
			System.out.println("Set타입안에 데이터가 있다");
	}
}
  • (참조변수).isEmpty : (참조변수) 컬렉션의 값이 존재하지 않으면 true, 존재하면 false

List

  • List 인터페이스를 구현한 클래스로는 Vector와 ArrayList가 있다
  • 처음 생성 시 일정한 개수로 생성되고 그 이상의 데이터를 넣으면 공간이 자동 증가(10+a)
import java.util.List;
import java.util.Vector;

public class List_12 {

	public static void main(String[] args) {

		//List<String> list=new Vector<String>();
		Vector<String> list=new Vector<String>();
		
		System.out.println("초기할당크기: "+list.capacity()); //초기 할당 크기 : 10
		System.out.println("초기 데이터 크기: "+list.size()); //초기 데이터 크기 : 0
		list.add("사과");
		list.add("포도");
		list.add("사과"); //중복가능
		list.add("키위");
		list.add("바나나");
		list.add("오렌지");
		
		System.out.println("초기할당크기: "+list.capacity());  //초기 할당 크기 : 10
		System.out.println("초기 데이터 크기: "+list.size());  //초기 데이터 크기 : 6
//출력 #1
		
		for(int i=0;i<list.size();i++)
		{	
			String s=list.get(i);
			System.out.println(s);
		}
		
//출력 #2
		
		for(String s:list)
			System.out.println(s);
		
//출력 #3
		
		Object [] ob=list.toArray();
		for(int i=0;i<ob.length;i++)
		{	
			String s=(String)ob[i];
			System.out.println(s);
		}
	}
}

List의 method 연습

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

public class ArrayList_13 {

	public static void write(String title,List<String> list) {
		System.out.println(title);
		
		for(int i=0;i<list.size();i++)
			System.out.println(i+":"+list.get(i));
	}
	
	public static void main(String[] args) {

		String [] data= {"영준","순영","연주","진평"};
  • (참조변수).get( i )를 통해 컬렉션 내의 index 값 추출
//배열의 데이터를 list에 넣기
		List<String> list=new ArrayList<String>();
		
		for(String d:data)
			list.add(d);

		write("초기에 배열데이터 add후 출력",list);
//1번 인덱스 삭제하기
		list.remove(1);
		write("1번 삭제후 결과",list);

//현규 추가하기
		list.add("현규");
		write("현규추가후 출력",list);

//값 변경
		list.set(0, "영환");
		write("0번인덱스 변경후 출력",list);

//전체 삭제
		list.clear();
		System.out.println("사이즈: "+list.size());
	}
}

Map

  • Key는 중복 허용 X , Value는 중복을 허용 O
  • Key 와 Value 쌍으로 저장
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Map_14 {

	public static void main(String[] args) {

		Map<String, String> map=new HashMap<String, String>();
		map.put("name", "손석구");
		map.put("age", "23");
		map.put("addr", "제주시 애월읍");
		
		//같은 Key 값으로 넣으면 먼저 데이터는 없어짐
		map.put("name", "제니");
		System.out.println("size: "+map.size()); // 3

//키값을 정확하게 알면 value값 얻을수있다
		
		System.out.println("이름: "+map.get("name")); //이름: 제니
		System.out.println("나이: "+map.get("age")); //나이: 23
		System.out.println("주소: "+map.get("addr")); //주소: 제주시 애월읍
//키값을 먼저 한꺼번에 얻은후 값을 얻는방법
		
		Set<String> keySet=map.keySet();
		
	//방법 #1

		Iterator<String> keyIter=keySet.iterator();

		while(keyIter.hasNext())
		{
			String key=keyIter.next();
			System.out.println(key+"==>"+map.get(key));
		}
		
	//방법 #2

			for(String key:keySet)
				System.out.println(key+"==>"+map.get(key));
	}
}
profile
초보개발자

0개의 댓글