자바의 기본 입.출력
 우선 System 이라는 클래스부터 알아보자
 (http://xrath.com/javase/ko/6/docs/ko/api/index.html)
 System클래스의 필드는 모두 3가지 임을 알수있다.
 in, err, out
 이것은 System. 뒤에 오는 멤버가 3가지라는 것을 말하고
 다시 이것은 PrintStream이란 클래스와 연결되어 있는걸 볼수있다.
 PrintStream이란 클래스는 java.io 패키지 안에 있는 클래스로
 이것을 실행시켜주려면 import java.io.*을 해줘야 한다.

import java.io.*;
public class Exec_01 {
 public static void main(String[] args) throws IOException{
  System.err.println("에러 출력 스트림...");
  int x = System.in.read();
  System.out.println("x = " + x);
  System.out.println("기본 출력 스트림...");
 }
}
=> 입력을 받으려면 예외처리를 해줘야 하는데...
   예외처리로 java.io패키지를 반드시 import 시켜주고
   사용하고자 하는 곳에 throws IOException을 넣어준다.

 
- 기본출력
  - System.out.write(출력대상);
   
public class Exec_02 {
 public static void main(String[] ar) {
  System.out.write(65);
 }
}

=> 아무것도 출력되지 않음을 알수있다.(결과는 종료되었는데도,...)
   jvm은 메모리나 버퍼에 자료를 담고 있다가 어느정도 자료가 쌓이면
   자료를 화면에 출력을 해 주는데 메모리상에 자료를 화면에 내 보내는
   것을 flush()를 해줘야 한다.
   항상 쌍으로 이뤄져야 화면에 나타나게 되는데 나중에 배울
   화일처리나, 통신에서 중요하게 다루게 된다.

public class Exec_02 {
 public static void main(String[] args) {
  System.out.write(65);
  System.out.flush();  
 }
}

  - System.out.write(배열, 초기위치, 길이);

public class Exec_02 {
 public static void main(String[] args) {
  System.out.write(65);
  System.out.flush();
  System.out.println();
  byte[] by = new byte[]{'J', 'A', 'V', 'A'};
  System.out.write(by, 0, 4);
  System.out.println();
 }
}
=> 위의 write()에서는 flush를 해줘야 하는데 아래 배열을 넣은 write에서는
   flush를 안해도 된다.
   이것을 auto flush라고 한다.

  - System.out.print(출력대상);
    콘솔에 출력을 해라
  - System.out.println(출력대상);
    콘솔에 출력을 하고 한줄 내려라
  - System.out.printf("서식",출력대상); - 1.5버젼부터 사용 가능
    자바 1.5버전부터 PrintStream클래스에 printf라는 메소드를 도입했다.
    다음은 그 형식과 설명이다.(c에서 따온 방식이다)
    %c - char 문자 1개를 출력하는 서식
    %숫자c - char문자 1개를 해당 숫자의 자리수만큼 확보한 상태에서 출력하는 서식
             (음수이면 좌측정렬, 양수이면 우측정렬)
    %d(%o, %x) - byte,short,int,long형의 데이터를 10진(16,8진)수로 출력하는 서식
    %숫자d(%숫자o,%숫자x) - byte,short,int,long형의 데이터를 10진(16,8진)수로
                            해당하는 숫자의 자리수만큼 확보한 상태로 출력하는 서식
                            (음수이면 좌측정렬, 양수이면 우측정렬)
    %0숫자d(%0숫자o,%0숫자x) - 확보한 자리가 공백이면 0값을 공백에 채우게 하는 서식
                              (음수이면 런타임 에러가 발생)
    %f(%g, %e) - float,double형의 데이터를 실수(근사,지수)로 출력하는 서식
    %숫자f(%숫자g,%숫자e) - 숫자는 소수점이하 1자리를 나타낼수 있다.
                            예 %10.2f는 10자리중 2자리는 소수점이하로 나타내라는 뜻
    %0숫자f(%0숫자e,%0숫자e)
    %s - 문자열(String) 데이터를 출력하는 서식
    %숫자s   

public class Exec_03 {
 public static void main(String[] args) {
  int a = 100;
  char b = 'A';
  float c = 12.346f;
  String d = "김병철";
  
  System.out.printf("a = %d 입니다.\n", a);
  System.out.printf("b = %c = %d \n", b, (int)b);
  System.out.printf("c = %6.2f \n", c);
  System.out.printf("d = %s 입니다.", d);
 }
}
    
  자바에서는 + 연산자를 문자열의 나열시 사용할수 있게 해 놓았다.
  String s1 = "자바"; String s2 = "김병철"
  System.out.println(s1 +"아이티윌" + "강사" +s2);  =>자바아이티윌강사김병철
  문자열에서만 + 가 나열이지 그냥 변수에서는 아니다.
  int a = 1; int b = 2;
  System.out.println(a+b); => 3
  하지만, 아래에서는 결과값이 다르다.
  System.out.println(""+a+b); => 12
  문자열은 그 어떤것과 연산이 되어도 문자열이 되어버리는 무서운 성질을 가지고 있다.
  System.out.println(""+a+b*2); => 14
  System.out.println(""+a+b-1); => error
     
입.출력 예외 처리
 - 항상 안정성을 두고 작업을 하게끔 구성이 되어 있다
   예기치 않은 사항이 발생했을때 이렇게 처리해라 라고 미리 정의하는것을 예외처리라 함
 - 자바에서 입.출력을 처리함에 있어 예외 처리를 하게끔 요구되어 있다.
   그렇지 않을 경우, 컴파일조차도 되지 않도록 설계되어 있다.
   앞서 배운 print,println,printf는 자체적을 예외처리가 되어 있어서 생략이 가능한
   것이고 나머지는 반드시 예외 처리를 해 주어야 한다.
 - 반드시 java.io 패키지를 import 시켜줘야 한다.
 - 입.출력과 관련된 내용이 사용되는 메서드 뒤에 IOException을 throws 시킨다

import java.io.*;
public class Exec_04{
  public static void main(String[] args) throws IOEception {
    byte[] = bb = {'J','A','V','A'};
    System.out.write(bb);
  }
}
=> 메소드와 구문의 시작 사이에 throws IOEception를 입력해준다.
   메소드에 대해 간단히 배울텐데 메소드에서 사용을 하면
   메소드에서도 throws IOEception를 입력해줘야 한다.
  
import java.io.*;
public class Exec_05 {
  public static void aaa() throws IOException {
  }
  public static void main(String[] ar) throws IOException {
    aaa();//aaa()매소드를 사용하면 여기도 throws IOException를 해줘야 한다
  }
}

 
기본 입력
한글자 입력
  - System.in.read();
    java.io 패키지의 InputStream클래스이며, 이 클래스내의 모든것을 사용 가능
    아스키코드값으로 입력을 받는다.
    int aa = System.in.read();
    System.out.println("입력하신 것은 ="+aa);
    A를 입력하면 65가 나오게 된다.
    만약 입력한 그대로 나오게 하려면
    char aa = (char)Sytem.in.read(); 이렇게 해줘야 한다.
    숫자일 경우에는
    int aa = System.in.read() - 48; 또는 int aa = System.in.read() - '0'을 해준다

@@ 한개의 문자를 받아 화면에 아스키코드값을 나타내기

import java.io.*;
public class Exec_06 {
  public static void main(String[] args) throws IOException {
    System.out.print("아무키나 누르세요");
    int a = System.in.read();
    System.out.println(char(a)+"키의 아스키값은 = "+a);
  }
}

@@ 두개의 문자를 받는 프로그램 코딩후 아래 설명후 수정

  두개이상을 입력받고자 한다면
  int aa = System.in.read();
  System.in.read();
  System.in.read();
  이렇게 해줘야 한다. 이유는 자바에서는 enter키도
  하나의 입력으로 생각하기 때문이다.
  또한 enter는 \r 과 \n 두개를 가지고 있으므로
  입력문 2개를 만들어서 처리해 줘야 한다.
 
문자열입력받기
- BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
역시 외어야 하며, 문자열 입력받을 메소드 안에 넣어준다.
 
import java.io.*;
public class Exec_07{
  public static void main(String[] args) throws IOEception {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String name = "";
    System.out.print("이름을 입력하세요");
    name = in.readLine();
    System.out.println("당신의 이름은 " + name + " 입니다");
  }
}

문자열을 받은 데이타를 자료형을 변환하고 한다면
일반 자료형으로는 불가능 하므로 우리가 알고있는 함수 wrapper클래스를 이용하자

 문자열로 받은 데이타를 boolean형으로 변환하는 방법
import java.io.*;
public class Exec_08{
  public static void main(String[] args) throws IOEception {
    BufferedReader in = BufferedReader(new InputStreamReader(System.in));
    System.out.print("boolean 자료를 입력하세요");
    String imsi = in.readLine();
    boolean bool = Boolean.valueOf(imsi).booleanValue();  //<=암기하세요
    System.out.println("입력하신 boolean형 자료의 값은 "+ bool + "입니다");
  } 
}

 문자열로 받은 데이타를 int형으로 변환하는 방법
 (boolean형만 제외하고 다 이방법으로 한다)
import java.io.*;
public class Exec_09{
  public static void main(String[] args) throws IOEception {
    BufferedReader in = BufferedReader(new InputStreamReader(System.in));
    System.out.print("나이를 입력하세요");
    String imsi = in.readLine();
    int aa = Interger.parseInt(imsi); //숫자가 아닌 다른 문자라면 오류발생
    //또는 int aa=Interger.parseInt(in.readLine()); 위 두줄대신 이렇게도 함
    System.out.println("당신의 나이는 "+aa+"입니다");
  }
}

'자바' 카테고리의 다른 글

주간계획표(파일)  (0) 2012.12.28
클래스,메소드,상수의 이름규칙(10)  (0) 2012.12.14
자바의 연산자(8)  (0) 2012.12.11
자바의 기초적인 기초개념2(7)  (0) 2012.12.11
자바의 기초적인 개념1(6)  (0) 2012.12.11
by 맑은소금 2012. 12. 11. 00:24