反编译那些事儿(三)—那些看似没用到的全局变量和那些使用了动态参数的方法

说明:下面的反编译结果使用“http://download.csdn.net/detail/wangshuxuncom/6841823”处的反编译工具反编译的。


一、那些看似没用到的全局变量


java源码:

public class Test{

          private static final String TEST = "ceshi";

          public String getValue() {
                      return TEST;
          }

          public static void main(String[] args) {
                      System.out.println(new Test().getValue());
          }
}


class文件反编译后的代码:

import java.io.PrintStream;

public class Test
{

           public Test()
            {
            }

           public String getValue()
           {
                       return "ceshi";
           }

           public static void main(String args[])
          {
                      System.out.println((new Test()).getValue());
           }

           private static final String TEST = "ceshi";
}


总结:反编译后的代码中会发现TEST全局变量没有用了,可是源代码中是有用的,这是怎么回事儿呢?这时请关注使用了该全局变量的地方,比较编译前和编译后的java脚本就会看出里面的猫腻。


二、那些使用了动态参数的方法


java源码:

public class Test {

          public void getValue(String... values) {
                      for (int i = 0; i < values.length; i++) {
                                System.out.println(values[i]);
                      }
          }

         public static void main(String[] args) {
                     new Test().getValue("ceshi1","ceshi2");
         }
}


class文件反编译后的代码:

import java.io.PrintStream;

public class Test
{

         public Test()
         {
         }

        public transient void getValue(String values[])
        {
                   for(int i = 0; i < values.length; i++)
                            System.out.println(values[i]);

        }

       public static void main(String args[])
       {
                 (new Test()).getValue(new String[] {"ceshi1", "ceshi2"});
       }
}

总结:①、getValue方法添加了transient关键字修饰;

            ②、动态参数变为了数组;

你可能感兴趣的:(Java)