Java 13

Paylaş

Java 13 ile birlikte gelen Text Blocks, yeni formatted, stripIndent, translateEscapes metotları ve bazı özellikler ile ilgili bilgiler ve kullanımı yer alıyor.

Text Blocks – JEP 355

JSON Nedir? yazısında yer alan JSON verisini Java String ile yazmaya çalışalım.

{"kisiler": [
    { "sira": "1", "adi": "Yusuf", "soyadi": "Sezer" },
    { "sira": "2", "adi": "Ramazan", "soyadi": "Sezer" },
    { "sira": "3", "adi": "Sinan", "soyadi": "Sezer" },
    { "sira": "4", "adi": "Mehmet", "soyadi": "Sezer" }
]}

JSON ifadesini String birleştirme ile yazmak istediğimizde aşağıdaki gibi karmaşık durum ortaya çıkmaktadır.

public class App {

    public static void main(String[] args) {

        var jsonStr ="{\"kisiler\": [\n" + 
                "    { \"sira\": \"1\", \"adi\": \"Yusuf\", \"soyadi\": \"Sezer\" },\n" + 
                "    { \"sira\": \"2\", \"adi\": \"Ramazan\", \"soyadi\": \"Sezer\" },\n" + 
                "    { \"sira\": \"3\", \"adi\": \"Sinan\", \"soyadi\": \"Sezer\" },\n" + 
                "    { \"sira\": \"4\", \"adi\": \"Mehmet\", \"soyadi\": \"Sezer\" }\n" + 
                "]}\n";
        System.out.println(jsonStr);
        System.out.println(jsonStr.lines().count());

    }
}

İfadeyi Java 13 ile gelen Text Blocks yazalım.

public class App {

    public static void main(String[] args) {

        var jsonStr ="""
                      {"kisiler": [
                          { "sira": "1", "adi": "Yusuf", "soyadi": "Sezer" },
                          { "sira": "2", "adi": "Ramazan", "soyadi": "Sezer" },
                          { "sira": "3", "adi": "Sinan", "soyadi": "Sezer" },
                          { "sira": "4", "adi": "Mehmet", "soyadi": "Sezer" }
                      ]}
                      """;
        System.out.println(jsonStr);
        System.out.println(jsonStr.lines().count());

    }
}

Text Blocks özelliği ile karmaşıklık daha da azalmıştır.

String

Text Blocks ile birlikte String sınıfına formatted, stripIndent, translateEscapes metotları eklenmiştir.

formatted – String ifadeyi formatlamak için kullanılır.

public class App {

    public static void main(String[] args) {

        var jsonStr = """
                        "adi": %s
                        "soyadi": %s
                      """;
        var newJson = jsonStr.formatted("Yusuf", "Sezer");
        System.out.println(newJson);
        System.out.printf(jsonStr, "Yusuf", "Sezer");

    }
}

stripIndent – String ifadesindeki girintiyi düzeltmek için kullanılır.

public class App {

    public static void main(String[] args) {

        var jsonStr = "{\"kisiler\": [   \n"
                + "    { \"sira\": \"1\", \"adi\": \"Yusuf\", \"soyadi\": \"Sezer\" },   \n"
                + "    { \"sira\": \"2\", \"adi\": \"Ramazan\", \"soyadi\": \"Sezer\" },   \n"
                + "    { \"sira\": \"3\", \"adi\": \"Sinan\", \"soyadi\": \"Sezer\" },   \n"
                + "    { \"sira\": \"4\", \"adi\": \"Mehmet\", \"soyadi\": \"Sezer\" }   \n"
                + "]}\n";
        System.out.println(jsonStr.length());
        System.out.println(jsonStr.strip().length());
        System.out.println(jsonStr.stripIndent().length());

    }
}

translateEscapes – String ifadesindeki özel karakterleri işler.

public class App {

    public static void main(String[] args) {

        var msg = "Yusuf\\tSefa\\nSezer";
        System.out.println(msg);
        System.out.println(msg.translateEscapes());

    }
}

Switch Expressions Enhancements – JEP 354

Switch ifadesine yield anahtar kelimesi kullanımı eklenmiştir.

public class App {

    public static void main(String[] args) {

        String hangiCeyrek = switch (LocalDate.now().getMonth()) {
            case JANUARY, FEBRUARY, MARCH:
                yield "İlk çeyrek";
            case APRIL, MAY, JUNE:
                yield "ikinci çeyrek";
            case JULY, AUGUST, SEPTEMBER:
                yield "üçüncü çeyrek";
            case OCTOBER, NOVEMBER, DECEMBER:
                yield "son çeyrek";
            default:
                yield "bilinmeyen çeyrek";
        };
        System.out.println(hangiCeyrek);

    }
}

Reimplement the Legacy Socket API – JEP 353

Eski Java Socket API sınıfları eş zamanlılık, NIO gibi özellikleri içerecek şekilde düzenlendi.

Dynamic CDS Archive – JEP 350

Java 10 ile gelen ve Java sınıflarının paylaşımı ve arşivlenmesine olanak sağlayan Dynamic CDS Archive özelliğini kullanımı kolay hale gelmiştir.

java -XX:ArchiveClassesAtExit=my_app_cds.jsa -cp my_app.jar
java -XX:SharedArchiveFile=my_app_cds.jsa -cp my_app.jar

ZGC: Uncommit Unused Memory – JEP 351

Java 11 ile gelen ZGC çöp toplayıcının kullanılmayan belleği sisteme geri iade etmesi Java 13 ile birlikte kısaltılmıştır.

FileSystems

Sınıfa aşağıdaki metotlar eklenmiştir.

  • newFileSystem(Path)
  • newFileSystem(Path, Map<String, ?>)
  • newFileSystem(Path, Map<String, ?>, ClassLoader)

DOM and SAX Factories with Namespace Support

Sınıfa aşağıdaki metotlar eklenmiştir.

  • newDefaultNSInstance()
  • newNSInstance()
  • newNSInstance(String factoryClassName, ClassLoader classLoader)

DOM ve SAX işlemlerinde NameSpace kullanımı daha kolay hale gelmiştir.

//java 13 sonrası
DocumentBuilder db = DocumentBuilderFactory.newDefaultNSInstance().newDocumentBuilder();
// java 13 öncesi
DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();

Diğer

Java 13 sürümündeki en önemli özellik Text Block ile uzun String ifadelerinin daha anlaşılabilir olması sağlanmıştır.

Önceki sürümlere göre daha az özelliğin eklendiği bir sürüm olmuştur.

Java Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.


Bunlarda ilgini çekebilir


LinkedIn grubuna buradan katılın.