前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础--static关键字

Java基础--static关键字

作者头像
河岸飞流
发布2019-08-08 16:43:07
4590
发布2019-08-08 16:43:07
举报
文章被收录于专栏:开发杂记

不管是平时阅读源代码,还是笔试、面试中,static关键字还是经常被问道,这篇文章主要来重新复习一下该关键字。

一、static用途

static方便在没有创建对象的时候调用方法或者变量。 static关键字可以用来==修饰类的成员方法、类的成员变量==。也可以==编写代码块==来优化程序性能。 被static关键字修饰的方法或者变量,不依赖对象来访问,只要类被加载了,就可以通过==类名.Method/Field==的形式来访问。

  • static方法 static方法一般被称之为静态方法,由于静态方法不依赖于对象,就没有this的说法,因此在静态方法中是不能调用类的非静态方法/成员变量。 如果在不想创建对象的情况下调用某个方法,可以将该方法定义成static方法,典型的例如main方法。
  • static变量 static变量一般称之为静态变量,它与非静态变量的区别在于,静态变量被所有的对象共享,在内存只有一个副本,它当且仅当类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。
  • static代码块 static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。看一下实际的例子会更清楚。
在这里插入图片描述
在这里插入图片描述

由于静态代码块仅在类加载时执行一次,可以利用该特性做一下代码层面的优化。 二、静态变量的生命周期

  • 加载:java虚拟机在加载类的过程中为静态变量分配内存
  • 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享
  • 销毁:类被卸载时,静态变量被销毁,并释放内存空间。==static变量的生命周期取决于类的生命周期== 三、一道题看自己是否掌握 看一下下面会打印出什么 public class Father { Person person = new Person("Father"); static { System.out.println("Father 静态代码块"); } public Father() { System.out.println("Father 构造方法"); } public static void main(String[] args) { new Son(); } } public class Son extends Father { Person person = new Person("Son"); static { System.out.println("Son 静态代码块"); } public Son() { System.out.println("Son 构造方法"); } } public class Person { static { //不加\n会跟构造方法中打印到一行 System.out.print("person 静态代码块\n"); } public Person(String str) { System.out.println("person " + str); } }

简单分析一下类的加载过程,首先加载Father类 ,执行Father的静态代码块,接着执行new Son(),由于Son没有被加载,开始加载Son类,发现Son继承自Father,但是Father类已经被加载过了,所以只需要加载Son类,先执行Son静态代码块。在加载完只有,开始调用构造器来生成对象。在生成对象的时候必须先初始化父类的成员变量,因此会执行Father中的Person person = new Person("Father"),此时Person类还没有被加载过,那么先加载Person类,就要先执行person中的静态代码块,接着执行父类的构造器,完成了父类的初始化,然后就来初始化自身了,因此会接着执行Son中的Person person = new Person(),最后执行Son的构造器。打印结果如下

在这里插入图片描述
在这里插入图片描述

总结一下类初始化的顺序:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、static用途
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档