728x90
반응형
1. System 클래스
▷ System 클래스의 정적 static 필드와 메소드를 이용하면 프로그램 종료, 키보드 입력, 콘솔(모니터) 출력,
현재 시간 읽기, 시스템 프로퍼티 읽기 등이 가능합니다.
◎ 정적 멤버
NO | 정적 멤버 | 용도 | |
1 | 필드 | out | 콘솔(모니터)에 문자 출력 |
2 | err | 콘솔(모니터)에 에러 내용 출력 | |
3 | in | 키보드 입력 | |
4 | 메소드 | exit(int status) | 프로세스 종료 |
5 | currentTimeMillis() | 현재 시간을 밀리초 단위의 long 값으로 리턴 | |
6 | nanoTime() | 현재 시간을 나노초 단위의 long 값으로 리턴 | |
7 | getProperty() | 운영체제와 사용자 정보 제공 | |
8 | getenv() | 운영체제의 환경 변수 정보 제공 |
(1) 콘솔 출력
public class ErrExample { public static void main(String[] args) { try { int value = Integer.parseInt("1oo"); } catch(NumberFormatException e) { System.err.println("[에러 내용]"); System.err.println(e.getMessage()); } } } // 출력 : // [에러 내용] // For input string: "1oo"
System.err.println를 이용하면 글자가 빨갛게 출력됩니다.
(2) 키보드 입력
▷ 키보드로부터 입력된 키를 읽기 위해 System 클래스에서 in 필드를 제공합니다.
in 필드를 이용해서 read() 메소드를 호출하면 입력된 키의 코드 값을 얻을 수 있습니다.
1. 사용 코드
int keyCode = System.in.read();
2. 키 코드는 아래의 번호와 같습니다.
3. 키 코드 사용 예시public class InExample { public static void main(String[] args) throws Exception { int speed = 0; int keyCode = 0; while(true) { //Enter 키를 읽지 않았을 경우에만 실행 if(keyCode != 13 && keyCode != 10) { if(keyCode == 49) { //숫자 1 키를 읽었을 경우 speed++; } else if(keyCode == 50) { //숫자 2 키를 읽었을 경우 speed--; } else if(keyCode == 51) { //숫자 3 키를 읽었을 경우 break; } System.out.println("------------------------"); System.out.println("1. 증속 | 2. 감속 | 3. 중지"); System.out.println("------------------------"); System.out.println("현재 속도 = " + speed); System.out.print("선택 : "); } // 키를 하나씩 읽음 keyCode = System.in.read(); } System.out.println("프로그램 종료"); } } // 출력 : // ------------------------ // 1. 증속 | 2. 감속 | 3. 중지 // ------------------------ // 현재 속도 = 0 // 선택 : 1 // ------------------------ // 1. 증속 | 2. 감속 | 3. 중지 // ------------------------ // 현재 속도 = 1 // 선택 : 2 // ------------------------ // 1. 증속 | 2. 감속 | 3. 중지 // ------------------------ // 현재 속도 = 0 // 선택 : 3 // 프로그램 종료
keyCode = System.in.read(); 를 사용하면 선택에 번호를 입력할 수 있습니다.
(3) 프로세스 종료
자바 프로그램 → JVM으로 프로세스가 생성 → main() 메소드 호출 → 프로그램 구동
GUI 프로그램 : 종료버튼
강제 프로세스 종료 : System.exit() 메소드
System.exit(매개값) : 0, 1 or -1
0 : 정상 종료
1 or -1 : 비정상 종료
◎ 프로세스 종료 예제
public class ExitExample { public static void main(String[] args) { for(int i=0; i<10; i++) { // i값 출력 System.out.println(i); if(i == 5) { // JVM 프로세스 종료 System.out.println("프로세스 강제 종료"); System.exit(0); } } System.out.println(123); } } // 출력 : // 0 // 1 // 2 // 3 // 4 // 5 // 프로세스 강제 종료
프로세스 자체를 종료하므로 뒤의 123은 concol에 출력되지 않습니다.
(4) 진행 시간 읽기
currentTimeMillis() 메소드 nanoTime() 메소드 : 1970년 1월 1일 0시
NO | 메소드 | 용도 |
1 | long currentTimeMillis() | 1/1000 초 단위로 진행된 시간을 리턴 |
2 | long nanoTime() | 1/10^9 초 단위로 진행된 시간을 리턴 |
◎ 진행 시간 읽기 예제
public class MeasureRunTimeExample { public static void main(String[] args) { long time1 = System.nanoTime(); int sum = 0; for(int i=1; i<=1000000; i++) { sum += i; } long time2 = System.nanoTime(); System.out.println("1~1000000까지의 합: " + sum); System.out.println("계산에 " + (time2-time1) + "나노초가 소요되었습니다."); } } // 출력 : // 1~1000000까지의 합: 1784293664 // 계산에 2416400나노초가 소요되었습니다.
(5) 시스템 프로퍼티 읽기
NO | 속성 이름(key) | 설명 | 값(value) |
1 | java.specification.version | 자바 스펙 버전 | 17 |
2 | java.home | JDK 디렉토리 경로 | C:\Program Files\Java\jdk-17.0.3 |
3 | os.name | 운영체제 | Windows 10 |
4 | user.name | 사용자 이름 | xxx |
5 | user.home | 사용자 홈 디렉토리 경로 | C:\Users\xxx |
6 | user.dir | 현재 디렉토리 경로 | C:\Thisis.JavaSecondEdition\workspace\thisisjava |
◎ 시스템 프로퍼티 읽기 예제
import java.util.Properties; import java.util.Set; public class GetPropertyExample { public static void main(String[] args) { String osName = System.getProperty("os.name"); String userName = System.getProperty("user.name"); String userHome = System.getProperty("user.home"); System.out.println(osName); System.out.println(userName); System.out.println(userHome); // 전체 키와 값으로 출력 System.out.println("----------------------------"); System.out.println(" key: value "); System.out.println("----------------------------"); Properties props = System.getProperties(); Set keys = props.keySet(); for(Object objKey : keys) { String key = (String) objKey; String value = System.getProperty(key); System.out.printf("%-40s: %s\n", key, value); } } } // 출력 : // Windows 10 // codepc // C:\Users\codepc // ---------------------------- // key: value // ---------------------------- // java.runtime.name : Java(TM) SE Runtime Environment // sun.boot.library.path : C:\Program Files\Java\jdk1.8.0_251\jre\bin // java.vm.version : 25.251-b08 // . // . // .
System 프로퍼티에 대해서 알아보았습니다.
다양한 클래스들이 있는데 제가 다 이용할 수 있을지 의문이드네요,,,ㅎㅎ
하지만 응용해보도록 노력해볼게요!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
728x90
반응형
'BackEnd > Java' 카테고리의 다른 글
[java] 이것이 자바다 ch12 포장 클래스 (0) | 2023.01.19 |
---|---|
[java] 이것이 자바다 ch12 문자열 클래스 (0) | 2023.01.19 |
[java] 이것이 자바다 ch12 java.base 모듈(Object 클래스) (0) | 2023.01.19 |
[java] ch11 예외 처리 3 (0) | 2023.01.19 |
[java] ch11 예외 처리 2 (0) | 2023.01.19 |