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

    一:看代码找错误

     二:java字段初始化规律

    package 代码测试;
    
    public class InitializeBlockClass {
        {field=200;}
        public int field=100;
        public InitializeBlockClass(int value) {
            this.field=value;
        }
    
        public InitializeBlockClass() {
            
        }
    }
    public class obj {
        public static void main(String[] args) {
            InitializeBlockClass obj=new InitializeBlockClass();
            System.out.println(obj.field);
            obj=new InitializeBlockClass(300); 
            System.out.println(obj.field);
        }
    
    }
    

      

    输出结果为:100 300

    分析

    1  {field=200;} 该部分为类的初始化模块,在类中直接将语句包围起来,直接作为类成员,像这种成员多用与初始化类的字段。

    2  在 public int field=100; 定义时初始化,所以obj.field值为100

    obj=new InitializeBlockClass(300);
            System.out.println(obj.field);

    利用构造方法初始化,将field的值初始化为300,输出为300;

    4 Java字段初始化的规律:

    静态初始化生成实例(new之后)变成你赋给他的值,先执行静态初始化,如果没有实例化,按照初始化和构造方法在程序中出现的顺序执行。

    当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

     三:类字段的初始化顺序

    1执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

    2 执行类的构造函数

    类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码

    四:静态初始化的执行顺序

    五:如何在静态方法中访问类的实例成员(即没有附加static)

    package Test;
    
    public class emm {
        public static void display() {
            System.out.println("吴林祥");
        }
        public void display1() {
            System.out.println("吴林祥666");
        }
        public static void main(String[] args) {
            emm e=new emm();
            e.display1();
            emm.display();
        }
        
    
    }
    

    静态方法中不能直接访问同一类中的非静态成员,而必须先创建对象,再通过对象访问成员

    六:Integer诡异特性

    package 代码测试;
    
    public class ceshi {
        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);
        }
    
    }
    

      结果

    输出结果不一样主要是因为与IntegerCache类有关 为了避免重复创建对象,对INteger值做了缓存,如果这个值在缓存的范围内直接返回缓存对象,否则new一个新的对象返回。

  • 相关阅读:
    condition精准控制
    Juc(上)
    算法和空间复杂度分析
    ReentrantLock
    死锁
    互斥锁
    线程常用方法
    多线程售票与同步机制
    线程的7种状态
    selenium 自动刷司法课
  • 原文地址:https://www.cnblogs.com/1502762920-com/p/9825684.html
Copyright © 2011-2022 走看看