技术分享|static(静态)关键字的特点和用法

2018-10-19 15:54:19

考虑篇幅问题,Java基础系列的「关键字staticfinal」部分将分两次进行梳理,本次主要总结「static关键字」。

面试时也经常被问到「static关键字」的相关问题,如「谈谈对static关键字的理解?static有哪几种用法?静态内部类与普通内部类有什么区别?Java中变量的初始化顺序是怎样的?」,接下来,西安中软卓越的老师为大家分享static(静态)关键字的特点和用法,建议重点关注。

技术分享(XS).jpg

一、静态:static

用法:是一个修饰符,用于修饰成员(成员变量,成员函数)

Class Person

{

String country="cn";

}

/*每实例化一个Person对象,每个对象在堆内存中都有一个country

而加上static以后,就只在内存总存在一个静态的country被其他的对象直接调用,可以节省内存空间。

当成员被静态修饰以后,除了可以被对象调用外,还可以直接被类名调用。*/

特有内容随着对象存储

比如person类,每个中国人都有自己的名字,而国籍都是一样的中国,所以contry可以定义为staticname不用。

二、tatic特点

1、随着类的加载而加载

也就是说:静态会随着类的消失而消失,说明他的生命周期最长

2、优先于对象存在

3、被所有对象所共享

4、可以直接被类名调用

三、int age(成员变量)实例变量和static int age(静态成员变量)类变量的区别

1、存放为着

实例变量是随着对象的创建而存在堆内存中

类变量随着类的加载而存在于方法区中

2、生命周期

实例变量随着对象的消失而消失

类变量生命周期最长,随着类的消失而消失

四、静态使用注意事项

1、静态方法只能访问静态成员

2、静态方法中不可以定义thissuper关键字

因为静态优先于对象存在,所以静态方法中不可以出现this

3、主函数是静态的

五、静态的好处和坏处

好处:对对象的数据进行单独空间的存储,节省空间,没有必要每个对象中的存储一份

可以直接被类名调用(Person.country

坏处:生命周期过长。

访问出现局限性。(只能访问静态)

六、什么时候使用静态呢?

要从两个方面入手,因为静态修饰的内容有成员变量和成员方法(函数)

什么时候定义静态变量(类变量)呢?

当对象中出现共享数据时,该数据被静态所修饰

对象中的特有数据要定义成非静态存在于堆内存中。

什么时候定义静态函数呢?

当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义为静态的。

七、静态的应用

每一个应用程序都有共性的功能,可以将这些功能进行抽取,独立封装以便复用。把成员方法都定义成static的直接用类名调用。一个类中会有一个默认的构造函数,这个构造函数的权限和所属的类一致。。

静态代码块格式:

static

{

静态代码块中的执行语句;

}

//特点:随着类的加载而执行,只执行一次。用于给类进行初始化。

如下例子:

Class Static Code

{

static

{

System,out.println("a");

}

}

加载顺序静态代码块-->构造代码块-->构造函数

对象的初始化过程

Personp=new Person("zhangsan",20);

1、因为new用到了Person.class。所以会先找到Person.class文件并加载到内存中。

2、执行该类中的static代码块(静态代码块),如果有的话,给Person.class类进行初始化

3、在堆内存中开辟空间,非配内存地址

4、在堆内存中建立对象的特有属性,并进行默认初始化

5、对属性进行显示初始化

6、对对象进行构造代码块初始化

7、对对象进行对应的构造函数初始化

8、将内存地址付给栈内存中的p变量

作为一名开发人员,技术是立身的根本,是拴马桩的尊严;对于一个做教育机构,口碑如水是生命之源,是长盛不衰的根本。13年历经风雨依然昂首前行,未来的西安中软卓越同样会恪守初心,以技术立身,培养IT精英,捍卫教育本质。

 

本文由中软卓越(西安)汇集整理,转载请注明作者及出处。

如需学习java、UI设计、软件测试、Python、大数据、嵌入式、Linxu云计算,请点击咨询,加入我们让你的未来不再迷茫。

关于我们

“简称中软卓越”,是中软国际教育科技股份有限公司是大型IT人才培训机构,是人才战略的核心组成部分之一,承担集团发展过程中人才储备和培养的任务;专注IT培训37年,国内高端IT培训品牌,教育部指定官方IT人才培训机构。专注java培训、UI设计培训、软件测试培训、Python培训、大数据培训、嵌入式培训、Linxu云计算培训等培训课程。217家合作院校,880家合作企业,真实项目实战,素质拓展,职业规划。零首付,100%保障就业,先就业,后付款。

最牛逼的毕业学员入职名企享受高薪就业。880家合作企业,年培育学员人数逾6000人,毕业学员就职于中软国际、百度、腾讯、阿里巴巴、IBM、华为科技、中兴通讯、软通动力等知名企业。

还有什么疑问?我们全面为你解答!为您提供一对一专人服务,请点击下方咨询

  • 卓越资讯
  • 猜你想看
  • 常见问题

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。[详细课程]

    软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程;软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。[详细课程]

    软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。[详细课程]

    Python是一种面向对象的解释型计算机程序设计语言,语法简洁清晰,特色之一是强制用空白符作为语句缩进,它常被昵称为胶水语言,能够把用其他语言制作的各种模块。[详细课程]

    UI设计分为实体UI和虚拟UI,互联网说的UI设计是虚拟UI,一般是指对软件的人机交互、操作逻辑、界面美观的整体设计。[详细课程]

    大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。[详细课程]

    云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。[详细课程]

    西安市长安北路8号高速大厦三楼

    电话:029-61876930