2014-05-07 20 views
5

Kabuk komut isteminde, javac -help yazıyorsa, -implicit seçeneğinin "örtük olarak referans verilen dosyalar için sınıf dosyaları oluşturup oluşturmayacağına" karar verdiğini belirtir. -implicit:none veya class ile iki seçenek vardır.Birisi javac'ın -implicit seçeneğinin nasıl çalıştığı hakkında bir örnek verebilir mi?

İlk olarak, -implicit:none kullanımı ile - implicit seçeneğini kullanma arasındaki fark nedir? İkincisi, soru başlığım ile ilgili olarak, verilen bir örnekte, zımnen atıfta bulunulan bir dosyanın ne olduğunu anlamamda bana yardımcı olacağını umuyordum. Çok teşekkürler.

cevap

5

Java documentation numaralı belgede oldukça iyi tanımlanmış var.

İlk sorunuzun cevabı oldukça basit. -implicit seçeneği kullanmamak neredeyse (seçeneğin varsayılan değer olan) -implicit:class kullanmak gibidir, ancak açıkça seçeneğini kullanarak belirli uyarıyı bastırmak: derleyici bir tür bilgi ihtiyacını keşfedemeyeceğimiz

ek açıklama işlemi tamamlanana kadar. Bir kaynak dosyada tür bilgisi bulunduğunda ve -implicit seçeneği belirtilmemişse, derleyici, dosyanın ek açıklama işlemine tabi tutularak olmadan derlendiğine dair bir uyarı verir. Uyarıyı devre dışı bırakmak için, komut satırındaki dosyayı belirtin (böylece ek açıklama işlemine tabi olacak) veya veya sınıf dosyaları bu kaynak dosyaları için oluşturulup oluşturulmayacağını belirtmek için -implicit seçeneğini kullanın.

Şimdi ikinci sorunuz. dokümantasyon belirttiği gibi:

bir kaynak dosyasını derlemek için derleyici genellikle türü hakkında bilgi ihtiyacı var, ama türü tanımı komut satırı üzerinde belirtilen kaynak dosyalarında değil. Derleyici, her bir sınıf için veya kaynak dosyada kullanılan, uzatılan veya uygulanan arabirime ilişkin bilgi gerektirir. Bu , kaynağında açıkça belirtilmeyen sınıfları ve arabirimleri içerir, ancak bu, kalıtım yoluyla bilgi sağlar.

Örneğin

, bir alt sınıf java.applet.Applet oluştururken, aynı zamanda Applet atası sınıflarını kullanarak şunlardır: java.awt.Panel, java.awt.Container, java.awt.Component ve java.lang.Object. Main, ImplicitClass, BaseImplicitClass:

üç dosyalarında üç sınıf atalım.

Main.java:

public class Main { 
    public static void main(String[] args) { 
     ImplicitClass ec = new ImplicitClass(); 
     System.out.println(ec.getClass()); 
    } 
} 

ImplicitClass.java:

public class ImplicitClass extends BaseImplicitClass { 
} 

BaseImplicitClass.java:

public class BaseImplicitClass { 
} 

böyle komut satırından onları derlemek:

javac -cp . -implicit:class Main.java 

veya

javac -cp . Main.java 

her üç * .class dosyaları oluşturulur.

bunu

javac -cp . -implicit:none Main.java 

sadece Main.class oluşturulur derlerken.

Eğer

javac -cp . -implicit:none Main.java ImplicitClass.java 

iki * .class dosyaları bu sınıf olarak BaseImplicitClass.classMain.class ve ImplicitClass.class (açıkça derleyiciye geçti çünkü ImplicitClass şimdi açık hale gelmiştir), oluşturulur, ancak değildir derlemek zaman gereklidir, ancak örtülüdür.

İlgili konular