Java高阶语法---static
背景:听说static Java高阶语法是挺进BAT必经之路。
static:
静态static,很多时候会令我望文生义,但是get到了static最重要的一点,其他的理解都还ok。
static最重要的一点就是:类属性中被static所引用的变量会被当作Gabage Collection的root根节点,而root就意味着着这一类变量基本上是不会被GC回收的,
即使System.gc() 都不会被回收,So,static很容易引起内存泄漏。
官方的解释就是:static可以修饰属性、方法和内部类,static修饰属性或方法后,属性和方法不在属于某个特定的对象,而是所有的共享,也就是说static成员不依赖
某个对象,在类加载是就被初始化了;static修饰的属性或方法,可以直接使用类名调用,而不用先实例化对象再调用。
在面试的时候还可以补充:当一个属性或者方法和对象没有关系,或者说是没有任何对象共享的时候,那么就可以用staic修饰,使其实现共享;例如:
1. 某个银行的账户计算器,用来计算银行账户个数,那么此计算器属性就是所有对象共有的属性,就应该用static修饰;
2. System 类中的currentTimeMillis() 方法,用来获取系统当前时间的毫秒值,这个方法和System 类的对象没有关系,System类对象想要共享这个方法,那么这个方法
就可以用static 修饰;(源码currentTimeMillis()方法:public static native long currentTimeMillis(); )
还可以和面试官说,自己曾经遇到过一个内存泄漏的问题,就是因为static修饰的一个Map类型的变量导致的,集合容器用static修饰,不需要的对象没有被及时处理导致集合越来越大,最后通过排查类堆栈信息找到问题所在,这波static面试美滋滋。

FYI:
import java.util.HashMap;
import java.util.Map;
import lombok.extern.slf4j.Slf4j; @Slf4j
public class TestStatic {
private static String staticName = "share";
@SuppressWarnings("unused")
private String unstaticName = "unshare";
@SuppressWarnings("rawtypes")
public static Map map = new HashMap();
@SuppressWarnings("unused")
public static void main(String[] args) {
String myName = TestStatic.staticName;
//String youName = TestStatic.unstaticName; unable
TestStatic.staticMethod();
//TestStatic.unstaticMethod(); unable
TestStatic.testOutOfMemmory(args, args); //存储对象的容器是static容器造成内存泄漏
//System.gc(); unWork
}
public static void staticMethod() {
log.info("I'm static method, share.");
}
public void unstaticMethod() {
log.info("I'm unstatic method, can't share.");
}
@SuppressWarnings("unchecked")
public static void testOutOfMemmory(String[] name,String[] age) {
map.put(name, age);
} }
Java高阶语法---static的更多相关文章
- Java高阶语法---transient
背景:听说transient Java高阶语法是挺进BAT必经之路. transient: Java中transient 关键字的作用,简单的说就是让某些被修饰的成员属性变量不被序列化. 这又扯到了序 ...
- Java高阶语法---Volatile
背景:听说Volatile Java高阶语法亦是挺进BAT的必经之路. Volatile: volatile同步机制又涉及Java内存模型中的可见性.原子性和有序性,恶补基础一波. 可见性: 可见性简 ...
- Java高阶语法---final
背景:听说final Java高阶语法是挺进BAT必经之路. final: final关键字顾名思义就是最终不可改变的. 1.含义:final可以声明成员变量.方法.类和本地变量:一旦将引用声明为fi ...
- Cmd Markdown 高阶语法手册
『Cmd 技术渲染的沙箱页面,点击此处编写自己的文档』 Cmd Markdown 高阶语法手册 1. 内容目录 在段落中填写 [TOC] 以显示全文内容的目录结构. [TOC] 2. 标签分类 在编辑 ...
- Markdown 高阶语法
记录一些 Markdown 的高阶语法,想起来什么,再更新 分割线 两条分割线 *** *** 插入表格 Column Column Column Row Content Content | Colu ...
- Java高阶回调,回调函数的另一种玩法
工具类package com.sctek; import java.lang.reflect.Field; import android.os.CountDownTimer;import androi ...
- Java高阶面试问题合集
下面总结一下在Java面试中常用的一些问题,不具体解答,我只附上一些精彩的博文链接. Spring IOC AOP 底层原理 JAVA的反射机制和动态代理 Java反射机制和动态代理 多线程 Spri ...
- MySQL-5.7 高阶语法及流程控制
1.标签语句 [begin_label:] BEGIN [statement_list] END [end_label] [begin_label:] LOOP statement_list END ...
- Java 高阶 —— try/catch
// try catch 在 for 循环外 try { for(int i = 0; i < max; i++) { String myString = ...; float myNum = ...
随机推荐
- GC参考手册 —— GC 调优(基础篇)
GC调优(Tuning Garbage Collection)和其他性能调优是同样的原理.初学者可能会被 200 多个 GC参数弄得一头雾水, 然后随便调整几个来试试结果,又或者修改几行代码来测试.其 ...
- Vue2.0源码阅读笔记(三):计算属性
计算属性是基于响应式依赖进行缓存的,只有在相关响应式依赖发生改变时才会重新求值,这种缓存机制在求值消耗比较大的情况下能够显著提高性能. 一.计算属性初始化 Vue 在做数据初始化时,通过 in ...
- 结合JDK源码看设计模式——适配器模式
定义: 将一个类的接口转换成客户期望的另外一个接口(重点理解适配的这两个字),使得接口不兼容的类可以一起工作适用场景: 已经存在的类,它的方法和需求不匹配的时候 在软件维护阶段考虑的设计模式 详解 首 ...
- SAP MM 预留单据的历史修改记录?
SAP MM 预留单据的历史修改记录? 在笔者眼里,SAP系统是一个高度严谨的软件系统.用户在SAP系统里的相关操作,系统都会做记录.用户对于系统的相关单据的增删改,SAP系统都有保留change h ...
- openlayers4 入门开发系列之批量叠加 zip 压缩 SHP 图层篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- 基于geoserver的REST服务完成mysql数据源动态发布
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在之前的<简析GeoServer服务的内部文件组织以及 ...
- IO_ADDRESS()的实现【转】
上面我们说了如何去在系统中自己实现一个设置系统寄存器的一个方法,上面归根到底要进行物理地址到虚拟地址的映射 现在我们就说说IO_ADDRESS()的实现 #define __REG32ALI(addr ...
- Takeown、Cacls、Icacls-文件、文件夹夺权用法
常用示例如下: takeown /f 文件名 获取该文件的所属权 takeown /f /r /d n 文件夹 获取整个文件夹及其下面子目录文件的所属权 takeown /f * /a /r /d ...
- Windows -- cmd命令: ipconfig 和 nbtstat
1. ipconfig 命令格式及参数如下: 2. nbtstat 命令格式及参数如下:
- python3第一天,随便写写
哈哈 我滴第一篇博客,不知道咋写,随意看了看别人的博客,我还是不知道咋写,既然是我的博客,那我就把它当随笔写了(这里就是添加随笔...) 也不知道自己说了啥,不过想到了一句话:日记都是写给别人看的.哈 ...