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 = ...
随机推荐
- pyqt5实现注册界面并获得文本框内容
获取框里面的内容,有一个BUG,搞了好久才搞定. __author__ = 'ayew'import sysfrom PyQt5.QtCore import*from PyQt5.QtWidgets ...
- Spark学习之Spark调优与调试(一)
一.使用SparkConf配置Spark 对 Spark 进行性能调优,通常就是修改 Spark 应用的运行时配置选项.Spark 中最主要的配置机制是通过 SparkConf 类对 Spark 进行 ...
- gin框架使用注意事项
gin框架使用注意事项 本文就说下这段时间我在使用gin框架过程中遇到的问题和要注意的事情. 错误处理请求返回要使用c.Abort,不要只是return 当在controller中进行错误处理的时候, ...
- XiaomiPushDemo【小米推送集成,基于V3.6.12版本】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个Demo只是记录小米推送的集成,不能运行. 使用步骤 一.项目组织结构图 注意事项: 1. 导入类文件后需要change包名以 ...
- ShortcutBadgerDemo【安卓应用角标(badge)实现方案】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 本文主要使用的开源库是 leolin310148/ShortcutBadger,但是在其基础上做了一些修改. 什么是应用角标? 1. ...
- html5中的indexDB
1.关系型数据库和非关系型数据库 一致性: 事务完成时,必须让所有的数据具有一致的状态,例如要写入100个数据,前99个成功了,结果第100个不合法,此时事务会回滚到最初状态.这样保证事务结束和开始时 ...
- Mysql常用基础操作(备忘录)
常常忘记mysql的一些命令行操作,甚至于说,比较复杂的sql格式记不住或忘记了,也可能根本不会考虑去记,因此,做一下汇总,当下次出现恍惚时不至于去百度挨个找,有时就是记不起来,但是只要给点药引子,立 ...
- DSAPI 网页获取本地程序登陆用户
这是一个非常简单的示例,在网页或其他平台获取程序中已经登陆的用户,当然也可以是其他信息. 源码 Imports DSAPI.网络.HTTP监听_DSWebAPI Public Class Form1 ...
- oppo设备怎么样无需root激活XPOSED框架的教程
在非常多部门的引流或业务操作中,基本上都需要使用安卓的强大XPOSED框架,近期,我们部门购来了一批新的oppo设备,基本上都都是基于7.0以上版本,基本上都不能够获得root的su超级权限,即使一部 ...
- 如何设置Linux(Centos)系统定期任务(corntab详细用法)
如何设置Linux(Centos)系统定期任务(crontab详细用法) 1.Crontab简介 Linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非 ...