java.lang.System 클래스는 표준 입력, 표준 출력, 그리고 표준 에러를 포함한 시스템 지향적인 리소스에 접근할 수 있는 방법을 제공한다.
System 클래스에는 표준 입력, 표준 출력 그리고 표준 에러를 지원하는 각각의 in, out, 그리고 err클래스 필드가 선언되어 있다. in 클래스 필드는 java.io.InputStream 타입이며, out과 err클래스 필드는 java.io.PrintStream 타입으로 선언되어 있다. 이 클래스 필드들 이외에도 System 클래스에는 아래에서 소개하는 메소드를 포함하는 여러가지 static 메소드가 선언되어 있다.
void arraycopy (Object src, int srcPos, Object dest, int destPos, int length)
인자 src배열의 srcPos위치를 시작으로 인자 length에 지정한 개수의 요소를 인자 dest 배열의 destPos의 위치에 복사한다. 이 메소드는 인자 src 또는 dest가 null일 경우 NullPointerException을, 복사중에 배열의 범위를 벗어나게 되면 ArrayIndexOutBoundException을, 인자 src 배여로가 인자 dest배열의 타입이 일치하지 않아 저장을 못할 경우에는 java.lang.ArrayStoreException을 던진다.
long currentTimeMills()
January 1, 1970 00:00:00 UTC(universal time coordinated)에서부터 현재 시스템 시간까지의 시간을 밀리 초 단위로 반환한다.(UTC- 협정 세계시 :)
void gc()
JVM에게 가비지 콜렉터를 실행할 것을 통보한다. 하지만 통보를 했다고 해서 반드시 가비지 콜렉터가 실행되지는 않는다.
String getProperty(String prop)
인자 prop에 의해 지정된 시스템 프로퍼티(system property - 버전 번호 같은 플랫폼의 속성)의 값을 반환한다. 만일 지정한 프로퍼티가 존재하지 않으면 null을 반환한다.
void runFinalization()
JVM에 모든 불완전한 객체에 대해 파이널라이즈를 실행할 것을 통보한다. 단 이 메소드를 호출한다고 해도 반드시 객체들의 파이널라이즈가 수행되지는 않는다.
void setErr(PrintStream err)
표준 에러 스트림을 인자 err로 설정한다. 이 메소드 호출은 윈도우 xp에서 java Application2 > errlog로 지정하는 것과 같은 작업을 한다.
void setIn (InputStream in)
표준 입력 스트림을 인자 in으로 설정한다. 이 메소드 호출은 윈도우 xp에서 java Application < input 과 같이 지정하는 것과 같은 작업을 한다.
void setOut (PrintStream out)
표준 출력 스트림을 인자 out 으로 설정한다. 이 메소드 호출은 윈도우XP에서 java Application > output과 같이 지정하는 것과 같은 작업을 한다.
---------------------------------------------------------------------
package System;
public class system {
public static void main(String[] args){
int[] grades={86,92,78,65,52,43,72,98,81};
int[] gradesBackup=new int[grades.length];
System.arraycopy(grades, 0, gradesBackup, 0, grades.length);
for(int i=0; i<gradesBackup.length;i++)
System.out.println(gradesBackup[i]);
System.out.println("Current time : "+System.currentTimeMillis());
String[] propNames={
"java.vender.url",
"java.class.path",
"user.home",
"java.class.version",
"os.version",
"java.vender",
"user.dir",
"user.timezone",
"path.separator",
"os.name",
"os.arch",
"line.separator",
"file.separator",
"user.name",
"java.version",
"java.home"
};
for (int i=0; i<propNames.length; i++){
System.out.println(propNames[i]+": "+ System.getProperty(propNames[i]));
}
}
}
arraycopy(), currentTimeMills()그리고 getProperty()메소드를 사용하는 방법을 보여준다.
main() 메소드에서는 arraycopy()의 사용 방법을 제일 먼저 보여주는데 이 메소드는 grades 배열의 내용을 gradesBackup 배열에 복사를 한다.
arraycopy() 메소드는 배열을 다른 배열로 복사하는 가장 빠른 방법이다. 또한 참조를 내부 배열에 반환하는 메소드의 클래스를 작성할 때 배열의 복사본을 생성하고 복사본의 참조를 반환하기 위해 arraycopy() 메소드를 사용해야 한다. 이런 방법을 사용하면 고객이 직접 내부 배열을 조작하는 것을 방지 할 수 있다.
복사를 한 다음 밀리 초 값으로 표현되는 현재 시간을 반환하기 위해 currentTimeMills()메소드를 호출한다. currentTimeMills() 메소드에서 반환된 값이 밀리 초 형식으로써 일반적인 날짜는 아니기 때문에 날짜를 읽기 쉽게 하기 위새서는 일반적인 날짜 형식을 제공하는 java.util.Date클래스를 사용하는 것이 좋다. java.util.Date클래스의 Date()생성자는 내부적으로 currentTimeMills()를 호출한 후 toString()메소드에서 밀리 초의 값을 일반 형식의 날짜와 시간으로 변환한 후 반환한다.
마지막으로 main()메소드에서는 for 반복문 안에서 getProperty() 메소드를 사용하는데 반복을 하면서 프로퍼티의 이름과 값을 출력한다.
line.separator 프로퍼티에는 \r\n과 같은 줄바꿈을 표현하는 문자가 아닌 실제 줄 바꿈 문자 또는 문자들이 저장되어 있기 때문에 위의 출력 결과를 보면 line.separator 다음에 실제 빈 줄이 생긴다.
'Java > Working-level Java' 카테고리의 다른 글
Thread 2 (0) | 2015.01.14 |
---|---|
Thread (0) | 2015.01.06 |
StringBuffer / StringBuilder (0) | 2015.01.03 |
ChatClient (0) | 2014.12.26 |
ChatServer (0) | 2014.12.24 |