Re: Problems with Try/Catch Blocks
Andrew Huntwork <[email protected]>
| Newsgroups | gmane.comp.jakarta.bcel.user |
|---|---|
| Message-ID | <[email protected]> |
Vincent Marquez wrote:
> method name = public static void main(String[] arg0)
> getstatic java.lang.System.out Ljava/io/PrintStream;
> ldc "test"
> invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
> new java/util/ArrayList
> dup
> invokespecial java/util/ArrayList/<init>()V
> astore_1
> goto -> 20
is this right?
try {
> astore_1
> getstatic java.lang.System.out Ljava/io/PrintStream;
> ldc "test test test"
> invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
} catch(...
is this offset 20?
> return
> =======================================================
if i'm right then your problem is...
>
> =============== AFTER ==================================
> method name = public void <init>()
> aload_0
> invokespecial java/lang/Object/<init>()V
> return
> method name = public static java.util.ArrayList getArrList()
> new java/util/ArrayList
> dup
> invokestatic java/util/ArrayList/getArrList()Ljava/util/ArrayList;
> LoadClassType = java.util.ArrayList
> areturn
> method name = public static void main(String[] arg0)
> getstatic java.lang.System.out Ljava/io/PrintStream;
> ldc "test"
> invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
> new java/util/ArrayList
> dup
this dup ^. It leaves an extra object on the stack that will be there
when you get to 20 via the goto -> 20 below but not if you get there via
the exception catch block. the stack in an exception handler is always
just the exception object. everything on the stack at the instruction
that threw the exception gets tossed.
> invokestatic java/util/ArrayList/getArrList()Ljava/util/ArrayList;
> LoadClassType = java.util.ArrayList
> astore_1
> goto -> 20
> astore_1
> getstatic java.lang.System.out Ljava/io/PrintStream;
> ldc "test test test"
> invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
> return
> ====================================================================