有什么奇怪的,java的字节码中本来就有goto。
所谓java没有goto,是说java的编译器不允许源程序中使用goto,但是编译器处理跳转时,你认为应该怎么做?
看来你没有做过ASM的编程吧,所有结构化的东西在ASM里,就是JE\JNE\JG\JL\JMP这样的跳转指令,也就是goto。
java自己构建了一个平台,它的指令里没有goto,怎么实现跳转!

解决方案 »

  1.   

    有些高人写的代码,编译过以后,你再反编译就会出现goto哈哈
      

  2.   

    是啊
    不要太吃惊。java也是程序,既然是程序,就要执行cpu指令。
    如果没有goto
    他怎么对应汇编的jmp???本元决定一切
    ^@^
      

  3.   

    这是反编译后产生的现象!并不说明它的源代码中有goto语句!反编译器的原理是都差不多,换个反编译器也是一样的。
      

  4.   


    诸位大虾:问题是对此反编译后的 java 文件再进行编译时就会报错,错误就在 goto 处。
    应该如何让它(即反编译后含 goto 的 java 文件)通过编译?
      

  5.   

    goto一般用于while/if语句就可以转换过来,好好看看程序,把它改一改!
      

  6.   

    楼主难道是vb情报局里的那个catcat?呵呵~建议用小颖反编译器~
      

  7.   

    不奇怪
    goto一直是java的关键字,但是目前Sun还没有定义他,也没有相应的jvm指令
      

  8.   

    lkjhgf (catcat) 
    有问题提出还是好的, 说明你很爽快。问题提的很正常啊其实呢,你用IDE的话就知道了。。比如Gel,JCreator,JBuilder,Eclipse甚至Eidtplus编辑java文件就知道了打下goto是不是颜色变了?但是呢,目前 Java 是不使用 goto ,还有const也是,这两个关键字sun jdk目前尚未使用只是保留着。你编译的文件可能不是用sun jdk写的。
      

  9.   

    paulone(雪刃) :我就是用小颖反编译器反编译的。
    名称叫:小颖超级工具系列/java 源代码反编译专家
      

  10.   

    不知道了吧,jdk3.1415926中要用到goto,小颖已经预测到了,所以把她(mm)反编译成goto。便于将来使用。至于sun公司要用goto的理由:未来的人思维活跃,传统的编程方式大大限制了未来程序员的思维,决定用goto这种跳跃式思维方式来培养广大程序员!
      

  11.   

    哈哈,,, rainshow(要学习的那样多,时间却那么的少) 真幽默,,,号称Java版第一幽默大师
    ^@^
      

  12.   


    Leemaasn(我给大家拜早年啦!新春快乐!!!)推荐一个吧
     
      

  13.   

    Leemaasn(我给大家拜早年啦!新春快乐!!!):
    推荐一个更好的反编译器吧
      

  14.   

    不怕,这很正常,好象又回到了VB的时代,~!@@#$#$.
    哦,错了,是QBASIC的时代!
      

  15.   


    那么该原始代码是如何通过编译而成为 class 的 ?
      

  16.   

    用break 标签 或continue 标签
    见<<thinking in java 2e>>
      

  17.   

    你的try,catch不就是goto吗,想想是不是一样的东东,不过就是包装更合理而已
      

  18.   

    我现在用的是
    decomp.rar我不知道他是否能满足你的要求,或许你已经尝试过它如果你需要,请消息我你的mail,我发给你吧
    ^@^
      

  19.   

    java的跳转是很有用的,好好看看吧。
      

  20.   

    这是一段joc混淆的代码,用小颖反编出来的,你能看懂吗?
    import java.util.Enumeration;
    import java.util.Vector;public class lIlIIIlIlllIIlIl
    {    Vector _$1;
        private Enumeration _$2;    public lIlIIIlIlllIIlIl()
        {
            _$1 = new Vector();
        }    public String _$1()
        {
            if(_$2.hasMoreElements())
                return (String)_$2.nextElement();
            else
                return null;
        }    public void _$1(String s)
        {
            s;
            this;
            JVM INSTR swap ;
            _$2();
            JVM INSTR ifne 17;
               goto _L1 _L2
    _L1:
            break MISSING_BLOCK_LABEL_9;
    _L2:
            break MISSING_BLOCK_LABEL_17;
            _$1.addElement(s);
        }    public int _$2()
        {
            return _$1.size();
        }    public boolean _$2(String s)
        {
            _$4();
              goto _L1
    _L6:
            "\t";
            String s1;
            s1;
            JVM INSTR swap ;
            indexOf();
            -1;
            JVM INSTR icmpeq 32;
               goto _L2 _L3
    _L2:
            0;
            s1;
            JVM INSTR swap ;
            "\t";
            s1;
            JVM INSTR swap ;
            indexOf();
            substring();
            s1;
    _L3:
            s1;
            s;
            JVM INSTR swap ;
            equals();
            JVM INSTR ifeq 43;
               goto _L4 _L1
    _L4:
            return true;
    _L1:
            if((s1 = _$1()) != null) goto _L6; else goto _L5
    _L5:
            return false;
        }    public void _$3()
        {
            _$1.removeAllElements();
        }    public boolean _$3(String s)
        {
            return _$1.removeElement(s);
        }    public void _$4()
        {
            this;
            this;
            JVM INSTR swap ;
            _$1;
            elements();
            _$2;
        }
    }
      

  21.   

    最新进展:我用其他反编译软件进行反编译,goto 是消失了,但是出现好几处:break MISSING_BLOCK_LABEL_336;但是没有出现与之配合的循环语句如 for,依然报错。