10 Eylül 2018 Pazartesi

Main Metodu

Giriş
Java uygulamaları main metodu olmadan çalışmaz.

1. Java 21 JEP 445 - Flexible Launch Protocol
main metodu şöyle olabilecek
class MyAwesomeApp {
  void main() {
    // Awesome code goes here
  }
}
Açıklaması şöyle
- No visibility modifier is needed for the class declaration
- main method lookup mechanic, searching for the first available entry point of:
1. Any non-private static void main(String... args) method
2. Any non-private static void main() method
3. A void main(String...) method
4. A void main() method

2. Daha Eski Java Sürümleri 

2.1 Metodun Özellikleri
JVM imzası aşağıdaki gibi olan bir metod ister.
public static void main(String[] args)
Aynı imzayı şöyle de gösterebiliriz.
public static main([Ljava/lang/String;)V
main metodu şu özelliklere sahip olmalıdır.
  • public olmalı
  • ismi main 
  • static olmalı
  • dönüş tipi void
  • tek parametre olarak String dizisi almalı
Java'da main metodu void dönmelidir. Açıklaması şöyle.
The method main must be declared publicstatic, and void. It must accept a single argument that is an array of strings.
Çünkü main metodu çıksa bile JVM çalışmaya devam edebilir. Bu durumda main'in ne döndürdüğünün zaten önemi kalmaz.

Örnek
Şu kod derlenir.
public static <T extends String> void main(T[] args) {
    System.out.println("Hello World!");
}
Şöyle derlenir.
public static <T extends String & AutoCloseable> void main(T[] args) {
    System.out.println("This still works!");
}
2.2 args null değildir
arg parametre verilmese bile null değildir. Parametre verilmemişse uzunluğu 0 olan bir dizi alırız.
public static void main(String[] args){
  if(args.length == 0){
    //there is no command line input, but args still exists
  }
}
2.3 main İsimli Identifier
main ne keyword (anahtar kelime) ne de identifier olarak kabul edilir.
Örnek
Şu kod derlenir.
public class J {
  public static void main(String[] args)
  {
    String main = "The character sequence \"main\" is an identifier, not a keyword or
     reserved word.";
    System.out.println(main);
  }
}
Çıktı olarak şunu alırız.
The character sequence "main" is an identifier, not a keyword or reserved word.

1 yorum: