zoukankan      html  css  js  c++  java
  • jvm总结

    类的初始化干了哪些事?(1,给类静态变量赋值(不包括静态常量),而不是初始化类静态变量;2,加载static块,无先后顺序)

    类的实例化干了哪些事?(给非static变量赋值,加载构造块,加载构造函数)

    类初始化之后不一定实例化;

    类实例化完成之后不一定初始化完成

    static变量是类级别的变量

    static块可以看做是一个没有名字、没有参数、没有返回值的静态方法

    static final 的值如果能确定,则不会初始化类;如果确定不了(值是一个new 对象),则还是会初始化类

    (一)静态变量:线程非安全

       1、静态变量:使用static关键字定义的变量。static可以修饰变量和方法,也有static静态代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

        用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它的类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。

        2、静态变量使用的场景:

        (1)对象间共享值时

        (2)方便访问变量时

        3、静态方法使用注意事项:

    1. 无法在静态方法里引用实例变量、也无法调用实例方法,但是可以调用静态变量和静态方法,你甚至可以在static静态代码块里调用main方法,都是没有问题的
     
    2. 无法在静态方法里使用this关键字和super关键字(因为this关键字指向该方法所属的对象,而静态方法是属于类级的,不存在对象一说;至于super关键字,只要不是用在构造方法里,那么 
       它就是指向父类对象的,而静态方法是不能引用实例对象的,因此也不能使用super关键字)
     
    3. 无法在静态方法里声明其他静态变量(其实这一点不只是静态方法才适用,包括实例方法也无法在方法体中声明静态变量,因为静态变量属于类变量)
     
    4. 无法在静态方法里使用域修饰符来声明变量:public、protected、private,只能使用默认的访问域(这一点实例方法也是适用的)
    5, 不能在静态方法内直接调用非静态方法;
    static静态代码块其实完全可以看做是一个没有名字、没有参数、没有返回值的静态方法,这个静态方法会在main方法执行前执行,而且是主动执行的,不需要任何显示调用,除此之外它和普通的静态方法没有任何区别,因此对普通静态方法适用的规则也适用于该static静态代码块,比如:
     
     
     
  • 相关阅读:
    EF Core1.0 CodeFirst为Modell设置默认值!
    MvcPager分页控件使用注意事项!
    一个关于A标签和分页的怪问题!
    让Visual Studio Code对jQuery支持智能提示!
    MVC中获取所有按钮,并绑定事件!
    EF6.0 Code First使用mysql的各种错误和解决办法!!
    记住 MVC里用formcollection接收form表单传来的值,表单属性必须有name为健!
    Hibernate处理oracle lob总结
    怎样写 OpenStack Neutron 的 Extension (一)
    怎样写 OpenStack Neutron 的 Extension (二)
  • 原文地址:https://www.cnblogs.com/jichen/p/8605988.html
Copyright © 2011-2022 走看看