志在指尖
用双手敲打未来

static关键字作用

静态变量和静态办法
static关键字最基本的用法是:
1、被static润饰的变量归于类变量,能够经过类名.变量名直接引证,而不需要new出一个类来
2、被static润饰的办法归于类办法,能够经过类名.办法名直接引证,而不需要new出一个类来
被static润饰的变量、被static润饰的办法统一归于类的静态资源,是类实例之间共享的,换言之,一处变、处处变。JDK把不同的静态资源放在了不同的类中而不把一切静态资源放在一个类里边,很多人或许想当然认为当然要这么做,可是是否想过为什么要这么做呢?个人认为主要有三个好处:
1、不同的类有自己的静态资源,这能够实现静态资源分类。比方和数学相关的静态资源放在java.lang.Math中,和日历相关的静态资源放在java.util.Calendar中,这样就很清晰了
2、防止重名。不同的类之间有重名的静态变量名、静态办法名也是很正常的,如果一切的都放在一同不可防止的一个问题便是姓名重复,这时分怎么办?分类放置就好了。
3、防止静态资源类无限胀大,这很好了解。
OK,再微微深化一下,也是有些人简单混淆的一个问题:静态办法能不能引证非静态资源?静态办法里边能不能引证静态资源?非静态办法里边能不能引证静态资源?比方就以这段代码为例,是否有错?Service基础知识
当然有错,在第7行的当地。无妨这么思考这个问题:
静态资源归于类,可是是独立于类存在的。从JVM的类加载机制的角度讲,静态资源是类初始化的时分加载的,而非静态资源是类new的时分加载的。类的初始化早于类的new,比方Class.forName(“xxx”)办法,便是初始化了一个类,可是并没有new它,仅仅加载这个类的静态资源罢了。所以关于静态资源来说,它是不或许知道一个类中有哪些非静态资源的;可是关于非静态资源来说就不相同了,由于它是new出来之后发生的,因此归于类的这些东西它都能知道。所以上面的几个问题答案就很明确了:
1、静态办法能不能引证非静态资源?不能,new的时分才会发生的东西,关于初始化后就存在的静态资源来说,底子不知道它。
2、静态办法里边能不能引证静态资源?能够,因为都是类初始化的时分加载的,我们相互都知道。
3、非静态办法里边能不能引证静态资源?能够,非静态办法便是实例办法,那是new之后才发生的,那么归于类的内容它都知道。
静态块
静态块也是static的重要应用之一。也是用于初始化一个类的时分做操效果的,和静态变量、静态办法相同,静态块里边的代码只履行一次,且只在初始化类的时分履行。静态块很简单,不过提三个小细节:
打印结果是:
得出第一个定论:静态资源的加载次序是严厉按照静态资源的界说次序来加载的。这和周志明教师《深化了解Java虚拟机:JVM高档特性与最佳实践》中类初始化中的说法“()办法是由编译器自动搜集类中一切类变量的赋值动作和静态句子块(static{}块)中的句子合并发生的,编译器搜集的次序是由句子在源文件中出现的次序所决定的”是共同的。

未经允许不得转载:IT技术网站 » static关键字作用
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载