Java 11

Paylaş

Java 11 ile birlikte gelen yeni özellikler ve kaldırılan özellikler ile ilgili bilgiler örnekleri ve kullanımı ile yer alıyor.

Launch Single-File Source-Code Programs – JEP 330

Java dosyasınını hızlıca derlemeden çalıştırma özelliği gelmiştir.

java MerhabaJava.java

Local-Variable Syntax for Lambda Parameters – JEP 323

Java 10 ile gelen var ifadesinin kapsamı genişletilerek lambda expressions ile kullanma imkanı gelmiştir.

public class App {

    public static void main(String[] args) {
        IntStream.of(1, 2, 3, 5, 6, 7)
                .filter((var i) -> i % 3 == 0)
                .forEach(System.out::println);
    }

}

Ayrıca final anahtar kelimesi ile birlikte kullanılabilmektedir.

Nest-Based Access Control – JEP 181

Sınıf içerisinde yer alan alt sınıfların derlenmesinde değişiklik yapılarak nest olarak adlandırılan bir yapı kurulmuştur.

public class App {

    public static void main(String[] args) {
        Alt.yazdir();
    }

    static class Alt {
        private static void yazdir() {
            System.out.println("Yusuf Sezer");
        }
    }

}

Yukarıdaki kodlar derlenip javap aracı ile incelendiğinde NestMembers, NestHost alanları görünecektir.

HTTP Client (Standard) – JEP 321

Java 9 ile birlikte gelen HTTP/2 Client Java 11 ile standart olarak java.net.http paketinde gelmektedir.

public class App {

    public static void main(String[] args) throws IOException, InterruptedException {

        HttpClient httpClient = HttpClient.newHttpClient();
        HttpRequest httpRequest = HttpRequest
                .newBuilder()
                .uri(URI.create("https://www.yusufsezer.com/"))
                .GET()
                .build();

        HttpResponse response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());

    }

}

Standart paketi kullanmak için java.net.http; modülünün module-info.java dosyasına eklenmesi gerekir.

Remove the Java EE and CORBA Modules – JEP 320

Java 9 ile deprecated olarak işaretlenen ve Java SE paketi içerisinde yer alan Java EE ile CORBA modülleri kaldırılmıştır.

Kaldırılan paketler aşağıda yer almaktadır.

  1. java.xml.ws
  2. java.xml.bind
  3. java.activation
  4. java.xml.ws.annotation
  5. java.corba
  6. java.transaction
  7. java.se.ee
  8. jdk.xml.ws
  9. jdk.xml.bind

Java 11 ile birlikte XML işlemleri için JAXB paketinin JAR veya Maven olarak bağımlılık olarak eklenmesi gerekmektedir.

String Methods

String işlemlerini kolaylaştırmak için yeni metotlar eklenmiştir.

strip, stripLeading, stripTrailing – trim metodundan farkı Unicode desteğinin olmasıdır.

public class App {

    public static void main(String[] args) {

        var myName = "   Yusuf Sezer  ";
        System.out.println(myName.strip().length());
        var myName2 = "   Yusuf Sezer  ";
        System.out.println(myName2.stripLeading().length());
        System.out.println(myName2.stripTrailing().length());

    }

}

isBlank – String ifadesindeki Unicode boşluk değerine göre kontrol eder.

public class App {

    public static void main(String[] args) {

        var myName = " \u205F ";
        System.out.println(myName.isBlank());  // içeriğe bakar
        System.out.println(myName.isEmpty());  // uzunluğa bakar

    }

}

lines – String ifadesindeki satır sonlandırıcına göre Stream API değeri verir.

public class App {

    public static void main(String[] args) {

        var myName = "Yusuf\nSefa\nSezer\r\n\ry";
        System.out.println(myName.lines().count());

    }

}

repeat – String ifadesini parametre değeri kadar tekrar eder.

public class App {

    public static void main(String[] args) {

        var myName = "Yusuf Sezer\n";
        System.out.println(myName.repeat(3));

    }

}

Collection

Koleksiyonları dizilere çevirmek için toArray(IntFunction) metodu eklenmiştir.

public class App {

    public static void main(String[] args) {

        String[] myNames = List
                .of("Yusuf", "Sefa", "Sezer")
                .toArray(String[]::new);
        System.out.println(myNames.length);

    }

}

Files

Dosya okuma ve yazma işlemlerini hızlıca yapmak için readString, writeString metotları eklenmiştir.

public class App {

    public static void main(String[] args) throws IOException {

        // writeString
        Path tempFile = Files.writeString(Files.createTempFile("test", ".txt"), "Yusuf Sezer");
        System.out.println(tempFile);

        // readString
        String fileContent = Files.readString(tempFile);
        System.out.println(fileContent);

    }

}

Path

Dosya/Dizin yolunu ifade etmek için kullanılan Path arayüzüne of metotları eklenmiştir.

public class App {

    public static void main(String[] args) throws IOException {

        // of(string)
        Path pathString = Path.of("C:", "temp", "test.txt");
        System.out.println(pathString);
        System.out.println(Files.exists(pathString));

        // of(uri)
        URI uri = URI.create("file:///C:/temp/test.txt");
        System.out.println(uri);
        Path pathURI = Path.of(uri);
        System.out.println(pathURI);
        System.out.println(Files.exists(pathURI));

    }

}

java.io

Java ile Input/Output işlemlerinde kullanılan java.io paketine yeni nullInputStream, nullOutputStream, nullReader, nullWriter, readNBytes metotları eklenmiştir.

public class App {

    public static void main(String[] args) throws IOException {

        // nullReader
        Reader nullReader = Reader.nullReader();
        System.out.println(nullReader.read());

        // nullWriter
        Writer nullWriter = Writer.nullWriter();
        nullWriter.write("Yusuf Sezer");

    }

}
public class App {

    public static void main(String[] args) throws IOException {

        var stream = new ByteArrayInputStream("Yusuf Sezer".getBytes());
        System.out.println(new String(stream.readNBytes(5)));
        stream.close();

    }

}

FileReader ve FilterWriter sınıflarına yeni kurucu metotlar eklenmiştir.

java.lang.Class

Nest-based yapısına göre derlenen sınıflar ile ilgili detaylı bilgi almak için Class sınıfına getNestHost, getNestMembers, isNestmateOf metotları eklenmiştir.

public class App {

    public static void main(String[] args) {

        Class<?> clazz = App.class;
        System.out.println(clazz.getNestHost().getSimpleName());
        Arrays
                .stream(clazz.getNestMembers())
                .map(Class::getSimpleName)
                .forEach(System.out::println);

    }

    static class Alt {
        private static void yazdir() {
            System.out.println("Yusuf SEZER");
        }
    }

}

Diğer

Java 11 ile geliştiricilerin işini kolaylaştıracak yeni metotlar eklemiş ve xml, corba gibi özellikler çıkarılmıştır.

Oracle JDK açık kaynak/ücretsiz sürüm ve Flight Recorder desteğini kaldırmıştır

Docker, Kubernetes gibi bulut tabanlı ortamlarda işlemleri hızlandırmak için JEP 309 Dynamic Class-File Constants, JEP 318 Epsilon: A No-Op Garbage Collector, JEP 315 Improve Aarch64 Intrinsics, JEP 333 ZGC: A Scalable Low-Latency Garbage Collector (Experimental) gibi alt yapısal düzenlemeler yapılmıştır.

Java Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.


Bunlarda ilgini çekebilir


LinkedIn grubuna buradan katılın.