如题

解决方案 »

  1.   

    问题是这样的

    public class Test {
    public static void main(String[] argv){
    String s1="123";
    String s2="12";
    System.out.println(s1.contains(s2));

    }
    在jdk 1.5下
    javac -source 1.4 -target 1.4 Test.java
    能编译成功,但生成的class在jdk1.4下运行报错Exception in thread "main" java.lang.NoSuchMethodError: java.lang.String.contain
    s(Ljava/lang/CharSequence;)Z
    at Test.main(Test.java:14)因为String.contains(CharSequence)是在jdk1.5 引入的。现在关键问题是我在编译的时候已经加了-source 1.4 -target 1.4 选项,javac怎么没有起作用,应该报错才对呀。
      

  2.   

    source   表示源文件的版本
    target   表示编译时候的版本
    比喻1.5下的代码需要在1.4下编译“
     javac -source 1.5 target 1.4
      

  3.   

    to  ProvidenceZY :
    .5下的代码需要在1.4下编译,什么意思 ?
    我的例子中 s1.contains(s2);String的 contains方法 就是 1.5引入 的 ,但用
    javac   -source   1.4   -target   1.4   Test.java 
    也能编译通过,但实际上 不能在jdk1.4上运行,那说明-source 1.4 选项 没有把Test类编译成可以在jdk1.4下运行的字节码,即此选项 没有 起作用,可以这样理解吗?
      

  4.   

    我认为你的编译根本没有通过
    1.5的源文件(包含了1.5的新功能)怎么可能使用1.4编译器编译通过呢?你看见的编译通过,可能是由于多次编译,而没有CLEAN之前编译所残留的垃圾文件造成的
    其实根本没有编译通过