zoukankan      html  css  js  c++  java
  • 动手动脑

    关于自定义构造方法

    package teacher10_6;
    
    public class Test{
    	public static void main()
    	{
    		Foo obj1=new Foo();
    	}
    }
    
    class Foo{
    	int value;
    	public Foo(int initValue){
    		value=initValue;
    	}
    }
    

      编译结果 出错

    原因分析:当用户自己写了一个构造方法,系统将不自动生成构造方法

    静态初始化块的执行顺序

    class Root
    {
    	static
    	{
    		System.out.println("Root的静态初始化块");
    	}
    	{
    		System.out.println("Root的普通初始化块");
    	}
    	public Root()
    	{
    		System.out.println("Root的无参数的构造器");
    	}
    }
    class Mid extends Root
    {
    	static
    	{
    		System.out.println("Mid的静态初始化块");
    	}
    	{
    		System.out.println("Mid的普通初始化块");
    	}
    	public Mid()
    	{
    		System.out.println("Mid的无参数的构造器");
    	}
    	public Mid(String msg)
    	{
    		//通过this调用同一类中重载的构造器
    		this();
    		System.out.println("Mid的带参数构造器,其参数值:" + msg);
    	}
    }
    class Leaf extends Mid
    {
    	static
    	{
    		System.out.println("Leaf的静态初始化块");
    	}
    	{
    		System.out.println("Leaf的普通初始化块");
    	}	
    	public Leaf()
    	{
    		//通过super调用父类中有一个字符串参数的构造器
    		super("Java初始化顺序演示");
    		System.out.println("执行Leaf的构造器");
    	}
    
    }
    
    public class TestStaticInitializeBlock
    {
    	public static void main(String[] args) 
    	{
    		new Leaf();
    	}
    }

     执行结果

    Root的静态初始化块
    Mid的静态初始化块
    Leaf的静态初始化块
    Root的普通初始化块
    Root的无参数的构造器
    Mid的普通初始化块
    Mid的无参数的构造器
    Mid的带参数构造器,其参数值:Java初始化顺序演示
    Leaf的普通初始化块
    执行Leaf的构造器

    结果分析

    静态初始化块只能执行一次

    创建子类的对象时,父类的静态初始化块也会执行

    神奇的代码

    public class StrangeIntegerBehavior 
    {
    
        
    	public static void main(String[] args)
    	{
    
            
    		Integer i1=100;
           
    		Integer j1=100;
            
    		System.out.println(i1==j1);
    
            
    		Integer i2=129;
            
    		Integer j2=129;
            
    		System.out.println(i2==j2);
        
    	}
    
    
    }
    

      运行结果:

    true

    false

    结果分析:

    https://jingyan.baidu.com/article/20095761c9e042cb0721b41c.html

    Classfile /C:/Users/linmob/Desktop/study/java/02.ClassAndObjectSourceCode/StrangeIntegerBehavior.class
      Last modified 2020年10月6日; size 694 bytes
      MD5 checksum 974c03c0f2e95fe3fd367fef51c88ad5
      Compiled from "StrangeIntegerBehavior.java"
    public class StrangeIntegerBehavior
      minor version: 0
      major version: 56
      flags: (0x0021) ACC_PUBLIC, ACC_SUPER
      this_class: #5                          // StrangeIntegerBehavior
      super_class: #6                         // java/lang/Object
      interfaces: 0, fields: 0, methods: 2, attributes: 1
    Constant pool:
       #1 = Methodref          #6.#19         // java/lang/Object."<init>":()V
       #2 = Methodref          #15.#20        // java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       #3 = Fieldref           #21.#22        // java/lang/System.out:Ljava/io/PrintStream;
       #4 = Methodref          #16.#23        // java/io/PrintStream.println:(Z)V
       #5 = Class              #24            // StrangeIntegerBehavior
       #6 = Class              #25            // java/lang/Object
       #7 = Utf8               <init>
       #8 = Utf8               ()V
       #9 = Utf8               Code
      #10 = Utf8               LineNumberTable
      #11 = Utf8               main
      #12 = Utf8               ([Ljava/lang/String;)V
      #13 = Utf8               StackMapTable
      #14 = Class              #26            // "[Ljava/lang/String;"
      #15 = Class              #27            // java/lang/Integer
      #16 = Class              #28            // java/io/PrintStream
      #17 = Utf8               SourceFile
      #18 = Utf8               StrangeIntegerBehavior.java
      #19 = NameAndType        #7:#8          // "<init>":()V
      #20 = NameAndType        #29:#30        // valueOf:(I)Ljava/lang/Integer;
      #21 = Class              #31            // java/lang/System
      #22 = NameAndType        #32:#33        // out:Ljava/io/PrintStream;
      #23 = NameAndType        #34:#35        // println:(Z)V
      #24 = Utf8               StrangeIntegerBehavior
      #25 = Utf8               java/lang/Object
      #26 = Utf8               [Ljava/lang/String;
      #27 = Utf8               java/lang/Integer
      #28 = Utf8               java/io/PrintStream
      #29 = Utf8               valueOf
      #30 = Utf8               (I)Ljava/lang/Integer;
      #31 = Utf8               java/lang/System
      #32 = Utf8               out
      #33 = Utf8               Ljava/io/PrintStream;
      #34 = Utf8               println
      #35 = Utf8               (Z)V
    {
      public StrangeIntegerBehavior();
        descriptor: ()V
        flags: (0x0001) ACC_PUBLIC
        Code:
          stack=1, locals=1, args_size=1
             0: aload_0
             1: invokespecial #1                  // Method java/lang/Object."<init>":()V
             4: return
          LineNumberTable:
            line 1: 0
      public static void main(java.lang.String[]);
        descriptor: ([Ljava/lang/String;)V
        flags: (0x0009) ACC_PUBLIC, ACC_STATIC
        Code:
          stack=3, locals=5, args_size=1
             0: bipush        100
             2: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
             5: astore_1
             6: bipush        100
             8: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
            11: astore_2
            12: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
            15: aload_1
            16: aload_2
            17: if_acmpne     24
            20: iconst_1
            21: goto          25
            24: iconst_0
            25: invokevirtual #4                  // Method java/io/PrintStream.println:(Z)V
            28: sipush        129
            31: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
            34: astore_3
            35: sipush        129
            38: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
            41: astore        4
            43: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
            46: aload_3
            47: aload         4
            49: if_acmpne     56
            52: iconst_1
            53: goto          57
            56: iconst_0
            57: invokevirtual #4                  // Method java/io/PrintStream.println:(Z)V
            60: return
          LineNumberTable:
            line 9: 0
            line 11: 6
            line 13: 12
            line 16: 28
            line 18: 35
            line 20: 43
            line 22: 60
          StackMapTable: number_of_entries = 4
            frame_type = 255 /* full_frame */
              offset_delta = 24
              locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer ]
              stack = [ class java/io/PrintStream ]
            frame_type = 255 /* full_frame */
              offset_delta = 0
              locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer ]
              stack = [ class java/io/PrintStream, int ]
            frame_type = 255 /* full_frame */
              offset_delta = 30
              locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer, class java/lang/Integer, class java/lang/Integer ]
              stack = [ class java/io/PrintStream ]
            frame_type = 255 /* full_frame */
              offset_delta = 0
              locals = [ class "[Ljava/lang/String;", class java/lang/Integer, class java/lang/Integer, class java/lang/Integer, class java/lang/Integer ]
              stack = [ class java/io/PrintStream, int ]
    }
    SourceFile: "StrangeIntegerBehavior.java"
  • 相关阅读:
    【288】◀▶ 博客园黑色代码主题实现
    【287】◀▶ arcpy 常用类说明
    【286】◀▶ Python 内置函数说明
    LeetCode Insert Interval
    Craking the coding interview 面试题:完美随机洗牌
    遭遇多线程bug (1)
    全情投入是做好工作的基础——Leo鉴书39
    《Java 并发编程实战》读书笔记之二:图文讲述同步的另一个重要功能:内存可见性
    视图控制器
    Chapter 1. OpenGL基础回顾
  • 原文地址:https://www.cnblogs.com/linmob/p/13773335.html
Copyright © 2011-2022 走看看