java反编译 第二部分、异常

java反编译 第二部分、异常

第二部分、异常

    下面的代码前提是类中有如下属性, Calendar cal = Calendar.getInstance();。

      1、Exceptioin的还原      反编译后的代码如下:

view plaincopy to clipboardprint?
public boolean f1()

{

      return cal.getTime().after(new Date());

      Exception e;

      e;

      e.printStackTrace();

      return false;

}
还原后的Java代码
view plaincopy to clipboardprint?
public boolean f1()

{

      try

      {

              return cal.getTime().after(new Date());

      }

      catch (Exception e)

      {

              e.printStackTrace();

              return false;

      }

}
2、finally代码的还原 反编译后的Java代码如下:
view plaincopy to clipboardprint?
public boolean f2()

{

      boolean flag = cal.getTime().after(new Date());

      System.out.println("finally");

      return flag;

      Exception e;

      e;

      e.printStackTrace();

      System.out.println("finally");

      return false;   
      Exception exception;   
      exception;   
      System.out.println("finally");   
      throw exception;   
}
还原后的代码如下:
view plaincopy to clipboardprint?
public boolean f2()

{   
      try   
      {   
              return cal.getTime().after(new Date());   
      }   
      catch (Exception e)   
      {   
              e.printStackTrace();   
              return false;   
      }   
      finally   
      {   
              System.out.println("finally");   
      }   
}
3、 MISSING_BLOCK_LABEL_的还原反编译后的代码
view plaincopy to clipboardprint?
public Object f22()   
{   
      Date date = cal.getTime();   
      System.out.println("finally");   
      return date;   
      Exception e;   
      e;   
      e.printStackTrace();   
      System.out.println("finally");   
      break MISSING_BLOCK_LABEL_45;   
      Exception exception;   
      exception;   
      System.out.println("finally");   
      throw exception;   
      return null;   
}
还原后的Java代码
view plaincopy to clipboardprint?
public Object f22()   
{   
      try   
      {   
              return cal.getTime();   
      }   
      catch (Exception e)   
      {   
              e.printStackTrace();   
      }   
      finally   
      {   
              System.out.println("finally");   
      }   
      return null;   
}
4、异常中:label的还原反编译后的代码
view plaincopy to clipboardprint?
public String f4()   
      throws Exception   
{   
l0:   
      {   
              try   
              {   
                      Integer i = new Integer(1);   
                      if(i.intValue() > 0)   
                      {   
                              System.out.println(i);   
                              break label0;   
                      }   
                      System.err.println(i);   
              }   
              catch(Exception dae)   
              {   
                      System.err.println(dae);   
                      throw new RuntimeException(dae);   
              }   
              return null;   
      }   
      return "Hello";   
}
注意,这个代码有点诡异,实际代码如下:
view plaincopy to clipboardprint?
public String f4() throws Exception   
{   
      try   
      {   
              Integer i = new Integer(1);   
              if (i.intValue() > 0)   
              {   
                      System.out.println(i);   
              }   
              else   
              {   
                      System.err.println(i);   
                      return null;   
              }   
              return "Hello";   
      }   
      catch (Exception dae)   
      {   
              System.err.println(dae);   
              throw new RuntimeException(dae);   
      }   
}
5、典型数据库操作代码还原 反编译后代码
view plaincopy to clipboardprint?
public HashMap f5()   
{   
      Connection conn = null;   
      HashMap hashmap;   
      HashMap map = new HashMap();   
      Class.forName("");   
      conn = DriverManager.getConnection("jdbc:odbc:");   
      PreparedStatement pstmt = conn.prepareStatement("select * from table");   
      pstmt.setString(1, "param");   
      String columnVallue;   
      for(ResultSet rs = pstmt.executeQuery(); rs.next(); map.put(columnVallue, ""))   
              columnVallue = rs.getString("column");   
      hashmap = map;   
      if(conn != null)   
              try   
              {   
                      conn.close();   
              }   
              catch(SQLException sqlce)   
              {   
                      sqlce.printStackTrace();   
              }   
      return hashmap;   
      ClassNotFoundException cnfe;   
      cnfe;   
      cnfe.printStackTrace();   
      if(conn != null)   
              try   
              {   
                      conn.close();   
              }   
              catch(SQLException sqlce)   
              {   
                      sqlce.printStackTrace();   
              }   
      break MISSING_BLOCK_LABEL_188;   
      SQLException sqle;   
      sqle;   
      sqle.printStackTrace();   
      if(conn != null)   
              try

              {   
                      conn.close();   
              }   
              catch(SQLException sqlce)   
              {   
                      sqlce.printStackTrace();   
              }   
      break MISSING_BLOCK_LABEL_188;   
      Exception exception;   
      exception;   
      if(conn != null)   
              try   
              {   
                      conn.close();   
              }   
                catch(SQLException sqlce)   
              {   
                      sqlce.printStackTrace();   
              }   
      throw exception;   
      return null;   
}
实际代码如下:
view plaincopy to clipboardprint?
public HashMap f5()   
{   
      Connection conn = null;   
      try   
      {   
              HashMap map = new HashMap();   
              Class.forName("");   
              conn = DriverManager.getConnection("jdbc:odbc:");   
              PreparedStatement pstmt = conn.prepareStatement("select * from table");   
              pstmt.setString(1, "param");   
              ResultSet rs = pstmt.executeQuery();   
              while (rs.next())   
              {   
                      String columnVallue = rs.getString("column");   
                      map.put(columnVallue, "");   
              }   
              return map;   
      }   
      catch (ClassNotFoundException cnfe)   
      {   
              cnfe.printStackTrace();   
      }   
      catch (SQLException sqle)   
      {   
              sqle.printStackTrace();   
      }   
      finally   
      {   
              if (conn != null)   
              {   
                      try   
                      {   
                                conn.close();   
                      }   
                      catch (SQLException sqlce)   
                      {   
                                sqlce.printStackTrace();   
                      }   
              }   
      }   
      return null;   
}
6、两层异常嵌套代码还原 反编译后的代码
view plaincopy to clipboardprint?
public int f6()   
{   
      int i = cal.getTime().compareTo(new Date());   
      System.out.println("finally");   
      return i;   
      Exception e1;   
      e1;   
      e1.printStackTrace();   
      System.out.println("finally");   
      return -1;   
      Exception e2;   
      e2;   
      e2.printStackTrace();   
      System.out.println("finally");   
      return -2;   
      Exception exception;   
      exception;   
      System.out.println("finally");   
      throw exception;   
}
实际代码
view plaincopy to clipboardprint?
public int f6()   
{   
      try   
      {   
              try   
              {   
                        return cal.getTime().compareTo(new Date());   
              }   
              catch (Exception e1)   
              {   
                      e1.printStackTrace();   
                      return -1;   
              }   
      }   
      catch (Exception e2)   
      {   
              e2.printStackTrace();   
              return -2;   
      }   
        finally   
      {   
              System.out.println("finally");   
      }   
}
7、非常诡异的代码 反编译后的代码
view plaincopy to clipboardprint?
      public int f7()   
      {   
              int i = cal.getTime().compareTo(new Date());   
              System.out.println("finally");   
              return i;   
              Exception e1;   
              e1;   
              e1.printStackTrace();   
_L2:   
              System.out.println("finally");   
              return -1;   
              Exception e2;   
              e2;   
              e2.printStackTrace();   
              if(true) goto _L2; else goto _L1   
_L1:   
              Exception exception;   
              exception;   
              System.out.println("finally");   
              throw exception;   
      }
原始代码
view plaincopy to clipboardprint?
public int f7()   
{   
      try   
      {   
              try   
              {   
                      return cal.getTime().compareTo(new Date());   
              }   
              catch (Exception e1)   
              {   
                        e1.printStackTrace();   
                      return -1;   
              }   
      }   
      catch (Exception e2)   
      {   
              e2.printStackTrace();   
              return -1;   
          }   
      finally   
      {   
              System.out.println("finally");   
      }   
}
 
转载自: http://blog.sina.com.cn/s/blog_637607ec0101236k.html

你可能感兴趣的:(java,异常,反编译)