title: Choose and test java decompiler
body: <p>Now I'm trying to find the best java decompiler, I found these:</p>
  
  <ul>
  <li><a href="http://java.decompiler.free.fr/" rel="noreferrer">http://java.decompiler.free.fr/</a></li>
  <li><a href="http://www.reversed-java.com/fernflower/" rel="noreferrer">http://www.reversed-java.com/fernflower/</a></li>
  <li><a href="http://dj.navexpress.com/" rel="noreferrer">http://dj.navexpress.com/</a></li>
  <li><a href="http://cavaj-java-decompiler.en.softonic.com/" rel="noreferrer">http://cavaj-java-decompiler.en.softonic.com/</a></li>
  </ul>
  
  <p>With these decompilers I handle byte code of this class:</p>
  
  <pre><code>public class ss
  {
  public static void main(String args[])
  {
    try{
     System.out.println("try");
  
    }
    catch(Exception e)
    {
     System.out.println("catch");
    }
    finally
    {System.out.println("finally");}
  }
  }
  </code></pre>
  
  <p>and I got the following results:</p>
  
  <p><strong>fernflower:</strong></p>
  
  <pre><code>public class ss {
  
     public static void main(String[] var0) {
        try {
           System.out.println("try");
        } catch (Exception var5) {
           System.out.println("catch");
        } finally {
           System.out.println("finally");
        }
  
     }
  }
  </code></pre>
  
  <p><strong>DJ Java Decompiler:</strong></p>
  
  <pre><code>import java.io.PrintStream;
  
  public class ss
  {
  
      public ss()
      {
      }
  
      public static void main(String args[])
      {
          System.out.println("try");
          System.out.println("finally");
          break MISSING_BLOCK_LABEL_50;
          Exception exception;
          exception;
          System.out.println("catch");
          System.out.println("finally");
          break MISSING_BLOCK_LABEL_50;
          Exception exception1;
          exception1;
          System.out.println("finally");
          throw exception1;
      }
  }
  </code></pre>
  
  <p><strong>cavaj:</strong></p>
  
  <pre><code>import java.io.PrintStream;
  
  public class ss
  {
  
      public ss()
      {
      }
  
      public static void main(String args[])
      {
          System.out.println("try");
          System.out.println("finally");
          break MISSING_BLOCK_LABEL_50;
          Exception exception;
          exception;
          System.out.println("catch");
          System.out.println("finally");
          break MISSING_BLOCK_LABEL_50;
          Exception exception1;
          exception1;
          System.out.println("finally");
          throw exception1;
      }
  }
  </code></pre>
  
  <p><strong><a href="http://java.decompiler.free.fr/" rel="noreferrer">http://java.decompiler.free.fr/</a>:</strong></p>
  
  <pre><code>import java.io.PrintStream;
  public class ss
  {
    public static void main(String[] paramArrayOfString)
    {
      try
      {
        System.out.println("try");
      }
      catch (Exception localException)
      {
        System.out.println("catch");
      }
      finally {
        System.out.println("finally");
      }
    }
  }
  </code></pre>
  
  <p>I see that the best result in decompiler: <a href="http://java.decompiler.free.fr/" rel="noreferrer">http://java.decompiler.free.fr/</a></p>
  
  <p>To test, I wrote very simple code. What do you think, what code to write to test decompilers? Maybe the idea is to better than a try{} catch(){} finally{}?</p>