private static final byte[] encodingTable = {
            (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E',
            (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J',
            (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O',
            (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T',
            (byte) 'U', (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y',
            (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd',
            (byte) 'e', (byte) 'f', (byte) 'g', (byte) 'h', (byte) 'i',
            (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n',
            (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's',
            (byte) 't', (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x',
            (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2',
            (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7',
            (byte) '8', (byte) '9', (byte) '+', (byte) '/'
        };
    private static final byte[] decodingTable;//定义一个静态decodingTable字节数组
    static {
        decodingTable = new byte[128]; //实例化decodingTable数组
        for (int i = 0; i < 128; i++) {
            decodingTable[i] = (byte) -1;
        }
        for (int i = 'A'; i <= 'Z'; i++) {
            decodingTable[i] = (byte) (i - 'A');
        }
        for (int i = 'a'; i <= 'z'; i++) {
            decodingTable[i] = (byte) (i - 'a' + 26);
        }
        for (int i = '0'; i <= '9'; i++) {
            decodingTable[i] = (byte) (i - '0' + 52);
        }
        decodingTable['+'] = 62;
        decodingTable['/'] = 63;
    }

解决方案 »

  1.   

     byte数组encodingTable不可修改 
      

  2.   

    就是黄色字体一下的for循环代码是什么意思?
      

  3.   


    private static final byte[] encodingTable = { 
                (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', 
                (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', 
                (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O', 
                (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', 
                (byte) 'U', (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', 
                (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', 
                (byte) 'e', (byte) 'f', (byte) 'g', (byte) 'h', (byte) 'i', 
                (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', 
                (byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', 
                (byte) 't', (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x', 
                (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2', 
                (byte) '3', (byte) '4', (byte) '5', (byte) '6', (byte) '7', 
                (byte) '8', (byte) '9', (byte) '+', (byte) '/' 
            }; 
        private static final byte[] decodingTable;//定义一个静态decodingTable字节数组 
        static {//这个是加载到内存的,不依靠该类的对象的。
            decodingTable = new byte[128]; //实例化decodingTable数组 
            for (int i = 0; i < 128; i++) { 
                decodingTable[i] = (byte) -1; 
            } 
            for (int i = 'A'; i <= 'Z'; i++) { 
                decodingTable[i] = (byte) (i - 'A'); 
            } 
            for (int i = 'a'; i <= 'z'; i++) { 
                decodingTable[i] = (byte) (i - 'a' + 26); 
            } 
            for (int i = '0'; i <= '9'; i++) { 
                decodingTable[i] = (byte) (i - '0' + 52); 
            } 
            decodingTable['+'] = 62; 
            decodingTable['/'] = 63; 
        }
      

  4.   

    http://fireflys.vicp.net/Article/20070507100001.htm
      

  5.   

    final  的意思是 最终的 不可被继承的
      

  6.   

    static block ,static block 中的内容会在类初始化之前执行,
      

  7.   

    static 的意思是静态,也就是说调用时不需要用具体的对象去实现,而是用类去调用,刚开始时,程序的运行从main()进入,但是刚开始main()不是某个具体对象的方法,把它定义为静态的方法,直接通过默认类来调用这只是我的想法,由错的大家指正一下 谢谢!
      

  8.   

    static 块,在内存被共享,load类时,最先被执行。
    http://mht19840918.javaeye.com/blog/170350
      

  9.   

    不明白  是什么意思? for (int i = 0; i < 128; i++) {
                decodingTable[i] = (byte) -1;
            }        for (int i = 'A'; i <= 'Z'; i++) {
                decodingTable[i] = (byte) (i - 'A');
            }        for (int i = 'a'; i <= 'z'; i++) {
                decodingTable[i] = (byte) (i - 'a' + 26);
            }        for (int i = '0'; i <= '9'; i++) {
                decodingTable[i] = (byte) (i - '0' + 52);
            }        decodingTable['+'] = 62;
            decodingTable['/'] = 63;
        }谁在帮我解释下好吗?
      

  10.   

    编码而已,把A-z以及数字/ +重新编码,对应上(byte)1-(byte)63,其它为-1
    利用char的值喵~`
      

  11.   

    也就是类域,只加载一次并且在MAIN()方法开始之前!!!
      

  12.   

    给你举个例子吧:static{}代码块的问题:static{
    //这里面的内容是包含在static用大括号框在里面的,这里面的代码会最行执行,并且这里面的代码也只初始化一次,
    比如:这里面有一条语句:
    System.out.println("这里static里面的内容");
    }
    接着如果你的main()方法里面是:
    public static void main(String[] args){
       System.out.println("这是main方法里面的内容");
    }
    结果:因为前面说过,static代码块里面的内容会在类加载进去时最先执行,并且也是在main()方法里面的所有语句前面执行,且只执行一次,那么你运行出来的结果应当是:
    结果:
    这里static里面的内容
    这是main方法里面的内容
    千万不要以为main方法里面只有一条打印语句,就只会输出一条内容,这就是static代码的作用,你可以在自己机器上试一下,建议你好好看看think in java这本书,讲得很好
      

  13.   

    第二个for循环一下是对A~Z,a~z,0~9,以及+和/的重新编码,但是第一个for循环for (int i = 0; i < 128; i++) { 
                decodingTable[i] = (byte) -1; 
            } 
    又如何解释呢?
      

  14.   

    可是前面已经设定 final byte[] decodingTable 为常量了  复值了 就不能改变了得啊  要是都复-1的话 不可能啊 是不是 先运行的stait模块 然后才运行 final byte[] decodingTable 的代码呢?
      

  15.   

    static 块中的代码,会在该类被JVM加载到内存时被执行!
      

  16.   

    顺便问一下int dataLength = (data.length - modulus);
            int a1;
             int a2;
             int a3;
            for (int i = 0, j = 0; i < dataLength; i += 3, j += 4) {
                a1 = data[i] & 0xff;
                a2 = data[i + 1] & 0xff;
                a3 = data[i + 2] & 0xff;
                bytes[j] = encodingTable[(a1 >>> 2) & 0x3f];
                bytes[j + 1] = encodingTable[((a1 << 4) | (a2 >>> 4)) & 0x3f];
                bytes[j + 2] = encodingTable[((a2 << 2) | (a3 >>> 6)) & 0x3f];
                bytes[j + 3] = encodingTable[a3 & 0x3f];
    中的代码是什么意思呢?