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

 

posted @ 2020-04-19 18:11  小菜在路上  阅读(142)  评论(0编辑  收藏  举报