[F-Lab 챌린지 3일차] TIL : 자바의신 20장 - java.lang

성수데브리·2023년 7월 1일
0

f-lab_java

목록 보기
2/73

학습 목표


  • Java.lang 패키지
  • 코드 까보기

학습 결과 요약


  • java.lang 패키지는 자바 언어의 핵심 기능을 제공한다.

학습 내용


Java.lang package

  • java.lang 패키지 자바 언어의 토대가 되는 기능을 제공한다. 그래서 import 하지 않아도 사용할 수 있다.
  • java 문서에서는 java.lang 패키지의 핵심 클래스는 Object 와 Class 라고 소개한다.
    • Object : 모든 객체의 최고 조상 클래스
    • Class : 런타임의 클래스를 나타내는 객체
  • 기본형 자료형을 객체로 처리할 필요가 있는데, 이는 Wrapper 클래스가 제공한다.

숫자를 처리하는 클래스

  • 기본 자료형의 숫자를 객체로 처리해야 할 필요가 있을 수도 있다.

  • 기본 자료형 필드를 래핑하는 클래스를 선언함으로써 객체로 처리할 수 있다.

  • 클래스의 이름은 기본 자료형의 맨 앞글자를 대문자로 선언한다.

  • 숫자를 나타내는 기본 자료형의 wrapper 클래스는 Number 추상 클래스를 상속한다.

  • 기본 자료형의 숫자를 객체로 처리가 필요한 상황은 언제 발생할까?

    1. 매개 변수를 참조 자료형으로만 받는 메서드를 처리하기 위해서
    2. 제네릭과 같이 기본 자료형을 사용하지 않는 기능을 사용하기 위해서
    3. 클래스에 선언된 MIN_VALUE, MAX_VALUE 등 상수값을 사용하기 위해서
    4. 문자열을 숫자로, 숫자를 문자열로 쉽게 변환하기 위해서
    5. 진수 변환을 쉽게 처리하기 위해서

System 클래스

  • System 클래스는 생성자가 없어 인스턴스화 할 수 없다.

  • System 클래스에는 몇가지 유용한 클래스 필드와 메서드가 있다.

    java.io 패키지의 PrintStream, InputStream 참조값으로 i/o를 작업을 위임할 수 있다.

  • System 클래스의 메서드를 역할별로 분류하면

    • 시스템 속성값 관리 시스템 속성값을 관리하는 메서드들은 Properties 참조값으로 시스템 속성값 조회를 요청한다.
      Properties 클래스는 Hashtable 를 상속해 key-value 로 시스템 속성값을 관리한다
      private static Properties props;
    • 시스템 환경값 조회 시스템 환경값은 속성과 달리 변경하지 못하고 읽기만 할 수 있다. 대부분 OS 나 장비와 관련된 것들이다.
      public static String getenv(String name) {
          SecurityManager sm = getSecurityManager();
          if (sm != null) {
              sm.checkPermission(new RuntimePermission("getenv."+name));
          }
      
          return ProcessEnvironment.getenv(name);
      }
    • 현재 시간 조회
      /**
       * Returns the current time in milliseconds.  Note that
       * while the unit of time of the return value is a millisecond,
       * the granularity of the value depends on the underlying
       * operating system and may be larger.  For example, many
       * operating systems measure time in units of tens of
       * milliseconds.
       *
       * <p> See the description of the class {@code Date} for
       * a discussion of slight discrepancies that may arise between
       * "computer time" and coordinated universal time (UTC).
       *
       * @return  the difference, measured in milliseconds, between
       *          the current time and midnight, January 1, 1970 UTC.
       * @see     java.util.Date
       */
      @HotSpotIntrinsicCandidate
      public static **native** long currentTimeMillis();
      
      /**
       * Returns the current value of the running Java Virtual Machine's
       * high-resolution time source, in nanoseconds.
       *
       * This method can only be used to measure elapsed time and is
       * not related to any other notion of system or wall-clock time.
       */
      @HotSpotIntrinsicCandidate
      public static **native** long nanoTime();
    • GC 수행
    • JVM 종료
    • 기타 관리용 메서드들

System.out

  • System 클래스의 out 필드의 타입은 PrintStream 이다. 오버로딩된 print() 메서드를 보면 byte, short 타입이 없다.
    byte bValue = 12;
    short sValue = 1212;
    
    System.out.println(bValue);
    System.out.println(sValue);
    
    ----출력 결과----
    
    12
    1212
    print(int x), 정수형을 매개변수로 받는 메서드가 호출되고, 작은 범위에서 큰 범위로 형변환은 문제가 없기 때문에 정상적으로 출력된 것이다.
    /**
     * Prints an integer and then terminate the line.  This method behaves as
     * though it invokes {@link #print(int)} and then
     * {@link #println()}.
     *
     * @param x  The {@code int} to be printed.
     */
    public void println(int x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }
  • System.out.println(String str) 이 매개변수 null 을 처리하는 방법
    public void print(b) {
        write(String.valueOf(b));
    }
    
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
    • 참조변수의 null 체킹 후 null 이면 문자열 “null”을 출력한다.

예시


참고

0개의 댓글