• java字节码分析


    java源文件:

    package com.soecode.lyf.java;
    
    //public class SJQ {
    ////    class Inner1{
    ////        public class Inner100{
    ////
    ////        }
    ////    }
    ////    public final nimin fun(){
    ////        class Inner2{  // class 不能有修饰符
    ////
    ////        }
    ////        return new nimin(10){
    ////
    ////        };
    ////    }
    ////
    ////    public static  void main(String[] args) {
    ////        SJQ sjq = new SJQ();
    ////        sjq.fun();
    ////    }
    //}
    
    class Outer {
        int out_i=1;
        Outer(){
        }
        class Inner {
            public String publicString = "Inner.publicString";
            Inner(){
    
            }
            int Inner_fun1(){
                return out_i;
            }
            class InnerInner{
                public String publicString = "Inner.Inner.publicString";
                int InnerInner_fun1(){
                    return out_i;
                }
                class InnerInnerInner{
                    public String publicString = "Inner.Inner.Inner.publicString";
                    int InnerInnerInner_fun1(){
                        return out_i;
                    }
                }
            }
        }
        void fun1(){
            int fun1_i=2;
            class Inner2{
                public String publicString = "Inner.publicString";
                String Inner2_fun1(){
                    return out_i + publicString;
                }
                int Inner2_fun2(){
                    return fun1_i + out_i ;
                }
            }
        }
        static class Inner3{
            public String publicString = "Inner3.publicString";
    
        }
    
        Other anonymousOther = new Other() {
            public String publicString = "Anonymous Other.publicString";
        };
        public Other getAnonymousOther() {
            return anonymousOther;
        }
    
        Other Other = new Other();
        public Other getOther() {
            return Other;
        }
    
        public static void main(String[] args) {
            System.out.println(new Outer().new Inner());
            System.out.println(new Outer.Inner3());
            System.out.println("\t");
            System.out.println(new Outer().getAnonymousOther());
            System.out.println("\t");
    
        }
    
    }
    
    class Other {
        public String publicString = "Other.publicString";
    }
    //
    ///**
    // *  外部类的修饰符分为:可访问控制符和非访问控制符两种。
    // *     可访问控制符是: 公共类修饰符 public
    // *     非访问控制符有:抽象类修饰符 abstract
    // *     最终类修饰符:final
    // */
    // class class2{
    //    /**
    //     * 1.成员内部类:可以有 public private protected修饰符作用在class
    //     * --1.作为外部类的一个成员存在,与外部类的属性方法并列。
    //     * --2.成员内部类中,不能定义静态成员(属性、方法)。
    //     * --3.成员内部类中,可以访问外部类的所有成员。
    //     * --4.成员内部类中,可以与外部类存在同名变量。
    //     * --5.成员内部类中,访问自己的变量,使用"变量名"或者"this.变量名"。(同名变量,优先访问内部类自己的变量)
    //     * --6.成员内部类中,访问外部类中与成员内部类中同名的变量,使用"外部类名字.this.变量名"。
    //     * --7.成员内部类中,访问外部类中与成员内部类中不同名的变量,使用"变量名"或者"外部类名字.this.变量名"。
    //     * --8.外部类的非static方法访问成员内部类的成员:a:创建内部类对象。b:调用内部类成员。
    //     * --9.外部类的static方法(或者外部类的外部)访问成员内部类的成员:
    //     * ----a:创建外部类对象:Out out = new Out()。
    //     * ----b:通过外部类对象创建内部类对象:In in = out.new In()
    //     * ----c:通过in访问内部类成员
    //     * 2.局部内部类:
    //     * 3.静态内部类:使用了static修饰符作用在class
    //     * 4.匿名内部类:
    //     * 除了内部类,
    //     */
    //    public class Inner{
    //
    //     }
    //
    //}
    //
    //abstract class  nimin{
    //    public int a;
    //    nimin(int a){
    //        this.a = a;
    //    }
    //    static void fun1(){
    //
    //    }
    //    abstract void fun2();
    //}
    //
    ///**
    // * interface 接口中:方法:public abstract;属性:public、static、final
    // */
    //interface int1{
    //    public static final int a=0;
    //    public abstract void fun1();
    //    public abstract void fun2();
    //
    //    /** 接口方法的默认修饰符包含abstract,需要被子类实现。
    //    final的作用但是限制子类重新覆盖此方法,所以不能共存。*/
    ////    public abstract final void fun2();
    //}
    // class class1 implements int1{
    //    @Override
    //    public void fun1() {
    //         new int1(){
    //            @Override
    //            public void fun1() {
    //
    //            }
    //
    //             @Override
    //             public void fun2() {
    //
    //             }
    //         };
    //    }
    //
    //    @Override
    //    public void fun2() {
    //
    //    }
    //}
    ///**
    // * abstract 修饰:类、方法
    // * final 修饰:类、方法、变量
    // * final 与 static可以同时用吗?
    // *
    // *
    // */
    View Code

    class文件:mac 【hex fiend打开】

    CAFEBABE 00000034 00130A00 05000E08 000F0900 04001007 00110700 1201000C 7075626C 69635374 72696E67 0100124C 6A617661 2F6C616E 672F5374 72696E67 3B010006 3C696E69 743E0100 03282956 01000443 6F646501 000F4C69 6E654E75 6D626572 5461626C 6501000A 536F7572 63654669 6C650100 08534A51 2E6A6176 610C0008 00090100 124F7468 65722E70 75626C69 63537472 696E670C 00060007 01001A63 6F6D2F73 6F65636F 64652F6C 79662F6A 6176612F 4F746865 72010010 6A617661 2F6C616E 672F4F62 6A656374 00200004 00050000 00010001 00060007 00000001 00000008 00090001 000A0000 00270002 00010000 000B2AB7 00012A12 02B50003 B1000000 01000B00 00000A00 02000000 59000400 5A000100 0C000000 02000D
    Êþº¾4
        publicStringLjava/lang/String;<init>()VCodeLineNumberTable
    SourceFileSJQ.java    Other.publicStringcom/soecode/lyf/java/Otherjava/lang/Object     
    '*·*µ±
    YZ

     

    javap -verbose ./com/soecode/lyf/java/Other.class

    View Code

     

    这两个地方怎么分析? 

    参考:Java基础篇(JVM)——字节码详解

  • 相关阅读:
    野餐规划
    jQuery火箭图标返回顶部代码
    js清除数组中的null元素
    typescript 配置 alias
    艰难的2020春招----来自普通本科学校艰辛历程(二)
    艰难的2020春招----来自普通本科学校的艰辛历程(一)
    博客园与csdn同步写作
    回溯法——数独游戏
    动态规划——合唱队
    动态规划——分组背包问题
  • 原文地址:https://www.cnblogs.com/sunupo/p/15877022.html
Copyright © 2020-2023  润新知