Java 11
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.
- java.xml.ws
- java.xml.bind
- java.activation
- java.xml.ws.annotation
- java.corba
- java.transaction
- java.se.ee
- jdk.xml.ws
- 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.