2016년 6월 16일 목요일

08day java

에러

  • 컴파일 에러
    • 컴파일 할때 에러 검출
    • 오타
  • 런타임 에러
    • 실행시 에러 검출 (컴파일시 에러 없음)
    • Exception
    • 강제로 프로그램이 종료됨
      →Exception 처리
API
  • java.util
    • 컬렉션
      집합데이터형 (배열)을 확장한 집합데이터형
      • 순서(index)가 있는 컬렉션
        • ArrayList / Vector
          • 크기가 신축성있게 늘어난다
      • 순서가 없는 컬렉션
        • HashMap / HashTable
        • HashSet : 중복데이터 배제
        • ...
    • Date / Calendar
      • 문자열 데이터 다음으로 많이쓰는 것이 날짜 데이터
    • Random
    • Scanner

1
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(); 
    }

}


댓글 없음:

댓글 쓰기