2009-06-10 36 views

Trả lời

43

jar tf sẽ liệt kê nội dung cho bạn. javap sẽ cho phép bạn xem thêm chi tiết về các lớp học (xem hướng dẫn công cụ).

Ví dụ nếu bạn có một lớp có tên mypkg.HelloWorld trong một cái lọ myjar.jar sau đó chạy nó như

javap -classpath myjar.jar mypkg.HelloWorld 

Tuy nhiên, bạn có chắc bạn muốn được sử dụng các API này chưa được công bố? Nó thường là một ý tưởng thực sự tồi tệ.

3

Nếu bạn đang sử dụng nhật thực, bạn chỉ có thể thêm nó vào đường dẫn lớp của dự án và khám phá nó bằng cách sử dụng treeview và/hoặc hỗ trợ nội dung.

Tôi cho rằng các IDE khác có thể hoạt động tương tự.

Từ quan điểm dòng lệnh, bạn có thể mở nó (jar xf foo.jar) và sử dụng javap đối với tất cả các tệp.

5

Như Scott đã nói, bạn có thể sử dụng Eclipse để nhận được nhiều thứ bạn đang tìm kiếm.

Tôi khuyên bạn nên lấy JadClipse plugin, nó sẽ dịch ngược các tệp .class một cách nhanh chóng và hiển thị cho bạn mã Java thực khi bạn duyệt các lớp trong IDE.

+0

Đồng ý. Một sự kết hợp rất mạnh mẽ. –

1
  • Eclipse sẽ làm việc lớn

  • Một Java Decompiler sẽ dịch các lớp học trở lại vào một số semblence mã nguồn mà bạn có thể nghiên cứu để tìm hiểu về các lớp học, các phương pháp, chữ ký của họ, và thậm chí có một số cái nhìn sâu sắc thành các giá trị hợp lệ cho một số đối số (ví dụ: không chuyển một giá trị null cho đối số này hoặc bạn sẽ kích hoạt một NullPointerException ngay lập tức). Nhưng cuộn lên tay áo của bạn để mở jar và chạy trình biên dịch ngược với tất cả các tệp lớp. Đây thực chất là những gì Eclipse đang làm cho văn bản trợ giúp với các lớp không có giấy tờ.

  • Cuối cùng, tất nhiên, "real programmer" sẽ đọc trực tiếp số byte-code mà không cần trình giải mã.

2

trợ giúp nhanh để biết các phương thức của lớp bình thường (không phải lớp trừu tượng), tôi làm như sau.

tên lớp mới(). Nhấn ctrl + dấu cách để liệt kê các phương thức trong nhật thực.

0

Sử dụng Eclipse> Trình khám phá gói để xem các lớp và thứ bậc phân cấp.

Content Assist (tính năng tự động hoàn (ctrl + space)) cũng là một trợ giúp tốt, nhưng wouldnt khuyên bạn nên sử dụng một API chưa được công bố

3

Bạn có thể sử dụng thư viện WALA để đọc ra tất cả các phương pháp chữ ký. Tuy nhiên, bạn sẽ cần tải Stub-Code cho Java trước. Chương trình sau đây nên đọc to tất cả chữ ký:

import com.ibm.wala.ipa.cha.ClassHierarchy; 
import com.ibm.wala.ipa.cha.IClassHierarchy; 
import com.ibm.wala.classLoader.IClass; 
import com.ibm.wala.classLoader.IMethod; 
import com.ibm.wala.ipa.callgraph.AnalysisOptions; 
import com.ibm.wala.ipa.callgraph.AnalysisScope; 
import com.ibm.wala.types.ClassLoaderReference; 
import java.util.jar.JarFile; 
import java.io.IOException; 
import com.ibm.wala.ipa.cha.ClassHierarchyException; 

public class methods { 
    public static void main(String[] args) throws IOException, ClassHierarchyException { 
     AnalysisScope scope = AnalysisScope.createJavaAnalysisScope(); 
     scope.addToScope(ClassLoaderReference.Primordial, new JarFile("jSDG-stubs-jre1.5.jar")); 
     scope.addToScope(ClassLoaderReference.Application, new JarFile("myProgram.jar")); 
     IClassHierarchy cha = ClassHierarchy.make(scope); 

     for (IClass cl : cha) { 
      if (cl.getClassLoader().getReference().equals(ClassLoaderReference.Application)) { 
       for (IMethod m : cl.getAllMethods()) { 
        String ac = ""; 
        if (m.isAbstract()) ac = ac + "abstract "; 
        if (m.isClinit()) ac = ac + "clinit "; 
        if (m.isFinal()) ac = ac + "final "; 
        if (m.isInit()) ac = ac + "init "; 
        if (m.isNative()) ac = ac + "native "; 
        if (m.isPrivate()) ac = ac + "private "; 
        if (m.isProtected()) ac = ac + "protected "; 
        if (m.isPublic()) ac = ac + "public "; 
        if (m.isSynchronized()) ac = ac + "synchronized "; 
        System.out.println(ac + m.getSignature()); 
       } 
      } 
     } 
    } 
} 

Nếu bạn sử dụng phiên bản WALA thích hợp từ here thì Dalvik (ví dụ:Ứng dụng Android).

Các vấn đề liên quan