查看: 2216| 回复: 10
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] Java 的 static 和 static final 有什么好处呢?

🔗
匿名用户-AIQPO  2020-10-13 11:29:58 |倒序浏览

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
Java 的 static 和 static final 有什么好处吗?  (不是讲用处,而是讲好处,带来编程的便利等)

请问大家能详细解释下吗?

谢谢大家~

求一粒米~

上一篇:分享一个自己写拼有趣最近的高频店面题 希望大佬指教
下一篇:CoderPad 和 CodeSignal 区别 拿个更严格点
全局:
好处还是从用处出发。

比如你要统计一个class创建过多少个counter,那么久可以用一个static变量,在constructor中增加它来达到统计的目的。

static final像楼上提到的singleton就是一个点。为什么要static,因为要全局共享,并且因为singleton的constructor是private的,只能用类名调用static方法进而获得一个唯一的实例。final是防止通过继承的方式修改static的reference

评分

参与人数 2大米 +3 收起 理由
14417335 + 2
yuchao2019 + 1 赞一个

查看全部评分

回复

使用道具 举报

全局:
静态方法,变量属于类本身。使用的时候不用创建对象,代价就是不能使用一些动态的特性。所以特别适合用来做工具类。

Final就是申明不变性。方法就不可覆写,类不可继承,变量不可修改。虽然变量不可修改,但依然可以声明空变量,有且仅有一次初始化/赋值。

好处:静态成员变量是放在方法区内存,如果使用得当,或许可以提升性能。

举例:你有一个API handler bean。你的API key secret需要经常用到,但敏感信息你也不想直接写死,于是你使用了配置中心安全储存。
那么你就可以把这个Key用final static表示,并在bean initialization阶段给这个变量赋值。然后你就不用管这个变量的生命周期了,它一直在那。
回复

使用道具 举报

推荐
GodJune 2020-10-13 17:03:04 | 只看该作者
全局:
好处其实很明显的,如下
static final作用在成员变量上,app初始化即加载至内存,不依赖class的实例化,比较常见的例子是创建一个ParameterKey的class。
比如说,你想把一些常用的String给常量化:
public static final String MEDICAL_KEY = "Medical";
public static final String DENTAL_KEY = "Dental";
这样便于这类常量参数的集中管理。
Java JDK例子:https://docs.oracle.com/javase/7 ... ath/BigDecimal.html

static作用在方法上,同样,调用方法不需要class的实例化,比较常见的例子是一些Helper class或者Utils class,因为按照设计原则,里面的方法不需要依赖于class的具体实例化,很显然,一个人的年龄的计算只跟传进来的person有关,即使有两个new PersonHelper(),但他们相同方法的输出应该还是一样的,那么此时,就应该使用static在方法上。
public class PersonHelper{
    // 这个方法只依赖于传进来的参数,或者这个class内部的any static variable
    public static int calculateAge(Person person){
        return DateUtils.getDiff(person.getBirthDate(), new Date());
    }
}
最常见的Java JDK例子:https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html,刷题应该经常用到
回复

使用道具 举报

全局:
可以用来实现singleton design pattern
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-AIQPO  2020-10-13 11:50:32
pennyhwung 发表于 2020-10-13 11:34
可以用来实现singleton design pattern

singleton design pattern  可以推荐一个教程吗?
回复

使用道具 举报

全局:
没有什么教程,Google上搜例子就行了,自己再在IDE里跑几遍,就掌握了。design pattern, design pattern 就是大家编程、实践的时候用的多了就成了一种pattern 了。

补充内容 (2020-10-13 13:54):
Sorry 没回复上,此回复是对那个提问singleton 教程的人
回复

使用道具 举报

🔗
14417335 2020-10-13 22:10:10 | 只看该作者
全局:
求一粒米~


抱歉,您不能对匿名帖评分

ˉ\_(ツ)_/ˉ
回复

使用道具 举报

🔗
lovejoyvalley 2020-10-15 11:36:59 | 只看该作者
全局:
这个问题的回答可深可浅。 如果你能从Java Garbage Collector 的角度分析,再提到对 Scalability,Performance 的影响, 面试者就要对你刮目相看了。
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-AIQPO  2020-10-15 11:45:28
lovejoyvalley 发表于 2020-10-15 11:36
这个问题的回答可深可浅。 如果你能从Java Garbage Collector 的角度分析,再提到对 Scalability,Performa ...

可以稍微分析一下吗,比如怎么影响garbage collection?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表