static关键字的作用------面试经常会被问到

来源:互联网 发布:yum nginx 安装 编辑:程序博客网 时间:2024/05/16 10:52

static关键字最基本的用法是

1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来

2、被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个类来

被static修饰的变量、被static修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变、处处变。JDK把不同的静态资源放在了不同的类中而不把所有静态资源放在一个类里面,很多人可能想当然认为当然要这么做,但是是否想过为什么要这么做呢?个人认为主要有三个好处:

1、不同的类有自己的静态资源,这可以实现静态资源分类。比如和数学相关的静态资源放在java.lang.Math中,和日历相关的静态资源放在java.util.Calendar中,这样就很清晰了

2、避免重名。不同的类之间有重名的静态变量名、静态方法名也是很正常的,如果所有的都放在一起不可避免的一个问题就是名字重复,这时候怎么办?分类放置就好了。

3、避免静态资源类无限膨胀,这很好理解。

静态资源属于类,但是是独立于类存在的。从JVM的类加载机制的角度讲,静态资源是类初始化的时候加载的,而非静态资源是类new的时候加载的。 类的初始化早于类的new,比如Class.forName(“xxx”)方法,就是初始化了一个类,但是并没有new它,只是加载这个类的静态资源罢 了。所以对于静态资源来说,它是不可能知道一个类中有哪些非静态资源的;但是对于非静态资源来说就不一样了,由于它是new出来之后产生的,因此属于类的 这些东西它都能认识。所以上面的几个问题答案就很明确了:

1、静态方法能不能引用非静态资源?不能,new的时候才会产生的东西,对于初始化后就存在的静态资源来说,根本不认识它。

2、静态方法里面能不能引用静态资源?可以,因为都是类初始化的时候加载的,大家相互都认识。

3、非静态方法里面能不能引用静态资源?可以,非静态方法就是实例方法,那是new之后才产生的,那么属于类的内容它都认识。

静态块

静态块也是static的重要应用之一。也是用于初始化一个类的时候做操作用的,和静态变量、静态方法一样,静态块里面的代码只执行一次,且只在初始化类的时候执行。



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 店实在转不出去怎么办 苹果6s掉电快怎么办 苹果7通话声音小怎么办 自体脂肪填多了怎么办 入职体检有问题怎么办 入职体检没通过怎么办 家属不给谅解书怎么办 交通事故对方全责不赔偿怎么办 迅雷下不了片了怎么办 汽车云镜欠费了怎么办 20岁长白头发怎么办 月经20天不干净怎么办 住酒店发票丢了怎么办 开票地址开错了怎么办 报销的发票丢了怎么办 发票上地址错了怎么办 买车的发票丢了怎么办 购车的发票丢了怎么办 丢了5张作废发票怎么办 当空姐老了以后怎么办 万达酒店vip卡怎么办 cf封了999天怎么办 众和股份退市怎么办 pvc板螺丝滑丝怎么办 牙掉了牙根还在怎么办 欣泰电气退市后股票怎么办 睡落枕了怎么办小窍门 考驾照快到期了怎么办 狗狗泪腺很严重怎么办 报到证过期2年了怎么办 艺考准考证丢了怎么办 单招准考证丢了怎么办 6级准考证丢了怎么办 执医准考证丢了怎么办 考研考生号忘了怎么办 证券开户号忘了怎么办 建行卡限额10万怎么办 开通网银不用了怎么办 签了空白按揭合怎么办 信用卡逾期5年了怎么办 银行回执单丢了怎么办