zoukankan      html  css  js  c++  java
  • Java核心技术(初阶)知识点复习——[6]static关键字

    1.static变量

      只依赖于类存在,同时通过类名即可访问,不需要通过对象实例来访问;

      所有对象实例,关于static变量的值都共享存储在一个共同的内存空间中(栈);

     注:static变量的常用情景为,需要统计该类到目前为止一共创建了多少个对象时, 可以在该类的构造函数中加一个static变量++1的操作

    1 //如“要求记录Point2D类到目前为止共创建了多少个Point2D类对象”
    2 public class Point2D{
    3     private static int numberOfInstances = 0;
    4     public Point2D(int initial, int initialY){
    5         x = initialX;
    6         y = initialY;
    7         numberOfInstances++;
    8     }
    9 }

    2.static方法

      只依赖于类存在,同时通过类名即可访问,不需要通过对象实例来访问;

      static方法禁止使用非static变量以及非static方法;具体原因可以参考baijiahao.baidu.com/s?id=1660679841519186374&wfr=spider&for=pc;

      非静态方法中什么都可以调用;

    注:每个实例成员方法内部,底层原理中都有一个this变量,指向调用该方法的具体对象,this的存在允许相同的类实例方法为不同的对象工作

     1 public void setX(int newX){
     2     x = newX;
     3 }
     4 //实例方法会被编译器翻译为如下函数:
     5 public void setX(Point2D this, int newX){
     6     this.x = newX;
     7 }
     8 //对应的对象使用则翻译为:
     9 pointOne.setX(30);
    10 setX(pointOne, 30);
    11 pointTwo.setX(50);
    12 setX(pointTwo, 50);

    3.static代码块

      [1]一个类中只能出现类变量、类方法、静态代码块;

      [2]静态代码块只在类第一次被加载时调用;

       即在程序运行期间,静态代码块只运行一次;

       执行顺序为:静态代码块>匿名代码块>构造函数;

     1 class StaticBlock
     2 {
     3     //静态代码块>匿名代码块>构造函数
     4     static
     5     {
     6         System.out.println("22222");
     7     }
     8     {
     9         System.out.println("11111");
    10     }
    11     public StaticBlock()
    12     {
    13         System.out.println("33333");
    14     }
    15     {
    16         System.out.println("44444");
    17     }
    18 }
    1 public class StaticBlockTest{
    2 
    3     public static void main(String[] args){
    4         StaticBlock obj1 = new StaticBlock();
    5         StaticBlock obj2 = new StaticBlock();
    6     }
    7 }第一次运行到StaticBlock时,就运行static块;每次运行到new了对象出来时,匿名块和构造函数都会被依次调用

    结果为:

    22222

    11111

    44444

    33333

    11111

    44444

    33333

  • 相关阅读:
    Div高度百分比
    字典树模板题 POJ 2503
    POJ 2828
    POJ 2186
    HDU 3397 双lazy标记的问题
    HDU 3911 区间合并求最大长度的问题
    CodeForces 444C 节点更新求变化值的和
    POJ 3667 线段树的区间合并简单问题
    HDU 4578 线段树复杂题
    UVAlive 3211 Now or Later
  • 原文地址:https://www.cnblogs.com/li7anStrugglePath/p/12732674.html
Copyright © 2011-2022 走看看