'JAVA 기초'에 해당되는 글 17건
- 2013.05.17 for문 - 별찍기
- 2012.08.12 15일차 : 스레드의 동기화
- 2012.08.12 14일차 : 스레드(Thread)
- 2012.08.12 13일차 : IO, File클래스, 내부클래스, 객체의 직렬화, 재귀메소드
- 2012.08.12 12일차 : IO, 입출력
- 2012.08.12 11일차 : 예외처리, IO(InputStream,OutputStream), 패키지 만들기
- 2012.08.12 10일차 : 확장for문, 제네릭, Calendar 클래스, map, 자바의 컬렉션 프레임워크
- 2012.08.11 9일차 : ArrayList, Character, String클래스, String Builder, Wrapper 클래스
- 2012.08.11 8일차 : 추상클래스, 인터페이스, Object클래스
- 2012.08.11 7일차 : 오버로딩, 오버라이딩, 상속
for문 - 별찍기
class Ex01 { public static void main(String[] args) { System.out.println("별찍기"); for(int i=1; i<=5; i++){ for(int j=1; j<=i; j++){ System.out.print("*"); } System.out.println(" "); } } } 결과 * ** *** **** *****
========================================================================================
[ 거꾸로 찍기 ]
class Ex01 { public static void main(String[] args) { System.out.println("별찍기"); for(int i=5; i>=1; i--){ for(int j=1; j<=i; j++){ System.out.print("*"); } System.out.println(); } } } 결과 ***** **** *** ** * ========================================================================================[ 정사각형 ]
class Ex01 { public static void main(String[] args) { System.out.println("별찍기"); for(int i=0; i<=10; i++){ for(int j=i; j<=10; j++){ System.out.print(" "); } for(int k=0; k<i; k++){ System.out.print(" "+"*"); } System.out.println(); } } } 결과 *
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
========================================================================================
[ 다이아몬드 ] class Ex01 { public static void main(String[] args) { System.out.println("별찍기"); for(int i=0; i<=10; i++){ for(int j=i; j<=10; j++){ System.out.print(" "); } for(int k=0; k<i; k++){ System.out.print(" "+"*"); } System.out.println(); } for(int i=10; i>=0; i--){ for(int j=i; j<=10; j++){ System.out.print(" "); } for(int k=0; k<i; k++){ System.out.print(" "+"*"); } System.out.println(); } } } 결과 *
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
* * *
* *
*
'JAVA 기초' 카테고리의 다른 글
15일차 : 스레드의 동기화 (0) | 2012.08.12 |
---|---|
14일차 : 스레드(Thread) (0) | 2012.08.12 |
13일차 : IO, File클래스, 내부클래스, 객체의 직렬화, 재귀메소드 (0) | 2012.08.12 |
12일차 : IO, 입출력 (0) | 2012.08.12 |
11일차 : 예외처리, IO(InputStream,OutputStream), 패키지 만들기 (0) | 2012.08.12 |
15일차 : 스레드의 동기화
--------------------------------------- package test01.thread; ----------------------------------------------------------
임시 저장소에 데이터를 저장하는 스레드
package test01.thread; // 임시 저장소에 데이터를 저장하는 스레드 class TempThread extends Thread{ //Message msg=new Message();==>두 개의 자원을 사용하겠다고 여기에 이렇게주면 안된다. private Message msg; //main 메소드에서 생성된 객체를 참조해 온다. public TempThread(Message msg){ this.msg=msg; } public void run(){ char[] data={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'}; //다운로드 할 데이터. 이것을 msg.set~로 옮겨야 함. for(int i=0; i<data.length; i++){ //다운로드 할 데이터를 임시 저장소에 저장하기 msg.setMsg(String.valueOf(data[i])); //setMsg는 파라미터 값을 돌면서 계속 연결해주는 역할 //for(int j=0; j<=1000; j++); //시간 지연하기 } System.out.println("임시저장공간에 다운로드 완료"); } } // 임시 저장소의 데이터를 파일로 저장하는 스레드 class WriteThread extends Thread{ private Message msg; //main 메소드에서 생성된 객체를 참조해 온다. public WriteThread(Message msg){ this.msg=msg; } public void run(){ System.out.println("파일로 저장 시작!"); System.out.println(msg.getMsg()); System.out.println("파일에 저장 완료!"); } } public class MainTest { public static void main(String[] args) { Message msg=new Message();//스레드간에 공유자원이 될 객체 TempThread thread1=new TempThread(msg); WriteThread thread2=new WriteThread(msg);//msg 객체를 파일로 저장 thread1.start(); thread2.start(); } }
입금 기능을 갖는 스레드
package test01.thread; //동기화 class InputThread extends Thread{//입금 기능을 갖는 스레드 private Bank bank; public InputThread(Bank bank){ this.bank=bank; } public void run(){ synchronized (bank) { //싱크로나이즈드. (bank) =공유자원 동기화 처리하기(lock 이 걸림) System.out.println("입금 처리중"); bank.input(1000); //공유자원 for(int i=1; i<=100000000; i++);//;을 안찍어주면 계속 루프를 돌기 때문에 찍어준다. 시간지연(입금 처리중이라고 가정하자.) System.out.println("입금 완료!"); System.out.println("입금 후 잔액: " + bank.getMoney()); } } } class OutputThread extends Thread{ private Bank bank; public OutputThread(Bank bank){ this.bank=bank; } public void run(){ synchronized (bank){//동기화 처리하기(lock 이 걸림) System.out.println("출금 처리중"); bank.output(2000); for(int i=1; i<=100000000; i++);//시간지연(입금 처리중이라고 가정하자.) System.out.println("출금 완료!"); System.out.println("출금 후 잔액: "+bank.getMoney()); } } } public class MainTest01 { public static void main(String[] args) { Bank bank=new Bank(5000); new OutputThread(bank).start(); new OutputThread(bank).start(); new OutputThread(bank).start(); new InputThread(bank).start(); new OutputThread(bank).start(); new OutputThread(bank).start(); } }
공유 자원이 될 객체
package test01.thread; //공유 자원의 될 객체 public class Bank { private double money;//잔액 public Bank(double money){ this.money=money; } public void input(double m){//입금기능 money+=m; } public void output(double m){//출금기능 if(money<m){ //입금 된 돈이 적으면 System.out.println("잔액부족"); return;//메소드 끝내기 } money-=m; } public double getMoney(){ return money; } }
스레드간의 객체 공유하기
package test01.thread; // 스레드 간의 객체 공유하기 //공유 될 클래스 public class Message { private String msg=""; public void setMsg(String msg){ this.msg+=msg; } public String getMsg(){return msg;} }
--------------------------------------- package test02.thread; ----------------------------------------------------------
Test02 InputThread
package test02.thread; class InputThread extends Thread{ private Bank bank; public InputThread(Bank bank){ this.bank=bank; } public void run(){ //bank 객체 자체에서 동기화 처리가 되어있으므로 사용하는 곳에서는 동기화 처리를 하지 않는다. bank.input(1000); } } class OutputThread extends Thread{ private Bank bank; public OutputThread(Bank bank){ this.bank=bank; } public void run(){ bank.output(2000); } } public class MainTest { public static void main(String[] args) { Bank bank=new Bank(5000); new OutputThread(bank).start(); new OutputThread(bank).start(); new InputThread(bank).start(); new OutputThread(bank).start(); } }
Test02 공유자원이 될 객체
package test02.thread; //공유 자원의 될 객체 public class Bank { private double money;//잔액 public Bank(double money){ this.money=money; } public synchronized void input(double m){ //동기화 메소드 System.out.println("입금 처리중"); for(int i=1; i<=100000000; i++); money+=m; System.out.println("입금 처리 완료"); System.out.println("입금 후 잔액: " +money); } public synchronized void output(double m){ //동기화 메소드 System.out.println("출금 처리중"); for(int i=1; i<=100000000; i++); if(money<m){ //입금 된 돈이 적으면 System.out.println("잔액부족"); return;//메소드 끝내기 } money-=m; System.out.println("입금 처리 완료"); System.out.println("입금 후 잔액: " +money); } public double getMoney(){ return money; } }
--------------------------------------- package test03.thread; ----------------------------------------------------------
Test03 임시 저장 공간에 다운로드 및 파일저장
package test03.thread; class TempThread extends Thread{//템프스레드는 Message msg 객체를 가지고 있지 private Message msg; public TempThread(Message msg){ this.msg=msg; } public void run(){ synchronized (msg) { //동기화 System.out.println("임시 저장 공간에 다운로드 시작"); char[] data={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};//다운로드 할 데이터. 이것을 msg.set~로 옮겨야 함. for(int i=0; i<data.length; i++){ //다운로드 할 데이터를 임시 저장소에 저장하기 msg.setMsg(String.valueOf(data[i]));//setMsg는 파라미터 값을 돌면서 계속 연결해주는 역할 for(int j=0; j<=1000; j++);//시간 지연하기 } System.out.println("임시저장공간에 다운로드 완료"); msg.notify();//wait 하고 있는 객체를 깨운다. msg.setStatus(true); //참이면 32행이 false 로 실행하지 않고 파일 저장 시작~ 뜸 } } } // 임시 저장소의 데이터를 파일로 저장하는 스레드 class WriteThread extends Thread{ private Message msg; //main 메소드에서 생성된 객체를 참조해 온다. public WriteThread(Message msg){ this.msg=msg; } public void run(){ synchronized(msg) { if(msg.isStatus()==false){//생산자 스레드가 아직 notify 하지 않는 경우 ==> wait 가 수행되어야 함 try{ msg.wait();//다른 스레드에서 notify 메소드로 깨울 때까지 wait 상태가 됨. synchronized 블록 안에서만 사용 가능! }catch(InterruptedException ie){ System.out.println(ie.getMessage()); } } System.out.println("파일로 저장 시작!"); System.out.println(msg.getMsg()); System.out.println("파일에 저장 완료!"); } } } public class MainTest { public static void main(String[] args) { Message msg=new Message(); //스레드간에 공유자원이 될 객체 TempThread thread1=new TempThread(msg); WriteThread thread2=new WriteThread(msg);//msg 객체를 파일로 저장 thread1.start(); thread2.start(); } }
Test03 스레드 간의 객체 공유하기
package test03.thread; // 스레드 간의 객체 공유하기 // 공유될 클래스 public class Message { private String msg=""; private boolean status=false; public void setStatus(boolean status){ this.status = status; } public boolean isStatus(){ return status; } public void setMsg(String msg){ //setMsg : setter 메소드 라고 부름 this.msg+=msg; } public String getMsg(){ //getMsg : getter 메소드라고 부름 return msg; } }
--------------------------------------- package test04.thread; ----------------------------------------------------------
Test04 ThreadJoin
package test04.thread; import java.util.Random; class MyThread1 extends Thread{ public void run(){ Random rnd=new Random(); for(int i=1;i<=100;i++){ int n=rnd.nextInt(100); System.out.print("발생된난수:"+n); if(i%10==0) System.out.println(); } System.out.println("자식스레드 종료"); } } public class ThreadJoin { public static void main(String[] args) { MyThread1 thread=new MyThread1(); thread.start(); try{ thread.join(); //부모 스레드가 자식 스레드가 종료 될 때까지 기다림 }catch(InterruptedException ie){ System.out.println(ie.getMessage()); } System.out.println("메인스레드종료"); } }
Test04 hreadStop
package test04.thread; import java.util.Random; class MyThread extends Thread{ private boolean status=false; public void run(){ Random rnd=new Random(); status=true; while(status){ int n=rnd.nextInt(100); System.out.println("발생된난수:"+n); } } public void stopMyThread(){ status=false; } } public class ThreadStop { public static void main(String[] args) { MyThread th=new MyThread(); th.start();//스레드 실행하기 try{ Thread.sleep(3000); }catch(InterruptedException ie){} th.stopMyThread();//스레드 종료하기 } } // 메인 스레드에서 th.stopMyThread(); 호출
'JAVA 기초' 카테고리의 다른 글
for문 - 별찍기 (0) | 2013.05.17 |
---|---|
14일차 : 스레드(Thread) (0) | 2012.08.12 |
13일차 : IO, File클래스, 내부클래스, 객체의 직렬화, 재귀메소드 (0) | 2012.08.12 |
12일차 : IO, 입출력 (0) | 2012.08.12 |
11일차 : 예외처리, IO(InputStream,OutputStream), 패키지 만들기 (0) | 2012.08.12 |
14일차 : 스레드(Thread)
package test03.thread; /* * << 스레드(Thread) >> * - 경량의 프로세스 (프로그램의 흐름) : 하나의 프로그램에서 어떠한 작업을 작은 프로세스로 따로 실행시키는것 * - 사용이유 * 1) 어떠한 작업이 동시에 이루어져야 할때 * 예:게임에서 이미지가 이동될때,여러 파일을 동시에 다운로드받을때...등 * 2) 어떠한 작업이 시간이 지연되는 작업일때 * 예:파일복사,프린터로 출력하기,... * - 만드는 방법 * 방법1) * Thread클래스를 상속받고 run메소드를 오버라이딩해서 스레드로 구현되어야 할 작업을 구현한다. * 실행할때는 start메소드를 사용한다. * 방법2) * Runnable인터페이스를 상속받아 구현하기 * */ //스레드만드는 방법1 ////////// 1. 스레드클래스 상속받기 //////////// class FileCopy extends Thread{ ////////// 2. run메소드 오버라이딩 ///////// public void run(){ for(int i=1;i<=10000;i++){ System.out.print("파일복사중.."); if(i%100==0) System.out.println(); } } } class FilePrint extends Thread{ public void run(){ for(int i=1;i<=1000000;i++){ System.out.print("프린터로 인쇄중"); if(i%100==0) System.out.println(); } } } public class ThreadTest01 { public static void main(String[] args) { /////////// 3.스레드생성하고 start메소드로 스레드 실행하기 /////////// FileCopy fc=new FileCopy();//스레드객체 생성 fc.start();//스레드 실행(반드시 start메소드로 스레드를 실행시켜야 함==>스레드로 구동되기위한 환경을 만들고 //내부적으로 run메소드를 호출해준다.) FilePrint fp=new FilePrint(); fp.start(); } }
스레드(Thread)만드는 방법 02
package test03.thread; //스레드만드는 방법2 //1.Runnable인터페이스 상속받아 run메소드 오버라이딩하기 class MyThread01 implements Runnable{ public void run(){ for(int i=1;i<=100;i++){ System.out.println("...파일복사중"); if(i%10==0) System.out.println(); try{ Thread.sleep(1000);//스레드를 1초간 지연 }catch(InterruptedException ie){ System.out.println(ie.getMessage()); } } } } public class ThreadTest02 { public static void main(String[] args) { //2.Runnable자식객체생성 MyThread01 tt=new MyThread01(); //3.Thread객체생성하고 Runnable객체 인자로 보내기 Thread th=new Thread(tt); //4.스레드를 start메소드로 실행하기 th.start(); //new Thread(tt).start(); for(int i=1;i<=100;i++){ System.out.println("...프린터인쇄중"); if(i%10==0) System.out.println(); try{ Thread.sleep(1000);//스레드 1초간 지연하기 }catch(InterruptedException ie){ System.out.println(ie.getMessage()); } } } }
스레드(Thread) - 파일을 복사하고 디렉토리 크기 구하기
package test03.thread;
import java.io.*;
import java.util.Scanner;
public class ThreadTest03 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
while(true){
System.out.println("어떤 작업을 할까요? 1. 파일복사 2. 디렉토리 크기 구하기 3. 종료");
int n=scan.nextInt();
switch(n){
case 1:filecopy(); break;
case 2:dirSize(); break;
case 3:System.exit(0);
default:System.out.println("잘못입력");
}
}
}
private static void filecopy() {
File f1=new File("c:\\java\\navi.jpg"); //원본파일
File f2=new File("c:\\java\\navi_copy.jpg"); //복사본 파일
try{
FileInputStream fin=new FileInputStream(f1); //파일을 읽어오기 위한 스트림
FileOutputStream fos=new FileOutputStream(f2); //파일을 출력하기 위한 스트림
//파일 복사하기
int n=0;
byte[] b=new byte[1000];
while((n=fin.read(b))!=-1){ //원본 파일에서 데이터 읽어와 b 배열에 저장
fos.write(b,0,n); //b 배열을 복사본 파일에 저장(출력)
}
//스트림 닫기
fos.close();
fin.close();
System.out.println("[[[[[[[[[[[[[[[[[[[[[[[[ 복사 완료 ]]]]]]]]]]]]]]]]]]]]]]]]");
}catch(FileNotFoundException fe){
System.out.println(fe.getMessage());
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
public static void dirSize(){
File f1=new File("c:\\java\\");
long size=getSize(f1);
System.out.println("디렉토리 크기:" + size + "bytes");
}
public static long getSize(File f1){
long len=0;
File[] list=f1.listFiles();
for(int i=0; i<list.length; i++){
if(list[i].isFile()){
len+=list[i].length();
}else{
len+=getSize(list[i]);
}
}
return len;
}
}
*코드가 너무 길어서 짤렸음...위와 같이 이어줄 것!*
스레드(Thread) - 실행중인 스레드 우선순위 설정
package test03.thread; class MyThread extends Thread{ public MyThread(String name){ super(name); } public void run(){ for(int i=0; i<=50; i++){ System.out.println("실행중인 스레드: "+getName()); } } } public class ThreadTest05 { public static void main(String[] args) { MyThread th1=new MyThread("1번 스레드"); MyThread th2=new MyThread("2번 스레드"); MyThread th3=new MyThread("3번 스레드"); th3.setPriority(Thread.MAX_PRIORITY); //우선순위를 가장 높게 설정 th2.setPriority(Thread.NORM_PRIORITY); //우선 순위를 중간으로 설정 th1.setPriority(Thread.MIN_PRIORITY); //우선 순위를 가장 낮게 설정 th1.start(); th2.start(); th3.start(); } }
Quiz01
package test03.thread; import java.util.Calendar; import java.util.Random; /* * 1초에 한 번씩 현재시각을 출력하는 스레드(Thread 상속)와 * 1초에 한 번씩 난수를 얻어와 출력하는 스레드(Runnable 상속)를 만들고 실행시켜 보세요. */ class TimeThread extends Thread{ public void run() { while(true){ Calendar cal=Calendar.getInstance(); String str=cal.get(Calendar.HOUR_OF_DAY)+"시" +cal.get(Calendar.MINUTE) +"분" + cal.get(Calendar.SECOND) +"초"; System.out.println(str); try{ Thread.sleep(1000); }catch(InterruptedException ie){ System.out.println(ie.getMessage()); } } } } class RndThread implements Runnable{ public void run(){ Random rnd=new Random(); while(true){ int n=rnd.nextInt(100)+1; //1~100까지 수 중 임의의 난수 얻어오기 System.out.println("발생한 난수: "+n); try{ Thread.sleep(1000); }catch(InterruptedException ie){ System.out.println(ie.getMessage()); } } } } public class Quiz01 { public static void main(String[] args) { //TimeThread thread1=new TimeThread(); //thread1.start(); new TimeThread().start(); new Thread(new RndThread()).start(); } }
[ 과 제 ]
'JAVA 기초' 카테고리의 다른 글
for문 - 별찍기 (0) | 2013.05.17 |
---|---|
15일차 : 스레드의 동기화 (0) | 2012.08.12 |
13일차 : IO, File클래스, 내부클래스, 객체의 직렬화, 재귀메소드 (0) | 2012.08.12 |
12일차 : IO, 입출력 (0) | 2012.08.12 |
11일차 : 예외처리, IO(InputStream,OutputStream), 패키지 만들기 (0) | 2012.08.12 |
13일차 : IO, File클래스, 내부클래스, 객체의 직렬화, 재귀메소드
File클래스 - 디렉토리 확인 및 디렉토리 삭제, 생성
/* << File클래스★ >> - 파일 또는 디렉토리에 관련된 정보를 갖는 클래스 */ import java.io.*; class File01{ public static void main(String[] args) { File f=new File("c:\\JAVA\\12일차\\navi.jpg"); //public boolean exists() if(f.exists()){ System.out.println("디렉토리가 존재합니다."); System.out.println("파일의 크기: "+f.length() + "bytes"); //해당 파일의 크기 }else{ System.out.println("해당 디렉토리가 존재하지 않습니다."); } File f1=new File("c:\\JAVA\\test"); if(f1.exists()){ f1.delete();//디렉토리 또는 파일 삭제하기(디렉토리 안에 파일이 있으면 디렉토리를 지울 수 없으며 그 안의 내용을 지워줘야 삭제가능) System.out.println("해당 디렉토리를 삭제했습니다."); }else{ System.out.println("해당 디렉토리가 존재하지 않습니다."); f1.mkdir();//디렉토리 생성하기 System.out.println("해당 디렉토리를 생성했습니다."); } } }
File클래스 - 디렉토리 안의 목록(디렉토리명 또는 파일명)이름을 배열로 얻어오기
import java.io.*; class File02 { public static void main(String[] args) { File f=new File("c:\\JAVA"); //public string[] list() //디렉토리 안의 목록(디렉토리명 또는 파일명)이름을 배열로 얻어오기 String[] list=f.list(); for(int i=0; i<list.length; i++){ System.out.println(list[i]); } System.out.println("======================================="); //public File[] listFiles() //디렉토리 안의 정보를 File객체 배열로 얻어옴 File[] flist=f.listFiles(); for(int i=0; i<flist.length; i++){ if(flist[i].isDirectory()){ System.out.println("디렉토리: "+flist[i]); }else if(flist[i].isFile()){ System.out.println("파일: "+flist[i] + "파일 크기: "+flist[i].length() + "bytes"); } } } }
File클래스 - 파일 절대 경로 및 이름 불러오기
import java.io.*; class File03 { public static void main(String[] args) { File f=new File("c:\\aa\\bb"); if(f.exists()){ System.out.println("디렉토리가 존재해요."); }else{ f.mkdirs(); //자식 디렉토리까지 생성 System.out.println("디렉토리 생성"); } File f1=new File("File01.java"); //public string getAbsolutePath() ==> 파일의 절대 경로 얻어오기 String path=f1.getAbsolutePath(); System.out.println("파일의 절대 경로: "+path); String name=f1.getName(); //getName : 파일 이름 불러오기 System.out.println("파일명: "+name); } }
내부클래스 - 인스턴스 내부 클래스class Rect{ private int x, y; private String color; public Rect(int x, int y, String color){ this.x=x; this.y=y; this.color=color; } public void print(){ Printer prn=new Printer(); prn.printRect(); } //인스턴스 내부 클래스 class Printer{ public void printRect(){ //Outer클래스(Rect)의 비공개 멤버 변수에 접근 가능하다. System.out.println(x+"," +y+"의 위치에 "+color+"색상으로 사각형 출력하기"); } } } class InnerClass01{ public static void main(String[] args) { Rect rr=new Rect(100, 200, "red"); rr.print(); } }
내부 클래스 - 익명의 내부 클래스
//익명의 내부 클래스 interface Shape{ void draw(); } class InnerClass02{ public static void main(String[] args) { /*class MyRect implements Shape{//MyRect가 딱 한번만 호출하기 위한 목적으로 만들어진다. 1회용! public void draw(){ System.out.println("사각형 그리기"); } } MyRect rr=new MyRect(); rr.draw(); */ //위의 작업을 익명의 내부클래스로 만들면(일회성 클래스인 경우에) /*Shape rect=new Shape(){ //new할 수 없지만 다시 블럭을 지정, 추상메소드 작성 public void draw(){ System.out.println("사각형 그리기"); } }; rect.draw(); } }*/ new Shape(){ public void draw(){ System.out.println("사각형 그리기"); } }.draw(); } }
객체의 직렬화
//MyPerson.java import java.io.Serializable; /* << 객체의 직렬화 >> - 객체를 바이트 단위로 일렬로 나열하는 것 - 직렬화가 가능하도록 하려면 Sserializable인터페이스를 상속받는다. - 멤버가 transient인 경우, static인 경우는 직렬화가 되지 않는다. #역직렬화 - 바이트 단위로 나열된 데이터를 다시 조합해 객체로 만드는 것 */ //직렬화가 가능한 클래스 만들기 public class MyPerson implements Serializable{ private String name; //이름 private transient String jumin; //주민번호--> 직렬화가 되지 않는 멤버 transient: 멤버 앞에 주면 직렬화 되지 않도록 하는 것 private String phone; //전화번호 public MyPerson(String name, String jumin, String phone){ this.name=name; this.jumin=jumin; this.phone=phone; } public String getName(){return name;} public String getJumin(){return jumin;} public String getPhone(){return phone;} }
ObjectOutputStream01 - 객체를 파일로 저장하기 위한 스트림 객체 생성
import java.io.*; import java.util.Date; /* ObjectOutputStream ==> 객체를 출력하기 위한 스트림 ObjectInputStream ==> 객체를 읽어오기 위한 스트림 */ class ObjectOutputStream01 { public static void main(String[] args) { //public ObjectOutputStream(OutputStream out) throws IOException //객체를 파일로 저장하기 위한 스트림 객체 생성 try{ //객체를 파일로 저장하기 위한 스트림 객체 생성 ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("test.ser")); //public final void writeObject(Object obj) throws IOException //객체를 파일로 저장하기 oos.writeObject(new String("안녕")); oos.writeObject(new Date()); oos.writeObject(new Integer(100)); oos.close(); System.out.println("파일로 저장 성공!"); }catch(IOException ie){ System.out.println(ie.getMessage()); } } }
ObjectInputStream02 - 파일에 저장된 순서로 객체 읽어오기
import java.util.Date; import java.io.*; class ObjectInputStream02 { public static void main(String[] args) { try{ //객체를 파일에서 읽어오기 위한 스트림 객체 ObjectInputStream ois=new ObjectInputStream(new FileInputStream("test.ser")); //public final Object readObject() throws IOException, ClassNotFoundException //파일에 저장된 순서로 객체 읽어오기 String str=(String)ois.readObject(); Date d=(Date)ois.readObject(); Integer i=(Integer)ois.readObject(); System.out.println("파일에 저장된 객체"); //파일에서 읽어오노 객체를 화면에 출력 System.out.println(str); System.out.println(d); System.out.println(i); ois.close(); //스트림 닫기 }catch(IOException ie){ System.out.println(ie.getMessage()); }catch(ClassNotFoundException ce){ System.out.println(ce.getMessage()); } } } /* 파일에 저장된 객체 안녕 Wed Aug 01 10:17:07 KST 2012 100 */
ObjectOutputStream03 - 객체를 파일로 저장하고 예외발생처리
import java.io.*; class ObjectOutputStream03 { public static void main(String[] args) { try{ ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("person.ser")); out.writeObject(new MyPerson("홍길동", "8012122223456", "010-111-1234")); out.close(); System.out.println("객체를 파일로 저장 성공!"); }catch(IOException ie){ System.out.println("예외발생:"+ie.getMessage()); } } }
ObjectInputStream04 - person.per에 저장된 객체를 읽어와 화면에 출력
import java.io.*; class ObjectInputStream04 { public static void main(String[] args) { //person.per에 저장된 객체를 읽어와 화면에 출력해 보세요. try{ ObjectInputStream ois=new ObjectInputStream(new FileInputStream("Person.ser")); //파일에서 객체 읽어오기 MyPerson per=(MyPerson)ois.readObject(); //리턴타입이 오브젝트니까 형변환 꼭 해서 메소드 통해 얻어옴. System.out.println("Person에 있는 내용 출력하기"); System.out.println("이름: "+per.getName()); System.out.println("주민번호: "+per.getJumin()); System.out.println("전화번호: "+per.getPhone()); ois.close(); //스트림 닫기 }catch(IOException ie){ System.out.println(ie.getMessage()); }catch(ClassNotFoundException ce){ System.out.println(ce.getMessage()); } } } /* [결과] Person에 있는 내용 출력하기 이름: 홍길동 주민번호: null 전화번호: 010-111-1234 */
재귀 메소드 - 팩토리얼 구하기
//재귀메소드 - 자기 자신을 호출하는 메소드 class Test07_재귀메소드{ public static void main(String[] args) { int n=4; int num=factorial(n); System.out.println(n+"!="+num); //4!=4x3x2x1 } public static int factorial (int n){ return (n>1)?n*factorial(n-1):n; } }
Quiz01
/* c:\\JAVA\\test 폴더를 삭제해 보세요! */ import java.io.*; class Quiz01 { public static void main(String[] args) { File f=new File("c:\\JAVA\\test"); if(f.exists()){ //디렉토리 안의 목록(디렉토리또는파일) 얻어오기 File[]flist=f.listFiles(); //디렉토리 안의 파일 지우기 for(int i=0; i<flist.length; i++){ System.out.println("디렉토리: "+flist[i]); flist[i].delete(); } f.delete(); //디렉토리 삭제하기 System.out.println("해당 디렉토리를 삭제했습니다."); }else{ System.out.println("해당 디렉토리가 존재하지 않습니다."); f.mkdir(); //디렉토리 생성하기 System.out.println("해당 디렉토리를 생성했습니다."); } } }
Quiz02
/*
디렉토리 삭제하기 - 폴더 안에 또 폴더가 존재하는 경우
*/
import java.io.*;
class Quiz02 {
public static void main(String[] args) {
File f=new File("c:\\java\\test");
if(delDir(f)){
System.out.println("디렉토리 삭제 성공");
}else{
System.out.println("디렉토리 삭제 실패");
}
}
//재귀메소드 호출
public static boolean delDir(File f){
File[] list=f.listFiles(); //디렉토리 안의 목록 얻어오기
for(int i=0; i<list.length; i++){
if(list[i].isFile()){//파일인 경우
list[i].delete();//파일 삭제하기
}else{ //디렉토리인 경우
delDir(list[i]);//디렉토리 안의 목록 삭제하는 자기 자신의 메소드 호출
}
}
if(f.delete()){//자기 자신의 폴더 삭제하기
return true;//정상적으로 삭제됐으면 true, 아니면 false
}else{
return false;
}
}
} Quiz03 Quiz04 Quiz05
/*
디렉토리의 크기를 구하는 프로그램 작성
1.쉬운경우:디렉토리안에 파일만 존재하는 경우
2.어려운경우:디렉토리안에 디렉토리가 존재하는 경우
*/
//1번
import java.io.*;
class Quiz03{
public static void main(String[] args) {
File f=new File("c:\\java\\test");
long fileSize=0;
File[] list=f.listFiles();
for(int i=0;i<list.length;i++){
fileSize+=list[i].length();
}
System.out.println("디렉토리 크기:"+fileSize +"bytes");
}
}
//2번
import java.io.*;
class Quiz04 {
public static void main(String[] args) {
File f=new File("c:\\java\\test");
long dirSize=getDirSize(f);
System.out.println("디렉토리크기: "+dirSize + "bytes");
}
public static long getDirSize(File f){
long size=0; //디렉토리 크기
File[] list=f.listFiles();
for(int i=0; i<list.length; i++){
if(list[i].isFile()){ //파일인 경우
size+=list[i].length(); //파일크기를 구해서 디렉토리 크기에 누적
}else{ //디렉토리인 경우
size+=getDirSize(list[i]); //자식 디렉토리크기 구해서 디렉토리 크기에 누적
}
}
return size;
}
}
interface Animal{
void move();
void say();
}
class Quiz05 {
public static void main(String[] args) {
//위의 인터페이스를 이용해서 익명의 내부클래스를 만들어 아래처럼
//결과가 나오도록 출력해 보세요.
//고양이는 살금살금
//고양이는 야옹야옹
Animal rr=new Animal(){
public void move(){
System.out.println("고양이는 살금살금");
}
public void say(){
System.out.println("고양이는 야옹야옹");
}
};
rr.move();
rr.say();
}
}
[ 과 제 ]
'JAVA 기초' 카테고리의 다른 글
15일차 : 스레드의 동기화 (0) | 2012.08.12 |
---|---|
14일차 : 스레드(Thread) (0) | 2012.08.12 |
12일차 : IO, 입출력 (0) | 2012.08.12 |
11일차 : 예외처리, IO(InputStream,OutputStream), 패키지 만들기 (0) | 2012.08.12 |
10일차 : 확장for문, 제네릭, Calendar 클래스, map, 자바의 컬렉션 프레임워크 (0) | 2012.08.12 |
12일차 : IO, 입출력
BufferedOutputStream
import java.io.*; class BufferedOutputStream01 { public static void main(String[] args) { //public BufferedOutputStream(OutputStream out) //화면에 출력하기 위한 버퍼(바이트 배열)기능이 강화된 객체 생성 //OutputStream out=System.out; BufferedOutputStream bos=new BufferedOutputStream(System.out);//System.out : 모니터로 연결 //아래처럼 버퍼의 크기(1024바이트)를 지정할 수 있다. //BufferedOutputStream bos=new BufferedOutputStream(System.out,1024); byte[] b={65,66,67,68,69,70}; try{ bos.write(b,0,5);//5byte bos.flush(); bos.close(); }catch(IOException ie){ System.out.println(ie.getMessage()); } } } /* [결과] ABCDE */
BufferedOutputStream - 데이터 파일로 저장
import java.io.*; class BufferedOutputStream02{ public static void main(String[] args) { //public BufferedOutputStream (OutputStream out) - 파일과 연결해주고 싶으면 FileOutputStream byte[] b={65,66,67,68,69,70}; try{ OutputStream out=new FileOutputStream("buf.dat"); //파일로 출력하기 위한 스트림 객체 생성 BufferedOutputStream bos=new BufferedOutputStream(out);//System.out : 모니터로 연결, out : 파일과 연결 bos.write(b,0,5); //b배열의 데이터가 파일로 저장됨 bos.flush(); bos.close(); System.out.println("데이터를 파일로 저장 성공!"); }catch(IOException ie){ System.out.println(ie.getMessage()); } } }
BufferedReader - 한 줄 Line 입력
import java.io.*; class BufferedReader03 { public static void main(String[] args) { //public BufferedReader (Reader in) //InputStreamReader (InputStream in) //키보드로부터 읽어오기 위한 1바이트 처리 스트림 얻어오기 InputStream in=System.in; //1바이트 처리 스트림을 2바이트 처리 스트림으로 변환하기 Reader rd=new InputStreamReader(in); //2바이트 처리 스트림을 버퍼기능을 향상시킨 스트림 객체로 포장하기 BufferedReader br=new BufferedReader(rd); //BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); => 이렇게 한 줄로 나열하여 쓸 수 있다 //public String readLine() throws IOException System.out.println("한 줄 입력"); try{ String line=br.readLine(); System.out.println("Line: "+line); br.close(); //스트림닫기 }catch(IOException ie){ System.out.println(ie.getMessage()); } } }
DataOutputStream - 기본자료형을 파일로 출력
import java.io.*; class DataOutputStream01 { public static void main(String[] args) { try{ //기본 자료형을 파일로 출력하기 위한 스트림 객체 생성 DataOutputStream dos=new DataOutputStream(new FileOutputStream("data.dat")); int a=10; byte b=100; boolean c=false; float d=4.5f; double e=3.4; String f="hello"; dos.writeInt(a); //int형을 파일로 저장(실제로 자료형의 크기(4바이트)만큼 저장된다.) dos.writeByte(b); //byte형을 파일로 저장(파일에 1바이트로 저장) dos.writeBoolean(c); dos.writeFloat(d); dos.writeDouble(e); dos.writeUTF(f); System.out.println("파일로 저장 성공!"); dos.close(); }catch(FileNotFoundException fe){ System.out.println(fe.getMessage()); }catch(IOException ie){ System.out.println(ie.getMessage()); } }
}
DataInputStream - 데이터의 자료형 크기 만큼 읽어오기
import java.io.*; class DataInputStream02 { public static void main(String[] args) { //data.dat파일에서 데이터를 자료형의 크기만큼 읽어오기 위한 스트림 객체 생성 try{ DataInputStream dis=new DataInputStream(new FileInputStream("data.dat")); //파일에서 읽어올 때는 저장된 자료형의 순서와 반드시 일치해야 한다. //파일에서 int형의 크기(4바이트)만큼 읽어와 a에 저장 int a=dis.readInt(); byte b=dis.readByte(); boolean c=dis.readBoolean(); float d=dis.readFloat(); double e=dis.readDouble(); String f=dis.readUTF(); System.out.println("파일에 저장된 데이터"); System.out.println("a: "+a); System.out.println("b: "+b); System.out.println("c: "+c); System.out.println("d: "+d); System.out.println("e: "+e); System.out.println("f: "+f); dis.close(); }catch(FileNotFoundException fe){ System.out.println(fe.getMessage()); }catch(IOException ie){ System.out.println(ie.getMessage()); } } }
FileOutputStream - b배열의 0번째 위치에서 b배열의 크기(5)만큼 파일로 저장하기
import java.io.*;
class FileOutputStream01{
public static void main(String[] args) {
//public FileOutputStream(String name) throws FileNotFoundException
FileOutputStream fout=null; //FileOutputSream객체를 선언(반드시 객체 선언)
try{
//파일에 데이터를 출력할 수 있는 1바이트 처리 스트림객체 생성
fout=new FileOutputStream("test.dat");
//public void write(byte[] b,int off, int len) throws IOExecption
byte[] b={65,66,67,68,69};
//b배열의 0번째 위치에서 b배열의 크기(5)만큼 파일로 저장하기
fout.write(b, 0, b.length);
fout.flush();//버퍼가 다 차지 않아도 데이터 출력하기
System.out.println("파일로 저장 성공!");
}catch(FileNotFoundException fe){
System.out.println(fe.getMessage());
}catch(IOException ie){
System.out.println(ie.getMessage());
}finally{
try{
if(fout!=null) fout.close();//파일 스트림 닫기
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
}
FileInputStream - 파일에서 1바이트단위로 데이터를 읽어오기
import java.io.*; class FileInputStream02{ public static void main(String[] args) { //public FileInputStream(String name) throws FileNotFoundException FileInputStream fin=null; try{ //파일에서 1바이트단위로 데이터를 읽어오기위한 스트림객체 생성 fin=new FileInputStream("test.dat"); //////// 방법1 ///////////////////////////// /* //public int read() throws IOException while(true){ //파일에서 1바이트 읽어와 n에 저장 int n=fin.read(); if(n==-1) //파일의 끝에 도달한 경우 break;//루프끝내기 System.out.print((char)n);//n을 화면에 출력 }*/ ///////// 방법2 ////////////////////////////// /*int n=0; while((n=fin.read())!=-1){ System.out.print((char)n); }*/ //public int read(byte[] b,int off, int len) throws IOException byte[]d =new byte[100]; int n=0; //n에 저장되어있는 것은 5byte while(true){ //파일에서 읽어와 b배열에 저장. n에는 읽어온 바이트 수 크기가 저장 n=fin.read(d,0,d.length); if(n==-1){ //파일 끝에 도달해서 더이상 데이터가 없으면 루프 끝내기 break; } //d배열의 0번 째에서 n만큼 (읽어온 바이트 수 크기 만큼)화면에 출력하기 System.out.write(d, 0, n); System.out.flush(); } }catch(FileNotFoundException fe){ System.out.println(fe.getMessage()); }catch(IOException ie){ System.out.println(ie.getMessage()); }finally{ try{ if(fin!=null) fin.close();//파일스트림 닫기 }catch(IOException ie){ System.out.println(ie.getMessage()); } } } }
PrintWriter - 화면에 출력하기
import java.io.*;
//아래의 결과를 화면으로 출력되도록 수정해 보세요~~
class PrintWriter01 {
public static void main(String[] args) {
//화면에 출력하기 위한 스트림 객체 생성
PrintWriter pw=new PrintWriter (System. out);
pw.println("안녕하세요!");
pw.println("만나서 반가워요~");
pw.close();
System.out.println("파일로 저장 성공!");
}
}
/* 파일로 생성
try{
//파일에 출력하기 위한 스트림 객체 생성
PrintWriter pw=new PrintWriter("print.txt");
pw.println("안녕하세요!");
pw.println("만나서 반가워요~");
pw.close();
System.out.println("파일로 저장 성공!");
}catch(FileNotFoundException fe){
System.out.println(fe.getMessage());
}
}
}
*/ Quiz01
/*
파일복사하는 프로그램을 작성해 보세요.
FileInputStream,FileOutputStream 사용
원본 복사본
test.dat ===> copy.dat
*/
import java.util.Scanner;
import java.io.*;
class Quiz01_1{
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("원본파일명");
String orgFileName=scan.next();
System.out.println("복사될파일명");
String copyFileName=scan.next();
FileInputStream fin=null;
FileOutputStream fout=null;
try{
//원본파일을 읽어오기위한 파일스트림객체
fin=new FileInputStream(orgFileName);
//복사본파일에 저장하기 위한 파일스트림객체
fout=new FileOutputStream(copyFileName);
byte[] b=new byte[100];
int n=0;
int fileSize=0;//전체 파일크기
while(true){
//원본파일읽어와 b배열에 저장하기
n=fin.read(b,0,b.length);
if(n==-1) break;
//읽어온 데이터를 복사본파일에 저장하기
fout.write(b,0,n);
fileSize+=n;
}
fin.close();
fout.close();
System.out.println("복사된 파일크기:"+ fileSize +"bytes");
System.out.println(copyFileName+"으로 복사성공!");
}catch(FileNotFoundException fe){
System.out.println(fe.getMessage());
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
Quiz02
/* BufferedReader 를 사용해서 test.txt파일을 한 줄씩 읽어와 화면에 출력해 보세요. */ import java.io.*; class Quiz02{ public static void main(String[] args) { try{ //test.txt파일에서 데이터를 읽어오기 위한 2바이트 처리 스트림 객체 생성 BufferedReader in = new BufferedReader(new FileReader("c:\\JAVA\\11일차_예외처리_IO\\test.txt")); String line=null; while((line=in.readLine())!=null){//파일에서 한 줄 읽어오기(null이면 파일 끝) System.out.println(line);//화면에 출력하기 } in.close(); }catch(FileNotFoundException fe){ System.out.println(fe.getMessage()); }catch(IOException ie){ System.out.println(ie.getMessage()); } } }
Quiz03
/* 다섯 명의 학생 이름, 전화번호를 키보드로 입력력받아 파일(phone.txt)에 저장해 보세요. ##파일에 저장된 형태 홍길동, 010-111-1234 김아무, 010-222-3333 */ import java.io.*; import java.util.Scanner; class Quiz03 { public static void main(String[] args) { //Scanner scan=new Scanner (System.in); try{ //키보드로 데이터를 읽어오기 위한 입력스트림객체 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //파일에 저장하기 위한 출력 스트림 객체 PrintWriter in=new PrintWriter("phone.txt"); //다섯명 데이터 입력받아 파일로 저장하기 for(int i=1; i<=5; i++){ System.out.println("학생의 이름을 입력하세요."); String name=br.readLine(); System.out.println("전화번호를 입력하세요."); String phone=br.readLine(); //파일로 저장 in.println(name+","+phone+"\r\n"); } br.close(); in.close(); System.out.println("파일로 저장 성공!"); }catch(FileNotFoundException fe){ System.out.println(fe.getMessage()); }catch(IOException ie){ System.out.println(ie.getMessage()); } } }
Quiz04
/* 1. 학생의 이름,국어,영어점수를 키보드로 입력받아 총점,평균을 계산후 파일에 저장하기 Scanner,DataOutputStream 사용 2. 파일에 저장된 이름,국어,영어,총점,평균을 읽어와 화면에 출력하기 */ import java.io.*; import java.util.Scanner; class Quiz04_1{ static Scanner scan=new Scanner(System.in); public static void main(String[] args) { while(true){ System.out.println("1.점수입력 2.성적보기 3.종료"); int n=scan.nextInt(); switch(n){ case 1:saveData();break; case 2:readData();break; case 3:System.exit(0);break; default:System.out.println("잘못입력"); } } } public static void saveData(){ try{ //파일에 데이터를 추가할 수 있는 모드로 스트림객체 생성 DataOutputStream dos=new DataOutputStream(new FileOutputStream("stu.dat",true)); System.out.print("이름:"); String name=scan.next(); System.out.print("국어:"); int kor=scan.nextInt(); System.out.print("영어:"); int eng=scan.nextInt(); int tot=kor+eng; double ave=tot/2.0; //입력받은 데이터를 파일에 저장하기 dos.writeUTF(name); dos.writeInt(kor); dos.writeInt(eng); dos.writeInt(tot); dos.writeDouble(ave); dos.close(); System.out.println("저장성공!"); }catch(Exception e){ System.out.println(e.getMessage()); } } public static void readData(){ DataInputStream dis=null; try{ dis=new DataInputStream(new FileInputStream("stu.dat")); System.out.println("이름\t국어\t영어\t총점\t평균"); while(true){ //파일에 저장된 순서대로 데이터 읽어오기 String name=dis.readUTF(); int kor=dis.readInt(); int eng=dis.readInt(); int tot=dis.readInt(); double ave=dis.readDouble(); System.out.println(name+"\t"+kor+"\t"+eng+"\t"+tot+"\t"+ave); } }catch(FileNotFoundException fe){ System.out.println(fe.getMessage()); }catch(EOFException e){ System.out.println("모든 정보 출력됨"); }catch(IOException ie){ System.out.println(ie.getMessage()); }finally{ try{ if(dis!=null) dis.close(); }catch(IOException ie){} } } }
[ 과 제 ]
'JAVA 기초' 카테고리의 다른 글
14일차 : 스레드(Thread) (0) | 2012.08.12 |
---|---|
13일차 : IO, File클래스, 내부클래스, 객체의 직렬화, 재귀메소드 (0) | 2012.08.12 |
11일차 : 예외처리, IO(InputStream,OutputStream), 패키지 만들기 (0) | 2012.08.12 |
10일차 : 확장for문, 제네릭, Calendar 클래스, map, 자바의 컬렉션 프레임워크 (0) | 2012.08.12 |
9일차 : ArrayList, Character, String클래스, String Builder, Wrapper 클래스 (0) | 2012.08.11 |
11일차 : 예외처리, IO(InputStream,OutputStream), 패키지 만들기
예외처리Exception01
import java.util.Scanner; import java.util.InputMismatchException; class Exception01 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); try{//예외가 발생될 수 있는 문장을 try블록으로 묶기. 꼭 에러발생하는 윗부분부터 묶지 않고, 맨 위에 블록으로 묶어줘도된다. System.out.println("첫 번째 수 입력"); int n1=scan.nextInt(); System.out.println("두 번째 수 입력"); int n2=scan.nextInt(); int n3=n1/n2;//n2에 0이 들어가면(0을 입력하면) 에러가 나서 닫힌다(예외 발생) System.out.println(n1 + "/" + n2+ "=" + n3); }catch(InputMismatchException ie){//import 해줘야 사용 가능 System.out.println("입력데이터는 숫자로 입력해야 합니다."); System.out.println(ie.getMessage()); }catch(ArithmeticException ae){//ae에는 오류에 대한 정보가 담긴다.(오류메시지등,..) System.out.println("어떠한 수를 0으로 나눌수는 없습니다."); System.out.println(ae.getMessage());//오류메시지 출력하기(/ by zero: 오류메시지?) } System.out.println("프로그램이 종료됩니다."); } }
예외처리Exception02
import java.util.Scanner; import java.util.InputMismatchException; class Exception02 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); while(true){ try{ //예외가 발생될 수 있는 문장을 try블록으로 묶기. 꼭 에러발생하는 윗부분부터 묶지 않고, 맨 위에 블록으로 묶어줘도된다. System.out.println("첫 번째 수 입력"); int n1=scan.nextInt(); //문자를 잘못입력하면 14행으로가서 적절한 처리 후 다시 돌아와 입력받음 System.out.println("두 번째 수 입력"); int n2=scan.nextInt(); int n3=n1/n2;//n2에 0이 들어가면(0을 입력하면) 에러가 나서 닫힌다(예외 발생) System.out.println(n1 + "/" + n2+ "=" + n3); }catch(InputMismatchException ie){ //import 해줘야 사용 가능 System.out.println("입력데이터는 숫자로 입력해야 합니다."); scan.next(); //잘못입력한 문자열 읽어와 버리기 continue; }catch(ArithmeticException ae){//ae에는 오류에 대한 정보가 담긴다.(오류메시지등,..) System.out.println("어떠한 수를 0으로 나눌수는 없습니다."); continue; } break; } System.out.println("프로그램이 종료됩니다."); } } //8~13행에 오류가 나면 try로 묶어서 예외 처리를 해준다.
예외처리Exception03
/* - 자바의 모든 예외는 Exception의 자식 클래스이므로 Exception은 모든 예외를 처리 할 수 있다. - catch절에서 Exception은 모든 예외를 처리 할 수는 있으나 자식예외보다 먼저 올 수 없다. */ import java.util.Scanner; import java.util.InputMismatchException; class Exception03 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); try{//예외가 발생될 수 있는 문장을 try블록으로 묶기. 꼭 에러발생하는 윗부분부터 묶지 않고, 맨 위에 블록으로 묶어줘도된다. System.out.println("첫 번째 수 입력"); int n1=scan.nextInt(); //문자를 잘못입력하면 14행으로가서 적절한 처리 후 다시 돌아와 입력받음 System.out.println("두 번째 수 입력"); int n2=scan.nextInt(); int n3=n1/n2;//n2에 0이 들어가면(0을 입력하면) 에러가 나서 닫힌다(예외 발생) System.out.println(n1 + "/" + n2+ "=" + n3); }catch(ArithmeticException ae) { //Exception(부모예외)보다 반드시 위에 있어야 한다. System.out.println("0으로 나눌 수 없어요"); }catch(Exception e){ //Exception은 모든 예외를 다 처리할 수 있다. (모든 예외의 부모이므로) System.out.println("연산 도중 오류발생!"); //}catch(ArithmeticException ae){ //==> 부모타입이 이미 처리를 하고 난 뒤이기 때문에 여기까지 넘어오지 않아 에러 발생 //System.out.println("0으로 나눌 수 없어요"); 단, 이 문장이 상단에 올라가 있으면 에러나지않는다.
} } }
예외처리Exception04
import java.io.*; /* << 익셉션의 종류 >> - 자바에는 두 가지 종류의 익셉션이 있다. 1) Checked Exception - RunTimeException을 상속받지 않은 예외 클래스 - 반드시 try~catch절로 예외처리를 해야 하며 예외처리를 하지 않으면 컴파일시에 오류를 발생시킨다. 예) FileNotFoundException, IOException,... 2) Unchecked Exception - RuntimeException을 상속받은 예외클래스 - try~catch절로 예외 처리를 하지 않아도 컴파일시에 오류가 발생되지 않는다. 예) NumberFormatException, ArithmeticException,... */ class Exception04 { public static void main(String[] args) { try{ FileReader fr=new FileReader("test.txt"); //파일에서부터 데이터를 가져와 출력해주는 것 char[] ch=new char[255]; int n=0; while((n=fr.read(ch))!=-1){ //읽어오는 과정 String line=new String(ch, 0, n); System.out.println(line); } }catch(FileNotFoundException fe){ System.out.println("파일이 존재하지 않아요."); System.out.println(fe.getMessage()); }catch(IOException ie){ System.out.println("파일을 읽어는 과정에서 오류발생"); } } }
예외처리Exception05
/* 예외 처리 방법 - 자바에서는 예외처리 방법이 두 가지가 있다. 예외가 발생될 수 있는 문장을 try~catch로 직접 처리 하거나, 자신이 직접 처리하지 않고 throws로 떠넘기는 방법이 있다. throws로 떠넘길 때는 이를 호출하는 곳에서 try~catch로 처리해야 한다. */ import java.util.Scanner; class Exception05{ public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.println("첫 번째 수"); int a=scan.nextInt(); System.out.println("두 번째 수"); int b=scan.nextInt(); int c=div(a, b); //div라는 메소드로 a,b를 넘기면 14행으로 System.out.println("첫 번째 수를 두 번째 수로 나눈 값: "+c); } //방법1 : 예외처리를 try~catch로 자신이 직접 처리 public static int div(int a, int b){ int r=0; try{ r=a/b; return r; }catch(ArithmeticException e){ System.out.println("정수를 0으로 나눌 수 없어요."); return 0; } } }
예외처리Exception06
import java.util.Scanner; class Exception06 { public static void main(String[] args) { Scanner scan=new Scanner (System.in); System.out.println("첫 번째 수"); int a=scan.nextInt(); System.out.println("두 번째 수"); int b=scan.nextInt(); try{ //메소드를 호출하는 곳에서 try~catch로 처리한다. int c=div(a,b); //호출하는 부분 System.out.println("첫 번째 수를 두 번째 수로 나눈 값 : "+c); }catch(ArithmeticException ae){ System.out.println("연산 오류!"); } } //예외가 발생 되었을 때 직접 처리 하지 않고 throws로 떠넘기기 public static int div(int a, int b) throws ArithmeticException{ //파라미터 값 다음에 throws로 예외처리 int c=a/b; return c; } } // 호출한 곳에서 적절하게 처리하기 위해 throws로 떠넘기는 것
예외처리Exception07
/* << 강제로 예외 발생시키기 >> 형식 throw 예외객체; 문법적 오류는 없지만(컴파일 가능) 실행 시 문제가 되는 경우 강제로 예외 발생 */ class Exception07 { public static void main(String[] args) { int a=10, b=20; try{ int area=boxarea(a,b); System.out.println("사각형 넓이: "+area); }catch(Exception e){ System.out.println(e.getMessage()); } } public static int boxarea(int a, int b) throws Exception{ if(a<=0 || b<=0){ // 강제로 예외 발생 시키기 throw new Exception("가로 세로 길이는 0이하일 수 없습니다."); } return a*b; } }
파일 읽어오고 읽어온 문자 화면에 출력하기
import java.io.*; class FileReader01 { public static void main(String[] args) { FileReader rd=null; try{ //같은 경로에 있는 me.txt파일을 읽어오기 위한 2바이트 처리 스트림 객체 생성 rd=new FileReader("me.txt"); //기존에 파일이 있을 경우에만 처리 가능 //public int read() throws IOException int n=0; while(true){ n=rd.read();//파일에서 2바이트 읽어오기 if(n==-1) break;//파일 끝이면 while문 빠져나가기 System.out.print((char)n);//읽어온 문자 화면에 출력하기 } }catch(FileNotFoundException fe){ System.out.println(fe.getMessage()); }catch(IOException ie){ System.out.println(ie.getMessage()); }finally{ try{ if(rd!=null) rd.close(); }catch(IOException ie){ System.out.println(ie.getMessage()); } } } }
작성한 문구를 파일로 저장
import java.io.*; class FileWriter01 { public static void main(String[] args) { //public FileWriter(String fileName) throws IOException FileWriter writer=null; try{ //me.txt파일에 출력하기 위한 2바이트 처리 스트림 객체 생성 //파일을 저장할 수 있는 객체를 만듦. 경로를 지정하지 않으면 같은 작업폴더에 저장됨. 경로지정 역슬래쉬 2번 writer=new FileWriter("c:\\JAVA\\me.txt"); //파일에 문자열 출력하기 writer.write("안녕하세요!\r\n"); //파일과 연결되어 저장된 문구 writer.write("제 이름은 홍길동 입니다.\r\n"); System.out.println("파일로 저장 성공!"); }catch(IOException ie){ System.out.println(ie.getMessage()); }finally{ try{ if(writer!=null) writer.close(); }catch(IOException e){ System.out.println(e.getMessage()); } } } }
인풋스트림
import java.io.*; class InputStream01{ public static void main(String[] args) { //public static final InputStream in =>멤버변수 //키보드와 연결된 1바이트 스트림객체 InputStream in=System.in; //public abstract int read() throws IOException System.out.println("글자 한 개만 입력"); try{ int n=in.read(); //키보드로부터 1바이트 읽어오기 System.out.println("입력된 문자: "+(char)n); }catch(IOException ie){ System.out.println("입력과정에서 오류 발생"); } } }
아웃풋스트림
import java.io.*; class OutputStream01{ public static void main(String[] args) { //public static final PrintStream out OutputStream out=System.out; //모니터와 연결된 1바이트 처리 출력 스트림 //public abstract void write(int b) throws IOException //public void write(byte[] b) throws IOException byte b=65; byte[] a={65, 66, 67, 68,69}; try{ out.write(b); //화면으로 b출력하기 out.write(a, 1, 3); //a배열의 1번 째에서 3바이트 출력(66,67,68 출력) //out.flush(); //버퍼가 다 차지 않아도 데이터 내보내기. close메소드를 쓰면 flush를 쓰지 않아도 된다 out.close(); //스트림 닫기(내부적으로 flush메소드 호출됨). 이걸 안해주면 눈으로는 보이지 않지만 데이터를 계속 흘려보내는 작업을 한다. }catch(IOException ie){ System.out.println(ie.getMessage()); } } }
패키지 만들기
package aa; // 패키지 만들기 // cmd>javac -d 경로 클래스명.java (-d : 패키지를 만들겠다는 의미) public class MyPerson{ private String name; private int age; public MyPerson(String name, int age){ this.name=name; this.age=age; } public String getName(){return name;} public int getAge(){return age;} }
글자 하나만 입력
import java.io.*; class Reader01 { public static void main(String[] args) { //public InputStreamReader (InputStream in) InputStream in=System.in; //키보드와 연결된 1바이트 스트림 Reader rd=new InputStreamReader(in); //1바이트처리 스트림을 2바이트처리 스트림으로 변환(2byte단위로 묶음 처리하겠다) //public int read() throws IOException System.out.println("글자하나만 입력"); try{ int n=rd.read(); System.out.println("입려된 글자: "+(char)n); //형변환 해줘야 글자 그대로 출력 rd.close(); //스트림은 사용하고 나면 반드시 close()로 닫아줘야 함 }catch(IOException ie){ System.out.println(ie.getMessage()); } } } // read() : 첫글자(한글자)의 아스키코드 값을 읽는다
화면으로 데이터를 2바이트 단위(문자)로 출력하기
import java.io.*; class Writer01 { public static void main(String[] args) { //OutputStreamWriter(OutputStream out) //OutputStream out=System.out; 이렇게 넣거나 6행처럼 ()안에 넣어줘도 된다. //화면으로 데이터를 2바이트 단위(문자)로 출력하기 위한 객체 생성 Writer wr=new OutputStreamWriter(System.out); char ch[]={'a', 'b', 'c', 'd'}; try{ wr.write(ch); String str="안녕하세요!"; wr.write(str); wr.close(); //스트림 닫기 }catch(IOException ie){ System.out.println(ie.getMessage()); } } }
Quiz01
import java.util.Scanner; import java.util.InputMismatchException; //아래의 프로그램에서 숫자를 입력하지 않으면 예외가 발생된다. //여기에 적절한 대한 예외처리를 해 보세요. class Quiz01 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); try{ System.out.println("두 정수를 입력하세요! (예: 10, 20)"); String str=scan.next();//키보드로 문자열 입력받기 String[] nums=str.split(",");//,를 기준으로 문자열 쪼개서 배열에 저장하기 int a=0, b=0; a=Integer.parseInt(nums[0]); //문자를 숫자로 변환하기 b=Integer.parseInt(nums[1]); System.out.println("두 수합: "+ (a+b)); } catch(NumberFormatException ne){ System.out.println("입력한 형식이 잘못되었습니다. (숫자와 ','로 입력해주세요.)"); System.out.println(ne.getMessage()); }finally{ //메소드에 리턴문이 있어도 실행됨 System.out.println("오류가 나도 무조건 수행됩니다."); } } }
[ 과 제 ]
'JAVA 기초' 카테고리의 다른 글
13일차 : IO, File클래스, 내부클래스, 객체의 직렬화, 재귀메소드 (0) | 2012.08.12 |
---|---|
12일차 : IO, 입출력 (0) | 2012.08.12 |
10일차 : 확장for문, 제네릭, Calendar 클래스, map, 자바의 컬렉션 프레임워크 (0) | 2012.08.12 |
9일차 : ArrayList, Character, String클래스, String Builder, Wrapper 클래스 (0) | 2012.08.11 |
8일차 : 추상클래스, 인터페이스, Object클래스 (0) | 2012.08.11 |
10일차 : 확장for문, 제네릭, Calendar 클래스, map, 자바의 컬렉션 프레임워크
확장 for문 - 제네릭 사용, 저장된 요소를 하나씩 자동으로 꺼내와 저장변수에 저장하고 반복문 수행
/* <<확장 for문 >> - jdk5.0 이상에서 추가된 기능 - 형식 for(저장변수 : 배열 또는 컬렉션 객체){ 반복문; ... } 컬렉션 객체에 저장된 요소를 하나씩 자동으로 꺼내와 저장변수에 저장하고 반복문을 수행한다. */ import java.util.*; class For1{ public static void main(String[] args) { ArrayList<String> list=new ArrayList<String>(); list.add("홍길동"); list.add("김철수"); list.add("김영희"); list.add("김태희"); //확장 for사용하기 //list에 저장된 요소를 꺼내와 str에 저장 for(String str:list){ System.out.println(str); } } }
제네릭
import java.util.ArrayList; import java.util.Iterator; class Generic01{ public static void main(String[] args) { //ArrayList에 String타입의 객체만 지정하도록 설정 //제네릭 <자료형>지정을 해주지 않으면 제한없이 넣을 수 있고 문법적인 오류가 나지않아 실행 시에 잘못된 타입이 잘 못 들어갈 수 있다
ArrayList<String> list=new ArrayList<String>();//ArrayList에는 String객체만 저장할 수 있다는 것 list.add("진달래"); list.add("개나리"); list.add("민들레"); //list.add(100); --String타입만 가능하므로 정수형 객체를 넣으면 컴파일 오류 발생 for(int i=0; i<list.size(); i++){ //제네릭을 사용하면 객체를 꺼내올 때 형 변환을 하지 않아도 됨 String str=list.get(i); System.out.println(str); } System.out.println("iterator사용"); Iterator<String> it=list.iterator(); while(it.hasNext()){ //형변환 없이 사용 String aa=it.next(); System.out.println(aa); } } }
날짜 윤년 확인
import java.util.*; class GregorianCalendar01 { public static void main(String[] args) { GregorianCalendar cal=new GregorianCalendar(); 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+"일"); //public boolean isLeapYear(int year): 윤년인지 아닌지 판별 boolean yy=cal.isLeapYear(2012); if(yy){ System.out.println("윤년입니다."); }else{ System.out.println("윤년이 아닙니다."); } //public int getActualMinimum(int field) //해당 필드 중에서 가장 큰 값 얻어오기 int date=cal.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("이번 달은 "+date+"일까지 있습니다."); } }
날짜 년, 월, 일, 요일 출력 및 현재 시간 출력
import java.util.Calendar; class Calendar01{ public static void main(String[] args) { //Calendar static Calendar.getInstance(); Calendar cal=Calendar.getInstance(); //System.out.println(cal); //public int get(int field) //public static final int YEAR int year=cal.get(Calendar.YEAR); //년 int month=cal.get(Calendar.MONTH)+1; //월. 1월은 0부터 시작 int date=cal.get(Calendar.DATE); //'일 int day=cal.get(Calendar.DAY_OF_WEEK); //요일 얻어오기 System.out.println(year+"년 "+month+"월 "+date+"일");//오늘날짜 출력 switch(day){ //오늘 날짜 출력 case Calendar.SUNDAY:System.out.println("일요일"); break; case Calendar.MONDAY:System.out.println("월요일"); break; case Calendar.TUESDAY:System.out.println("화요일"); break; case Calendar.WEDNESDAY:System.out.println("수요일"); break; case Calendar.THURSDAY:System.out.println("목요일"); break; case Calendar.FRIDAY:System.out.println("금요일"); break; case Calendar.SATURDAY:System.out.println("토요일"); break; } //현재 시각을 출력해 보세요. xx시 xx분 xx초 int hour=cal.get(Calendar.HOUR);//시 HOUR_OF_DAY: 24시간 단위로 시간을 얻어옮 int minute=cal.get(Calendar.MINUTE); //분 int second=cal.get(Calendar.SECOND); //초 System.out.println(hour+"시 "+minute+"분 "+second+"초"); //pubilc final void set(int year, int month, int date) cal.set(2001,1,1); //2001년 2월 1일로 설정 year=cal.get(Calendar.YEAR); //년 month=cal.get(Calendar.MONTH)+1;//월. 1월은 0부터 시작 date=cal.get(Calendar.DATE); //'일 day=cal.get(Calendar.DAY_OF_WEEK);//요일 얻어오기 System.out.println(year+"년 "+month+"월 "+date+"일"); } }
Hash Set - 객체 저장하고 저장된 객체 꺼내오기
import java.util.HashSet; import java.util.Iterator; class HashSet01{ public static void main(String[] args) { HashSet hs=new HashSet(); //HashSet에 객체 저장하기 (저장할 때 순서가 없음) hs.add("봄"); hs.add("여름"); hs.add("가을"); hs.add("겨울"); hs.add("여름"); //중복데이터 허용 안함 - 오류가 나지 않고 이전 데이터 덮어 씌우기 //HashSet에 저장된 객체 꺼내오기 Iterator it=hs.iterator(); while(it.hasNext()){ String ss=(String)it.next(); System.out.println(ss); } } }
Map
/* << map(★★) >> - Key와 Value가 한 쌍으로 저장되는 형태의 자료구조 - Key는 중복될 수 없으며 Value는 중복이 가능하다. - 검색시 유용하다. */ import java.util.HashMap; class Map01{ public static void main(String[] args) { //제네릭을 사용하지 않은 경우 HashMap map=new HashMap(); //map은 key와 value가 한 쌍으로 저장 //public V put(K key, V value) -모두 오브젝트 타입 map.put(1, "홍길동"); //key값을 임의로 정해 넣는다 map.put(2, "김철수"); map.put(3, "이순신"); //public V get(Object key) //key(2)에 해당하는 value(김철수)를 얻어옴 String value=(String)map.get(2); System.out.println(value); ////////////////////////// 제네릭을 사용 한 경우 //////////////////////////////// //key값은 Integer, Value값은 String을 저장하는 HashMap생성 HashMap<Integer, String> map1=new HashMap<Integer, String>();//<Integer, String> 오로지 클래스타입만 쓸 수 있음
map1.put(new Integer(1), "가가가"); map1.put(1, "가가가"); map1.put(2, "나나나"); map1.put(3, "다다다"); map1.put(4, "라라라"); //제네릭을 사용했으므로 형 변환 하지 않아도 됨 String ss=map1.get(3); System.out.println("key:3"+",value: "+ss); } }
Map - 저장된 아이디 검색하고 없으면 해당 아이디가 존재하지 않는다는 메시지 출력
import java.util.*; class Member{ private String id; private String pwd; public Member(String id, String pwd){ this.id=id; this.pwd=pwd; } public void print(){ System.out.println("id: "+id); System.out.println("pwd: "+pwd); } } class Map02{ public static void main(String[] args) { //key값을 id로 갖고 value로 Member객체를 갖는 Map객체 생성 Map<String, Member> map=new HashMap<String, Member>(); map.put("song", new Member("song", "1234")); map.put("kim", new Member("kim", "0000")); map.put("lee", new Member("lee", "9999")); //key값은 중복될 수 없다. 동일한 키 값이 존재하면 덮어씌우기가 됨 map.put("kim", new Member("kim", "6666"));
System.out.println("찾는 아이디 입력"); Scanner scan=new Scanner(System.in); String id=scan.next(); Member mm=map.get(id); if(mm!=null){ mm.print(); }else{ System.out.println("해당 아이디가 존재하지 않습니다."); } } }
TreeSet
import java.util.TreeSet; import java.util.Iterator; class TreeSet01 { public static void main(String[] args) { //TreeSet은 객체를 정렬해서 저장함 TreeSet ts=new TreeSet(); ts.add("박주영"); ts.add("구자철"); ts.add("기성용"); ts.add("박지성"); Iterator it=ts.iterator(); while(it.hasNext()){ String str=(String)it.next(); System.out.println(str); } } }
vector클래스 - vector객체에 저장하고 객체의 수와 백터의 용량 출력, 객체를 꺼내와 Enumeration와 Iterator를 이용해서 출력
import java.util.Vector; import java.util.Enumeration; import java.util.Iterator; /* << vector클래스 >> - 객체를 배열처럼 관리해주는 클래스 -ArrayList와 유사하지만 차이점은 Vector클래스는 스레드의 동기화를 지원하고 ArrayList는 스레드의 동기화를 지원하지 않는다. */ class Vector01 { public static void main(String[] args) { Vector vec=new Vector(8); //Vector에 객체 저장하기 vec.add(new String("하나")); vec.add(new String("둘")); vec.add(new String("세엣")); vec.add(new String("넷")); vec.add(new String("다섯")); vec.add(new String("여섯")); vec.add(new String("일곱")); vec.add(new String("여덟")); System.out.println("객체의 수: "+vec.size()); //public int capacity() System.out.println("백터의 용량: "+vec.capacity()); //Vector에 저장된 객체 꺼내오기 for(int i=0; i<vec.size(); i++){ String str=(String)vec.get(i); //vec.get(i): x번째 것을 꺼내와라 System.out.println(str); } System.out.println("Enumeration을 이용해서 출력"); //public Enumeration<E> elements()
Enumeration em=vec.elements(); while(em.hasMoreElements()){ String ss=(String)em.nextElement(); System.out.println(ss); } System.out.println("Iterator을 이용해서 출력"); //public Iterator<E> iterator() //Iterator<E>: 순차적으로 next하여 데이터를 꺼내오는 애 Iterator it=vec.iterator(); //사용하려면 import해줘야 한다 while(it.hasNext()){ //다음 요소가 있으면 true String ss=(String)it.next();//다음요소 리턴 System.out.println(ss); } } }
Quiz01
/* ArrayList에 학생이름 다섯 명을 저장하고 Iterator를 사용해서 전체를 출력해 보세요. */ import java.util.ArrayList; import java.util.Iterator; class Quiz01 { public static void main(String[] args) { ArrayList list=new ArrayList(); list.add(new String("원빈")); list.add(new String("장동건")); list.add(new String("김주원")); list.add(new String("조인성")); list.add(new String("조니뎁")); System.out.println("Iterator을 이용해서 출력"); //public Iterator<E> iterator() Iterator it=list.iterator(); //ArrayLisst로 학생이름 저장했으니까 list.iterator(); while(it.hasNext()){ String ss=(String)it.next();//iterator타입으로 받기 위해 형변환 System.out.println(ss); } }
}
Quiz02
import java.util.*; //java.util 패키지 안의 모든 클래스 import하기 class Member{ private String id; private String pwd; public Member(String id, String pwd){ this.id=id; this.pwd=pwd; } public void print(){ System.out.println("id: "+id); System.out.println("pwd: "+pwd); } } class Quiz02 { public static void main(String[] args) { //ArrayList에 Member객체를 세 개 저장하고 Iterator를 사용해서 데이터를 꺼내와 //출력해 보세요.(제네릭 사용) ArrayList<Member> list=new ArrayList<Member>(); list.add(new Member("aaa", "1234")); list.add(new Member("bbb", "5678")); list.add(new Member("ccc", "9012")); System.out.println("Iterator를 사용헤서 데이터를 꺼내와 출력"); Iterator<Member> it=list.iterator(); while(it.hasNext()){ Member mem=it.next(); mem.print(); } } }
Quiz03
/* Map에 Key 값으로 아이디, Value값으로 전화번호를 저장하는 프로그램을 작성하고 아이디로 전화번호를 검색해 보세요. */ //import java.util.*; import java.util.Scanner; import java.util.HashMap; import java.util.Set; import java.util.Iterator; class Quiz03 { public static void main(String[] args) { //key값은 Integer, Value값은 String을 저장하는 HashMap생성 HashMap<String, String> map=new HashMap<String, String>(); map.put("aaa", "123-456"); map.put("bbb", "456-789"); map.put("ccc", "101-1234"); Scanner scan = new Scanner(System.in); System.out.println("찾을 아이디를 입력하세요."); String id=scan.next(); //Key값이 id인 Value(전화번호)얻어오기, key가 존재하지 않으면 null값 저장 String value=map.get(id); if(value!=null){ System.out.println(id + ": "+value); }else{ System.out.println("해당 아이디가 존재하지 않습니다."); } System.out.println("HashMap에 저장된 모든 KEY와 VALUE출력"); //public set<K> KeySet() ==>Key를 set에 담아서 리턴 Set<String> st=map.keySet();
//Iterator<E> iterator() Iterator<String> it=st.iterator(); //it는 다음 요소(28행)가 있는지 확인 while(it.hasNext()){ //다음 요소가 있다면 String key=it.next(); //다음 요소(KEY)얻어오기 String vv=map.get(key);//KEY에 해당하는 VALUE얻어오기 System.out.println(key+": "+vv); } } }
Quiz04
/* 자신의 생년월일을 입력받아 태어난 요일을 출력해 보세요. */ import java.util.*; class Quiz04{ public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.print("태어난 년도를 입력하세요: "); int y=scan.nextInt(); System.out.print("태어난 달(월)을 입력하세요: "); int m=scan.nextInt(); System.out.print("태어난 날짜를 입력하세요: "); int d=scan.nextInt(); //System.out.println("당신이 태어난 요일은 "); GregorianCalendar cal=new GregorianCalendar(y,m-1,d); int day=cal.get(Calendar.DAY_OF_WEEK); //첫째날의 요일 String ss=""; switch(day){ case Calendar.SUNDAY:ss="일";break; case Calendar.MONDAY:ss="월";break; case Calendar.TUESDAY:ss="화";break; case Calendar.WEDNESDAY:ss="수";break; case Calendar.THURSDAY:ss="목";break; case Calendar.FRIDAY:ss="금";break; case Calendar.SATURDAY:ss="토";break; } System.out.println("당신이 태어난 요일은 " + ss +"요일입니다."); } } /*switch(day){//날짜 출력 case Calendar.SUNDAY:System.out.println("당신이 태어난 요일은 일요일 입니다. "); break; case Calendar.MONDAY:System.out.println("당신이 태어난 요일은 월요일 입니다."); break; case Calendar.TUESDAY:System.out.println("당신이 태어난 요일은 화요일 입니다."); break; case Calendar.WEDNESDAY:System.out.println("당신이 태어난 요일은 수요일 입니다."); break; case Calendar.THURSDAY:System.out.println("당신이 태어난 요일은 목요일 입니다."); break; case Calendar.FRIDAY:System.out.println("당신이 태어난 요일은 금요일 입니다."); break; case Calendar.SATURDAY:System.out.println("당신이 태어난 요일은 토요일 입니다."); break;*/
[ 과 제 ]
'JAVA 기초' 카테고리의 다른 글
12일차 : IO, 입출력 (0) | 2012.08.12 |
---|---|
11일차 : 예외처리, IO(InputStream,OutputStream), 패키지 만들기 (0) | 2012.08.12 |
9일차 : ArrayList, Character, String클래스, String Builder, Wrapper 클래스 (0) | 2012.08.11 |
8일차 : 추상클래스, 인터페이스, Object클래스 (0) | 2012.08.11 |
7일차 : 오버로딩, 오버라이딩, 상속 (0) | 2012.08.11 |
9일차 : ArrayList, Character, String클래스, String Builder, Wrapper 클래스
ArrayList - 요소를 저장하고 저장된 데이터 꺼내와 출력
import java.util.ArrayList;//스캐너 클래스를 포함하는 java.util클래스 라이브러리의 선언 class ArrayList01{ public static void main(String[] args) { String str1=new String("진달래"); String str2=new String("개나리"); String str3=new String("봉선화꽃"); ArrayList list=new ArrayList(); //ArrayList생성 //ArrayList에 요소 저장하기 list.add(str1);//모든 요소들을 add로 다 추가할 수 있다 list.add(str2); list.add(str3); list.add(new Integer(100)); //저장된 데이터 꺼내와서 출력하기 for(int i=0; i<list.size(); i++){ Object str=list.get(i);//요소를 Object로 꺼내온 것 i번 째 요소 얻어오기 //String클래스의 메소드를 사용하기 위해 String으로 형변환 //자식클래스가 부모클래스를 참조할 때는 형변환하기! String ss=(String)str; System.out.println(str.toString() + ", 꽃이름 글자 수: "+ ss.length()); } } }
ArrayList - 아이디와 패스워드를 저장하고 저장된 데이터를 꺼내와 출력
import java.util.ArrayList; class Member{ private String id; private String pwd; public Member(String id, String pwd){ this.id=id; this.pwd=pwd; } public void print(){ System.out.println("id: "+id); System.out.println("pwd: "+pwd); } public String toString(){//오버라이딩 return "id: "+id+", pwd: "+pwd; } } class ArrayList02{ public static void main(String[] args) { ArrayList list=new ArrayList(); //list에 Member 객체 저장하기 list.add(new Member("kim", "1234")); list.add(new Member("hong", "0007")); list.add(new Member("happy", "8383")); //public E remove(int index) list.remove(1);//인덱스가 1인 요소 삭제(인덱스는 0부터 시작) //public E set(int index, E element) list.set(1, new Member ("song", "yyyy"));//1번 째 요소를 song, yyyy로 바꿈(song위치에 yyyy를 넣겠다) //list에 저장된 객체를 꺼내와 출력해 보세요! //public object get(int index) ==> 요소를 꺼내옴 for(int i=0; i<list.size(); i++){ Object aa=list.get(i); //Member mem=(Member)aa; //mem.print(); System.out.println(aa);//Member@해시코드로 나온다 --aa.toString이 생략되어있다(오버라이딩 하지 않은 경우) //id:kim, pwd:1234로 나오게 해주고 싶을 경우 자식 오버라이딩 해주면 된다 } } } /* id: kim, pwd: 1234 id: hong, pwd: 0007 id: happy, pwd: 8383 */
Character
class Character01 { public static void main(String[] args) { //public static boolean isLetter(char ch) //public static boolean isLowerCase(char ch) //public static boolean isWhitespace(char ch) //public static boolean isDigit(char ch) String str="Hello World 123"; for(int i=0; i<str.length(); i++){ char ch=str.charAt(i); if(Character.isLetter(ch)){ //문자인지 판별 System.out.println(ch+"는 문자입니다."); } if(Character.isLowerCase(ch)){ System.out.println(ch+"는 소문자 입니다."); } if(Character.isWhitespace(ch)){ System.out.println(ch+"는 공백문자 입니다."); } if(Character.isDigit(ch)){ System.out.println(ch+"는 숫자 입니다."); } } } }
String - 문자열이 일치하는지, 다른지 판별
class String01{ public static void main(String[] args) { String str1="hello"; //상수 String str2="hello"; if(str1==str2){ System.out.println("문자열 일치"); }else{ System.out.println("문자열 다름"); } String str3=new String("hello"); String str4=new String("hello"); if(str3.equals(str4)){//두 객체의 주소값을 비교 --> 주소값은 다름. (문자열을 비교할 때는 반드시equals로 비교) System.out.println("equals메소드로 비교==>문자열 일치"); }else{ System.out.println("문자열 다름"); } } }
String - 문자열 길이 출력, 문자열 위치 리턴, 문자를 대문자로 변환, 문자열 얻어오기, 문자를 쪼개어 배열에 저장 등
class String02 { public static void main(String[] args) { //public String(String original) String str=new String("Hello World"); //public String(char[] value) char[] ch={'a', 'b', 'c', 'd'}; String str1=new String(ch); System.out.println("str: "+str); System.out.println("str1: "+str1); //public String(char[] value, int offset, int count) String str2=new String(ch, 1,2); //첫번째 위치에서 두 개. 배열은 0부터 시작하므로 bc의 값으로 출력됨. System.out.println("str2: "+str2); String str3="Java"; //public char charAt(int index) : index위치의 문자를 리턴 char a=str3.charAt(2); //나는 Java의 두 번째 위치의 문자를 알고싶다!(0,1,2 이므로 v가 출력) System.out.println("2번 째 위치의 문자"+a); //public int length() : 문자열의 길이 리턴 //length()메소드를 호출해서 str3의 문자열 길이를 출력해보세요. int b=str3.length(); System.out.println(str3+"의 문자열 길이: "+b); //public int indexOf(String str) : str문자열의 위치를 리턴 int c=str3.indexOf("a"); //해당 문자에 없는 문자열 입력시 -1이 출력(해당문자를 포함하고 있나없나 검사하는데도 사용) System.out.println("c: "+c); String email="aaa@daum.net"; if(email.indexOf("@")==-1){ //indexOf("")==>@가 없으면 -1리턴 System.out.println("이메일형식이 올바르지 않습니다."); }else{ System.out.println("이메일: "+email); } String id="song"; //public String toUpperCase() ==> 문자열을 대문자로 변환 String uid=id.toUpperCase(); //uid에 변환된 값이 들어가는 것 System.out.println(id + "대문자로 변환 후: "+uid); //public String substring(int beginIndex, int endIndex) String str4=email.substring(4,8); //4번 째 인덱스에서 (8-1)번째까지 문자열 얻어옴 System.out.println("str4: "+str4); //daum //public String[] split(String regex) String str5="홍길동, 김철수, 유관순"; String ss[]=str5.split(", "); //,(구분자)를 기준으로 문자열을 쪼개서 배열로 저장 for(int i=0; i<ss.length; i++){ System.out.println(ss[i]); } int n=12345; //n을 String타입으로 변환해서 출력해보세요. //public static String valueOf(int i) String sn=String.valueOf(n); //n을 문자열로 변환 System.out.println(sn); } } /* str: Hello World str1: abcd str2: bc 2번 째 위치의 문자v Java의 문자열 길이: 4 c: 1 이메일: aaa@daum.net song대문자로 변환 후: SONG str4: daum 홍길동 김철수 유관순 12345 */
String과 String Builder의 차이
class StringBuilder01 { public static void main(String[] args) { StringBuilder sb=new StringBuilder("Hello"); //public StringBuilder append(String str) //StringBuilder는 원본문자열이 변경됨 StringBuilder sb1=sb.append("안녕"); //sb1에는 변경된 값이 저장 System.out.println(sb +"," +sb1); String st=new String("Hello"); //String은 원본문자열은 절대 변경되지 않고 복사본이 생성됨 String aa=st.concat("안녕"); System.out.println("st: "+st+", aa: "+aa); } }
Wrapper 클래스
class Wrapper01{ public static void main(String[] args) { //public Integer(String s) Integer in=new Integer("100"); //멤버변수값이 출력되도록 자식 오버라이딩? System.out.println(in); //public int intValue() //Integer in1=new Integer(100); //int n=in1.intValue(); //정수로 바꾸기 Integer in2=100; //가능! (오토박싱 jdk5.0이상 지원) in2=new Integer(100); int n=in2; //가능! (언박싱) System.out.println(in2+","+n); //public static int parseInt(String s) ==>문자열을 int형으로 변환해서 리턴 String ss="100"; //ss를 int형으로 바꾸세요~ int a= Integer.parseInt(ss); System.out.println(a+2);//100+2 //public static String toBinaryString(int i) String ss1=Integer.toBinaryString(100); System.out.println(100+": 의 2진수: "+ss1); //public static double parseDouble(String s) double d=Double.parseDouble("12.2345"); System.out.println(d); } }
[ 과 제 ]
'JAVA 기초' 카테고리의 다른 글
11일차 : 예외처리, IO(InputStream,OutputStream), 패키지 만들기 (0) | 2012.08.12 |
---|---|
10일차 : 확장for문, 제네릭, Calendar 클래스, map, 자바의 컬렉션 프레임워크 (0) | 2012.08.12 |
8일차 : 추상클래스, 인터페이스, Object클래스 (0) | 2012.08.11 |
7일차 : 오버로딩, 오버라이딩, 상속 (0) | 2012.08.11 |
6일차 : 오버로딩, final, static메소드 (0) | 2012.08.11 |
8일차 : 추상클래스, 인터페이스, Object클래스
인터페이스
interface MyShape{ //3개의 상수선언 --> public static final 이 생략되어있음(final이 붙어있으므로 값을 변경 할 수 없다) //final은 외부에서 값을 변경할 수 없기 때문에 public로 써주는 것 String RED="빨강색"; String BLUE="파랑색"; String GREEN="초록색"; //추상메소드선언 --> public abstract 이 생략됨(인터페이스 안에 들어있는 모든 메소드는 추상메소드이므로) abstract void paint(); void draw(); void resize(); } //인터페이스 상속받기-->모든 추상메소드를 오버라이딩해야함 class MyRect implements MyShape{ public void paint(){ //퍼블릭을 적어줘야 오류가 나지 않는다. 인터페이스에서는 생략되어있지만 오버라이딩에선 생략되어있지 않기 때문 //RED="AA"; 오류발생--?>final이므로 변경할 수 없음 System.out.println("사각형을 칠해요"); } public void draw(){ System.out.println("사각형을 그려요"); } public void resize(){ System.out.println("사각형의 사이즈를 변경해요"); } } //MyCircle이라는 클래스를 만들어 보세요. class MyCircle implements MyShape{ public void paint(){ System.out.println("타원형을 칠해요"); } public void draw(){ System.out.println("타원형을 그려요"); } public void resize(){ System.out.println("타원형의 사이즈를 변경해요"); } } class Interface01{ public static void main(String[] args) { //MyShape sh=new MyShape(); //오류발생-->인터페이스는 객체 생성 불가! MyShape sh=new MyRect(); //기능-->자식객체 참조 가능 sh.draw(); System.out.println(MyShape.RED);//빨강색 출력 MyRect rr=new MyRect(); rr.paint(); rr.draw(); rr.resize(); //System.out.println(Integer.MAX_VALUE); //결과값 2147483647 } } /* 빨강색 사각형을 칠해요 사각형을 그려요 사각형의 사이즈를 변경해요 */
인터페이스 2
/* - 인터페이스는 다중 상속이 지원된다. 예) class MyRect implements MyShape, MyPoint{ .. } - 인터페이스간에 상속을 받을 때는 implements가 아니라 extends를 사용한다. 예) interface MyShape{ void paint(); void draw(); } interface MyRect extends MyShape{//인터페이스간의 상속은 extends ... } << final 용도 >> 1. 변수앞에 붙는 경우 --> 변수가 상수로 만듦 예) final double PT=3.141592; 2. 메소드앞에 final이 붙는 경우 --> 자식 클래스에서 오버라이딩 할 수 없다. final void print(){ } 3. 클래스 앞에 final이 붙는 경우 --> 자식 클래스가 상속받을 수 없음 final class MyRect{ .. } */ interface MyShape{ void paint(); void draw(); } interface MyPoint{ void move (int x, int y); } class MyRect implements MyShape, MyPoint{//두 개 이상의 인터페이스 상속 가능 public void paint(){ System.out.println("사각형 칠하기"); } public void draw(){ System.out.println("사각형 그리기"); } public void move(int x, int y){ System.out.println(x+","+y+"의 좌표로 이동하기"); } } class Interface02{ public static void main(String[] args) { MyRect rr=new MyRect(); rr.paint(); rr.draw(); rr.move(1,2); } } /* 결과 사각형 칠하기 사각형 그리기 1,2의 좌표로 이동하기 */
추상클래스
abstract class MyShape{// 추상클래스 protected int x,y;//변수 선언 public void setXY(int x, int y){//값 저장해주는 메소드 this.x=x; this.y=y; } public abstract void draw();//추상메소드 } //자식클래스는 추상메소드를 반드시 <오버라이딩>해야 한다. class MyRect extends MyShape{ //상속받기 //추상메소드 오버라이딩하기(abstract는 쓰지 않는다.) public void draw(){ System.out.println(x+","+y +"의 위치에 사각형을 그려요"); } } class MyCircle extends MyShape{ public void draw(){ //오버라이딩! System.out.println(x+"," +y +"의 위치에 타원을 그려요"); } //public void paint(){} } class Abstract01{ public static void main(String[] args) {//블럭으로 묶여있는 것을 body라고 하고 public~를 헤더라고 하는데 추상메소드는 이를 갖지 않는다. //MyShape sh=new MyShape(); // 추상클래스는 객체를 생성할 수 없다. MyRect rr=new MyRect(); rr.setXY(1,2); rr.draw(); //추상클래스는 객체를 생성할 수는 없지만 자식객체를 참조할 수는 있다. MyShape sh=new MyCircle(); sh.setXY(3,4); sh.draw(); //sh.paint();--호출못함 } } /* 결과 1,2의 위치에 사각형을 그려요 3,4의 위치에 타원을 그려요 */
Object 클래스
/* Object 클래스 - 모든 클래스의 최상위 클래스 - 자바의 모든 클래스는 Object클래스를 상속받는다. */ class Object01 { public static void main(String[] args) { //public Object() Object obj=new Object(); Object obj1=new Object(); //public String toString(); String str=obj.toString(); System.out.println(str); //해시코드값 출력 String str1=obj1.toString(); System.out.println(str1); //해시코드값 출력 //public boolean equals(Object obj) boolean aa=obj.equals(obj1); //두 객체의 주소값 비교 if(aa){ System.out.println("두 객체는 같아요"); }else{ System.out.println("두 객체는 달라요"); } /*Object obj2=obj1; if(obj2==obj1){ System.out.println("두 객체는 같아요"); }else{ System.out.println("두 객체는 달라요"); }*/ String str2=new String("안녕"); String str3=new String("안녕"); //public boolean dquals(Object obj) boolean kk=str2.equals(str3); //안에 들어있는 문자 자체를 비교. 문자열 비교에는 equals if(kk) { System.out.println("두 문자열은 같아요"); }else { System.out.println("두 문자열은 달라요"); } /*if(str2==str3){ //주소값 비교 System.out.println("두 문자열은 같아요"); }else { System.out.println("두 문자열은 달라요");//다르다 출력 }*/ System.out.println(str2);//toString()메소드 호출 } }
MyDBMS
interface MyDBMS{ void connect(); void disconnect(); void execute(String id); }
MyOracle
class MyOracle implements MyDBMS{ public void connect(){ System.out.println("오라클 dbms와 연결됨"); } public void disconnect(){ System.out.println("오라클 dbms와 연결이 해제됨"); } public void execute(String id){ System.out.println("오라클 명령어를 사용하여[" + id + "]에 대한 작업 수행"); } }
MySql
class MySql implements MyDBMS{ public void connect(){ System.out.println("MySql dbms와 연결됨"); } public void disconnect(){ System.out.println("MySql dbms와 연결이 해제됨"); } public void execute(String id){ System.out.println("MySql 명령어를 사용하여[" + id + "]에 대한 작업 수행"); } }
UseDBMS
class UseDBMS { public static void main(String[] args) { MySql mm=new MySql(); mm.connect(); mm.execute("홍길동"); mm.disconnect(); } }
Quiz01
abstract class Shape{ protected int x, y; public Shape(int x, int y){ this.x=x; this.y=y; } public abstract int getArea(); } class MyRect extends Shape{ public MyRect(int x, int y){ super(x,y); } public int getArea(){ //오버라이딩 return x*y; } } /*public void print(){ System.out.println("사각형의 넓이: " +getArea()); }*/ /* getArea()메소드를 추상메소드로 만들고 Shape를 상속받아 사각형의 넓이를 구하는 클래스를 만들어 보세요. */ class Quiz01 { public static void main(String[] args) { MyRect rr=new MyRect(30,40); //rr.print(); System.out.println("사각형의 넓이: "+rr.getArea()); } } /* 결과 사각형의 넓이: 1200 */
Quiz02
/* interface Employee{ void calc(); //급여계산 void showData(); //정보출력 } //위의 인터페이스를 상속받는 정규사원클래스, 임시사원클래스를 만들어 보세요. //정규사원 : 사원번호, 이름, 부서, 급여 : 본봉+수당 //임시사원 : 주민번호, 이름, 급여 : 근무시간*시간당급여 */ interface Employee{ void calc(); //급여계산 void showData(); //정보출력 } class Mypay implements Employee{ private String number; //사원번호 private String name; //이름 private String bu; //부서 private int su; //수당 private int bon; //본봉 private int pay; //생성자에서 값 초기화 하기 public Mypay(String number, String name, String bu, int su, int bon){ this.number=number; this.name=name; this.bu=bu; this.su=su; this.bon=bon; } //추상 메소드 오버라이딩하기 public void calc(){ pay=su+bon; } public void showData(){ System.out.println("정규사원"); System.out.println("사원번호: " +number); System.out.println("이름: " +name); System.out.println("부서: " +bu); System.out.println("본봉: "+bon); System.out.println("급여: " +pay+"\n"); } } class Bi implements Employee{ private String number; //주민번호 private String name; //이름 private int hour ; //근무시간 private int sidon; //시간당급여 private int bij; public Bi(String number, String name, int hour, int sidon){ this.number=number; this.name=name; this.hour=hour; this.sidon=sidon; } public void calc(){ bij=hour*sidon; } public void showData(){ System.out.println("임시사원"); System.out.println("주민번호: "+number); System.out.println("이름: "+name); System.out.println("급여: "+bij); } } class Quiz02{ public static void main(String[] args) { Mypay rr=new Mypay("15", "홍길동", "기획부", 100000,200000); rr.calc(); rr.showData(); Bi ss=new Bi("841212-3456123", "김철수", 8, 6500); ss.calc(); ss.showData(); } }
Quiz03
class Person{ private String name; //이름 private String jumin; //주민번호 public Person(String name, String jumin){ this.name=name; this.jumin=jumin; } public String getName(){return name;} public String getJumin(){return jumin;} public String toString(){ //Object의 toString메소드 오버라이딩 String str="name: " + name+", jumin: "+jumin; return str; } public boolean equals(Object obj){ //Object는 Person타입의 객체를 참조가능 //Object는 Person에서 추가된 멤버는 참조못하므로 자식타입으로 형변환 Person pp=(Person)obj; if(this.name==(pp.name) && this.jumin==(pp.jumin)){ //name, jumin은 자식에서 추가된 것 obj로 접근하면 안된고 형변환을 해줘야한다. return true; }else { return false; } } } class Quiz03{ public static void main(String[] args) { Person per1=new Person("홍길동", "12345678"); System.out.println(per1); //.toString() 이 생략됨 //[출력결과] name: 홍길동, jumin : 12345678 Person per2=new Person("홍길동","12345678"); //public boolean equals(Object obj) if(per1.equals(per2)){ System.out.println("동일인물"); }else{ System.out.println("다른인물"); } //Person per2=new Person("홍길동", "12345678"); } } /* toString메소드는 인스턴스의 정보를 문자열의 형태로 반환하기 위한 메소드이다. */
'JAVA 기초' 카테고리의 다른 글
10일차 : 확장for문, 제네릭, Calendar 클래스, map, 자바의 컬렉션 프레임워크 (0) | 2012.08.12 |
---|---|
9일차 : ArrayList, Character, String클래스, String Builder, Wrapper 클래스 (0) | 2012.08.11 |
7일차 : 오버로딩, 오버라이딩, 상속 (0) | 2012.08.11 |
6일차 : 오버로딩, final, static메소드 (0) | 2012.08.11 |
5일차 : 객체지향 프로그래밍, 생성자, 사용자 정의 메소드 (0) | 2012.08.05 |
7일차 : 오버로딩, 오버라이딩, 상속
상속 - Person객체, Student 객체 생성하여 이름, 주민번호, 학번 출력하기
class Person{ private String name;//멤버변수 private String jumin; public Person(){ System.out.println("Person객체 생성");//생성자 } public void setPerson(String name, String jumin){//매개변수 this.name=name; this.jumin=jumin; } public void showPerson(){//출력하는 메소드 System.out.println("이름: "+name); System.out.println("주민번호: "+jumin); } } class Student extends Person{//Person클래스 상속받기. private String stuNum;//학번 public Student(){ System.out.println("Student객체 생성");//생성자 } public void setStudent(String name, String jumin, String stuNum){ //자식클래스라도 private멤버는 직접 접근할 수 없다. //this.name=name; //this.jumin=jumin; //부모 메소드를 통해서 간접적으로 멤버변수를 사용한다. setPerson(name, jumin);//private을 사용하면 접근이 불가능하다. 그러나 펄슨 메소드를 불러오면 간접적으로 접근이 가능하다? this.stuNum=stuNum; } public void showStudent(){ showPerson(); System.out.println("학번: "+stuNum); } } class Inheritance01{ public static void main(String[] args) { Student stu=new Student(); stu.setStudent("홍길동", "801212-5678123", "0212345"); stu.showStudent(); } } /* 결과 Person객체 생성 Student객체 생성 이름: 홍길동 주민번호: 801212-5678123 학번: 0212345 */
상속 - 부피값 구하기
/* 부모 클래스가 생성자를 갖는 경우 - 부모 생성자에서 파라미터를 받아야 하는 경우에 자식 생성자에서 반드시 super()로 부모 생성자를 호출하여 파라미터를 전송해야 한다. super()는 자식생성자 제일 첫 라인에 와야 한다. */ class MyRect{ protected double x; //가로길이 protected double y; //세로길이 public MyRect(double x, double y){//부모생성자의 파라미터 값을 무조건 넣어주는 작업을 해줘야 한다. this.x=x; this.y=y; } public double getArea(){return x*y;} } class ChildRect extends MyRect{ private double h; public ChildRect(double x, double y, double h){//반드시 자식생성자에서 부모생성자를 호출하는 값을 넣어주어야 한다. super(x,y);//부모 생성자 호출하기! (double x, double y) this.h=h; } public double getVolume(){return getArea()*h;} } class Inheritance02{ public static void main(String[] args) { ChildRect rr=new ChildRect(2,3,4); System.out.println("부피: "+rr.getVolume()); } } /* 결과 부피: 24.0 */
오버라이딩 - x,y의 값 구하기
class Rect{ protected int x,y; public Rect(int x, int y){ this.x=x; this.y=y; } public void print(){ //출력해주는 메소드...이지만 오버라이딩으로 인해 오버라이딩 부분이 출력이 된다. System.out.println("x: "+x); System.out.println("y: "+y); } } class ChildRect extends Rect{ private int z; public ChildRect(int x, int y, int z){ super(x,y); this.z=z; } public void print(){ //오버라이딩(수정, 덮어씌우기)- 이렇게 수정, 덮어씌워줬으니 24~16행에 덮어씌워지고 이부분으로 출력이 되는 것이다. super.print(); //부모클래스의(와 자식클래스가 똑같아 구분하기 힘든 경우) print메소드 호출 System.out.println("x: "+x); System.out.println("y: "+y); System.out.println("z: "+z); } public void print(int a) { //오버로딩 -추가되는 개념 } } class Overriding01{ public static void main(String[] args) { ChildRect rr=new ChildRect(2,3,4); rr.print(); //누가 호출??? 자식이있는 메소드로 호출 rr.print(10); } } /* 결과 x: 2 y: 3 x: 2 y: 3 z: 4 */
오버라이딩 - 삼각형, 사각형 넓이 각각 구하기
class Shape{ protected int x,y; public Shape(int x, int y){ this.x=x; this.y=y; } public int getArea(){return 0;} } class MyRect extends Shape{ public MyRect(int x, int y){ super(x,y);//부모생성자 호출 } public int getArea(){ //오버라이딩 return x*y; } } class MyTri extends Shape{ public MyTri(int x, int y){ super(x,y); } public int getArea(){ //오버라이딩 return (x*y)/2; } } class Overriding02 { public static void main(String[] args) { MyRect rr=new MyRect(1,2); System.out.println("사각형넓이: "+rr.getArea()); MyTri tri=new MyTri(10,3); System.out.println("삼각형넓이: "+tri.getArea()); } } /* 결과 사각형넓이: 2 삼각형넓이: 15 */
오버라이딩, 클래스간의 형변환 - 사각형, 삼각형의 넓이 각각 구하기
class Shape{ protected int x,y; public Shape(int x, int y){ this.x=x; this.y=y; } public int getArea(){return 0;} } class MyRect extends Shape{ public MyRect(int x, int y){ super(x,y);//부모생성자 호출 } public int getArea(){ //오버라이딩 return x*y; } public void printArea(){ System.out.println("x:"+x+"y:"+y); System.out.println("사각형넓이:"+getArea()); } } class MyTri extends Shape{ public MyTri(int x, int y){ super(x,y); } public int getArea(){ //오버라이딩 return (x*y)/2; } } class Overriding03{ public static void main(String[] args) { MyRect rr=new MyRect(10,20); //부모클래스는 자식클래스를 참조할 수 있다. shape:부모 Shape sh=rr; //쉐이프에 저장되어있는건 MyRect //부모클래스타입으로 호출하지만 자식에서 (오버라이딩 된) 메소드가 호출된다. int area=sh.getArea(); System.out.println("사각형의 넓이: "+area); //sh.printArea(); //오류발생-->부모타입으로는 자식에서 추가된 멤버는 참조못함. MyRect r1=(MyRect)sh; //자식클래스가 부모클래스를 참조할 때는 (형변환)해야 함. 왜! 부모클래스가 더 크니까. MyTri tri=new MyTri(30,40); Shape sh1=tri; //? System.out.println("삼각형의 넓이: " +sh1.getArea()); } }
오버라이딩 - 도형의 넓이 구하기 --------------보류 (오류남/수정예정)
class Overriding04 {
public static void main(String[] args) {
MyRect rr=new MyRect(1,2);
MyTri tri=new MyTri(3,4);
printer(rr);
printer(tri);
}
//MyRect, MyTri 는 Shape의 자식클래스이므로 Shape타입의 매개변수 사용 가능!
public static void printer(Shape ss){
//getArea()메소드는 자식에서 오버라이딩되었으므로 부모를 통해 호출 가능!
System.out.println("도형의 넓이: "+ss.getArea());
//ss가 MyRect타입인 경우 printArea()메소드를 호출해 보세요~
}
if(ss instanceof MyRect){
MyRect rr=(MyRect)ss;
ss.PrintArea();
rr.printArea();
}
}
/*
public static void printer(Object ss){ //자바에는 최상의 클래스로 오브젝트가 있다. 부모. 5,6행이 올 수 있다.
if(ss instanceof MyRect){ //ss가 MyRect타입의 인스턴스(객체)인가? ss를 MyRect로 바꿔라.
MyRect rr=(MyRect)ss; //ss를 자식으로 형변환하기
System.out.println("사각형의 넓이: "+rr.getArea());
} else if (ss instanceof MyTri){ //ss가 MyTri타입의 인스턴스(객체)인가?
MyTri tt=(MyTri)ss;
System.out.println("삼각형의 넓이: "+tt.getArea());
}
}
*/
/*
public static void printer(MyRect rr){
System.out.println("사각형넓이: "+rr.getArea()+"를 프린터로 출력");
}
public static void printer(MyTri rr){
System.out.println("삼각형넓이: "+rr.getArea()+"를 프린터로 출력");
}
*/
}
/*
결과
도형의 넓이: 2
도형의 넓이: 6
*/
this
/*
<< this >>
- 객체자신을 의미(this는 객체자신의 주소값)
- 사용되는 경우
1) 멤버변수이름과 매개변수의 이름이 같을 때 멤버변수 앞에 this를
붙여 구분한다.
2) 다른 생성자를 호출할 때
3) 객체자신을 파라미터로 전달할 때
*/
class MyClass01{
private String name;
public MyClass01(String name){
this(); //다른 생성자 호출
this.name=name;
}
public MyClass01(){
System.out.println("객체가 생성됨");
}
public void print(){
System.out.println("name: "+name);//this가 생략되어 있는 것
}
}
class ThisTest01{
public static void main(String[] args) {
MyClass01 aa=new MyClass01("홍길동");//객체생성하기
aa.print();
MyClass01 bb=new MyClass01("김아무");
bb.print();
}
}
/*
[결과]
객체가 생성됨
name: 홍길동
객체가 생성됨
name: 김아무
*/
this - 프린터 출력
class MyBook { private String title; private int price; public MyBook(String title, int price){ this.title=title; this.price=price; } public String getTitle(){return title;} public int getPrice(){return price;} public void showInfo(){ //MyBook이라는 정보를 프린트나 데이터로 출력 Printer.print(this); //출력하고자 하는 자기 자신의 정보를 this로 주었다. 여기에서의 this는 bb=100번지 //print pp=new printer(); //pp.print(this); //아래 프린터에 static를 써주지 않으면 이렇게 출력해줘야 한다. } } class Printer{ public static void print(MyBook book){ // System.out.println("아래의 내용을 프린터로 출력합니다."); System.out.println(book.getTitle()+","+book.getPrice()); } } class ThisTest02{ public static void main(String[] args) { MyBook bb=new MyBook("JAVA",10000); bb.showInfo(); } } /* 결과 아래의 내용을 프린터로 출력합니다. JAVA,10000 */
Quiz01
//사각형의 넓이를 구하는 클래스 class MyRect{ private double x; //가로길이 //멤버변수 private double y; //세로길이 public void setX(double x){this.x=x;} public void setY(double y){this.y=y;} public double getX(){return x;} public double getY(){return y;} public double getArea(){return x*y;} } //위의 클래스를 상속받아 부피(가로*세로*높이)를 구하는 기능이 추가되는 자식클래스를 만들고 //main메소드를 사용해 보세요. class Rect extends MyRect{ //MyRect클래스 상속받기 private double h; //높이 public void setData(double x, double y, double h){ //파라미터 //부모 메소드를 통해서 간접적으로 멤버변수를 사용한다. setX(x); //4행을 불러온다 setY(y); //5행을 불러온다 this.h=h; } public double getVolume(){ return getX()*getY()*h; } } class Quiz01 { public static void main(String[] args) { //상속받은 MyRect클래스를 실행시키는 메인클래스 Rect rr=new Rect(); rr.setData(10,20,30); //임의의값을 넣어서 계산 System.out.println("부피 :"+rr.getVolume()); } }
Quiz02
class Person { private String name; private String jumin; public Person(String name, String jumin){ this.name=name; this.jumin=jumin; } public void showPerson(){ //출력하는 메소드 System.out.println("이름: "+name); System.out.println("주민번호: "+jumin); } } class Student extends Person{ private String stuNum; //학번 public Student(String name, String jumin, String stuNum){ //자식생성자에서 반드시 부모생성자를 호출하면서 파라미터를 전송해야 함 super(name, jumin); //부모 생성자를 호출 this.stuNum=stuNum; } public void showStudent(){ showPerson(); System.out.println("학번: "+stuNum); } } //Person클래스를 상속받는 Student클래스를 만들어 보세요. //Student클래스는 학번이 추가된다. class Quiz02{ public static void main(String[] args) { Student stu=new Student("홍길동", "801212-56781234", "0212345");//자식으로 따라가서 Student stu.showStudent(); } } /* 결과 이름: 홍길동 주민번호: 801212-56781234 학번: 0212345 */
Quiz03
class MyShape{ protected int x, y; public MyShape (int x, int y){ this.x=x; this.y=y; } public void draw(){ System.out.println("x좌표: "+x); System.out.println("y좌표: "+y); } } class MyLine extends MyShape{ public MyLine(int x, int y){ super(x,y);//생성자를 호출 } public void draw(){ //오버라이딩 super.draw();//부모클래스 메소드 호출 System.out.println("위의 좌표에 사각형을 그려요."); } } class MyRect extends MyShape{ public MyRect(int x, int y){ super(x,y); } public void draw(){ //오버라이딩 super.draw();//부모클래스 메소드 호출 System.out.println("위의 좌표에 직선을 그려요."); } } /* 위의 클래스를 상속받는 MyRect, MyLine의 클래스를 만들고 draw()라는 메소드를 오버라이딩 해보세요. [출력결과] x좌표: 10 y좌표: 100 위의 좌표에 사각형을 그려요. x좌표: 40 y좌표: 80 위의 좌표에 직선을 그려요. */ class Quiz03 { public static void main(String[] args) { MyShape sh=new MyRect(2,4); //가능! (부모가 자식개체를 참조할 수 있다) sh.draw(); //다형성 sh=new MyLine(6,7); //가능! sh.draw(); MyLine aa=(MyLine)sh;//자식이 부모를 참조할 때는 형변환!! /* MyLine rr=new MyLine(10, 100); rr.draw(); MyRect aa=new MyRect(40, 80); aa.draw(); */ } }
[ 과 제 ]
'JAVA 기초' 카테고리의 다른 글
9일차 : ArrayList, Character, String클래스, String Builder, Wrapper 클래스 (0) | 2012.08.11 |
---|---|
8일차 : 추상클래스, 인터페이스, Object클래스 (0) | 2012.08.11 |
6일차 : 오버로딩, final, static메소드 (0) | 2012.08.11 |
5일차 : 객체지향 프로그래밍, 생성자, 사용자 정의 메소드 (0) | 2012.08.05 |
4일차 : 배열 (0) | 2012.08.05 |