Javaバージョンのプロパティ(1.7~13)


Java 7
1. ETC
  • 11.07.07リリース
  • 2.Stringをswitch文パラメータとして許可する
    public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
         String typeOfDay;
         switch (dayOfWeekArg) {
             case "Monday":
                 typeOfDay = "Start of work week";
                 break;
             case "Tuesday":
             case "Wednesday":
             case "Thursday":
                 typeOfDay = "Midweek";
                 break;
             case "Friday":
                 typeOfDay = "End of work week";
                 break;
             case "Saturday":
             case "Sunday":
                 typeOfDay = "Weekend";
                 break;
             default:
                 throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
         }
         return typeOfDay;
    }
    3.数値の間に下線を使用できます
    float pi1 = 3_.1415F;      // Invalid; 
    float pi2 = 3._1415F;      // Invalid; 
    
    long socialSecurityNumber1
      = 999_99_9999_L;         // Invalid; 
    
    int x2 = 5_2;              // OK (decimal literal)
    int x3 = 52_;              // Invalid; 
    int x4 = 5_______2;        // OK (decimal literal)
    
    int x5 = 0_x52;            // Invalid; 
    int x6 = 0x_52;            // Invalid; 
    int x7 = 0x5_2;            // OK (hexadecimal literal)
    int x8 = 0x52_;            // Invalid; 
    
    int x9 = 0_52;             // OK (octal literal)
    int x10 = 05_2;            // OK (octal literal)
    int x11 = 052_;            // Invalid; 
    4.類型推定
    // 7 버전 이전
    List<String> list = new ArrayList<String>();
    
    // 7 버전 이후
    List<String> list = new ArrayList<>();
    Java 8 (LTS)
    1. ETC
  • 42014.03.18リリース
  • CompletableFuture
  • Repeating Annotation
  • 2.Interface Default Method
    interface DefaultInterface {   
       
       public void something();
       
       default void show() {
          ...      
       }
    }
    3. Lambda
    3-1. 既存
    interface Movable {
       void move(String param);
    }
    
    class Car implements Movable {
       @Override
       public void move(String param) {
          ...
       }
    }
    
    Moveable movable = new Movable() {
       @Override
       public void move(String param) {
          ...
       }
    }
    3-2. Lambda式
    下図に示すようにramda式を実現するには抽象的な方法が必要である.@FunctionalInterfaceは抽象メソッドを表し、抽象メソッドが1つでない場合compileエラーが発生します.
    @FunctionalInterface
    interface Moveable {
       void move(String param);
    }
    
    Moveable moveable = (param) -> {
       ...
    }
    
    Moveable moveable = param -> ...;
    4. Optional
    小包null이 될 수도 있는 객체の包装類.
    NullPointerException(NPE)の使用は避けてください.
    methoddescget()はオブジェクトを返します.NoSuchElementExceptionRElse(T other)オブジェクトが空の場合、他の戻りオブジェクトが空の場合にのみElseGet(Supplierother)オブジェクトが呼び出されるため、性能的にはElseThrow(Supplier異常Supplier)オブジェクトよりも優れているか、またはElseThrow(Supplier異常Supplier)
    @Getter
    public class Computer {
       private Speaker speaker;   
    }
    
    @Getter
    public class Speaker {
       private String name;
    }
    
    // computer의 speaker가 null이면 NPE발생
    String speakerName = computer.getSpeaker().getName();
    
    // null 체크
    if(computer != null && computer.getSpeaker() != null ...) {
       ...
    }
    
    // optional
    String speakerName = Optional.ofNullable(computer)
       .map(Computer::getSpeaker)
       .map(Speaker::getName)
       .orElse("none");
    5.複数のDataTimeを追加
    追加されたAPIDescjava.time.LocalDate日付.タイムゾーンXjavaを使用します.time.LocalTime時間タイムゾーンXjavaを使用します.time.LocalDataTime日付と時刻.タイムゾーンXjavaを使用します.time.ZonedDateTime日付と時間.タイムゾーンOjavaを使用します.time.DateTimeFormatterjava.時間のフォーマットjava.time.Duration時間javaを秒/ナノ秒単位で測定した.time.Period時間javaを年/月/日単位で測定します.time.音声チューナーの日付の調整
    5-1. 日付出力
    LocalDate date = LocalDate.now();				// 오늘 날짜
    LocalDate date = LocalDate.of(2021, 12, 23);	// 2021-12-23
    LocalDate date = LocalDate.parse("2021-12-23"); // 2021-12-23
    5-2. 日付の増減
    LocalDateTime datetime = LocalDateTime.of(2021, 12, 23, 0, 0, 0);
    datetime.plusMonths(1);
    datetime.plusWeeks(1);
    datetime.plusDays(1);
    datetime.plusHours(1);
    datetime.minusMinutes(1);
    6.永続領域の削除(さらに学習が必要)
    Perament Heap領域を削除し、Metasapce Native Memory領域を追加しました.
    6-1. Permanent Generation
  • Heapゾーン(JVM管理)
  • クラスメタデータ(クラス名、作成情報、フィールド情報、メソッド情報等)の格納位置
  • .
  • サイズが限られており、メモリ漏れ(?)なったみたい?!
  • 6-2. Metaspace
  • オリジナルメモリ(オペレーティングシステムによって管理)
  • サイズ自動増加
  • 7. Stream API
    collection、arrayなどの要素を1つずつ参照し、処理を繰り返すことで3つのステップを完了します.
    1.フローの作成
    2.ストリーム仲介演算(変換、加工)
    3.ストリーム最終演算
    ブローカ演算Descfilterが指定した条件を満たす要素のみが新しいストリームを返し、新しいストリームは明らかに重複する要素を除去します.内部でequals()がmapを使用して特定の値に変換されたFlatMapStream要素が配列されている場合、各要素は関数として渡され、戻り値からなる新しいstreamはlimitを返して最初の要素から始まり、n個の新しいstreamからskipを返して最初の要素から始まり、n個の新しいstreamを除いてソート、、、
    List<Integer> list = Arrays.asList(1, 2, 3, 3, 4, 4);
    Stream<Integer> stream = list.stream().distinct(); // 1, 2, 3, 4
    Stream<Integer> stream = list.stream().filter(num -> num % 2 == 0); // 2, 4, 4
    
    List<String> list = Arrays.asList("Java", "Kotlin", "Scala");
    Stream<Integer> stream = list.stream().map(String::length); // 4, 6, 5
    Stream<String> stream = list.stream().map(String::upperCase); // JAVA, KOTLIN, SCALA
    
    List<String> list = Arrays.asList("Java", "C", "Python");
    list.stream().sorted().collect(Collectors.toList());
    list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
    Java 9
    1. ETC
  • 72017.09.21リリース
  • G 1 GCアプリケーション
  • Jshell
  • を追加
    2. Jigsaw
    GradleやMavenのようなモジュールシステムでは、アプリケーションが必要なモジュールしか指定できません.
    3.インタフェース内のプライベートメソッドが利用可能
    public interface Interface {
       private void method() {
          ...
       }
       private static void method() {
          ...
       }
    }
    Java 10
    1. ETC
  • 22018.0.3.20リリース
  • GGインタフェースは
  • に導入する.
  • トップクラス認証機関CAの基本キット
  • 2.varの追加
    タイプ推論変数.コンパイラタイプ推論
    var list = new ArrayList<String>();   // ArrayList<String>
    var numbers = List.of(1, 2, 3, 4, 5); // List<Integer>
    3. Parallel Full GC for G1
    Java 9のConcurrent CollectorはパラレルCollectorの完全GCよりも速度が遅い.
    そこで、Java 10から、シングルスレッドベースのfull gcをパラレルfull gcに変更する
    4. Thread-Local Handshakes
    GC操作によるstop-the-world(GC thread 외 모든 thread가 멈춤).
    すべてのスレッドを同時に停止せずに個別に停止できます.
    Java 11 (LTS)
    1. ETC
  • 22018.09.25リリース
  • Oracle JDK固有機能は、OpenJDKバージョン(完全に同じことを示す)
  • に移植できます.
  • Stringメソッドの追加
  • strip():文字列の前後のスペース
  • を削除
  • stripleading():文字列の前のスペースを削除する
  • striptTraling():文字列の後ろのスペースを削除する
  • isBlank()
  • repeat(n):指定された数の追加文字列で
  • を返します.
  • HTTP Client
  • Lambda Local variable
  • 2. ZGC
    一時停止時間は10ミリ秒を超えない.大量のメモリを低遅延で処理
    3. Epsilon Grabage Collector
    遅延コストを削減することを目的としています
    Java 12
    1. ETC
  • 9.03.19リリース
  • GC改善-->
  • 改善点について
    2.スイッチドアの改善
    switch(day) {
       case MONDAY:
       case FRIDAY:
       case SUNDAY:
          System.out.println(6);
          break;
       case TUESDAY:
          System.out.println(7);
          break;
       case THURSDAY:
       case SATURDAY:
          System.out.println(8);
          break;
       case WEDNESDAY:
          System.out.println(9);
          break;
    }
    switch (day) {
       case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
       case TUESDAY                -> System.out.println(7);
       case THURSDAY, SATURDAY     -> System.out.println(8);
       case WEDNESDAY              -> System.out.println(9);
    }
    JDK 13
    1. ETC
  • 9.09.09.17リリース
  • スイッチ生産量保留語
  • を増加
    2. Text block
    を選択します.
    String str = """
       This
       is
       text block
    """;
    References
  • https://blogs.oracle.com/javakr/post/java8-16
  • https://en.wikipedia.org/wiki/Java_version_history
  • https://marrrang.tistory.com/16
  • Java 1.7
  • https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
  • Java 1.8
  • https://marrrang.tistory.com/36?category=891912
  • https://multifrontgarden.tistory.com/124
  • https://www.daleseo.com/java8-optional-after/
  • http://jmlim.github.io/java/2018/12/13/java8-datetime-example/
  • https://code-overflow.tistory.com/95
  • https://ahndding.tistory.com/23
  • https://gre-eny.tistory.com/192
  • Java 9
  • https://www.popit.kr/%EB%82%98%EB%A7%8C-%EB%AA%A8%EB%A5%B4%EA%B3%A0-%EC%9E%88%EB%8D%98-java9-%EB%B9%A0%EB%A5%B4%EA%B2%8C-%EB%B3%B4%EA%B8%B0/
  • https://greatkim91.tistory.com/197
  • Java 10
  • https://itstory.tk/entry/Java-10-%EC%8B%A0%EA%B7%9C-%EA%B8%B0%EB%8A%A5%ED%8A%B9%EC%A7%95-%EC%A0%95%EB%A6%AC
  • https://dreamchaser3.tistory.com/3
  • Java 11
  • https://readystory.tistory.com/48
  • Java 13
  • https://parkcheolu.tistory.com/176