static关键字通常应用在字段、方法、静态块,还有冷门一点的内容:静态内部类、静态导入

static字段:

  static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存到内存中,在内存中只保存一份

  实例变量是属于对象的,在创建对象的时候进行初始化,每个对象的实例变量是互斥的,不会相互影响

PS:static是不允许用来修饰局部变量,无论是方法、静态块、代码块

static方法:

public class A{

    private static int i = 1;
private String s; private void del() {
System.out.println("del()");
add();
} public static void add() {
System.out.println(s);
this.del();
System.out.println("add()"+ i);
}
}

  因为静态方法是属于类的,不需要依赖对象去调用,内部是没有this的,所以静态方法中无法使用this,也无法调用非静态方法和变量,反

过来却可以的。但是如果在静态方法中new一个对象,然后调用非静态方法,是可以正常运行的

public static void add() {
A a = new A();
a.del();
System.out.println(a.s);
System.out.println("add()"+ i);
}

静态块:

  静态块和静态变量一样在首次类加载的时候进行初始化,这是我们使用它的一个重要的原因

public class A{

    private static int i = 1;
private String s = "aaa";
static {
System.out.println("A static block1");
} private void del() {
System.out.println("del()");
add();
} {
System.out.println("A block");
} static {
i1 = 2;
// System.out.println(i1);
System.out.println("A static block2");
}
public static void add() {
System.out.println("add()");
}
private static int i1;
}
public class B extends A{

    static {
System.out.println("B static block1");
} {
System.out.println("B block");
} public B() {
System.out.println("B Constructor");
} static {
System.out.println("B static block2");
} }
public class Test {

    private static B b = new B();

    public static void main(String[] args) {
new B();
A.add();
}
} 

结果:

A static block1
A static block2
B static block1
B static block2
A block
B block
B Constructor
A block
B block
B Constructor
add()

静态块的特点:

  1、静态块内部可以对定义在其后面的静态变量进行赋值,但是不能使用

  2、静态块只会加载一次,按照代码定义顺序进行加载

  3、类加载的顺序:父类静态块-->子类静态块-->父类代码块-->父类构造器-->子类代码块-->子类构造器

非静态块可以加载多次

静态内部类:

  这部分内容可以参考我之前的内容:https://www.cnblogs.com/huigelaile/p/11009436.html,或者自行百度

静态导入:

  之前static相关内容没想到过这个内容,但是在公众号有看到一篇关于面试的文章,面试官问关于static的内容,如果能够回答到静态导入,印象应该会很好。

这时候就能体现和其他面试者的区别了

格式:

  import static 包名.类名.方法名  

import static java.lang.System.*;
import static java.lang.Math.*; public class Test { public static void main(String[] args) {
out.println("abc");
System.out.println(round(1.2));
}
}

PS:jdk1.5出现的特性

  1、静态导入的方法必须是静态的

  2、静态导入可以不调用包名,直接使用包里的静态方法  

Java基础(十)--static关键字的更多相关文章

  1. Java基础之static关键字的用法

    Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.        静态(static)可以是: 变量 ...

  2. Java基础系列--static关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...

  3. 【Java基础】static关键字相关

    static关键字特点: 随着类的加载而加载. 优先于对象存在. 被所有对象共享 可以直接被类名调用. 使用注意: 静态方法只能访问静态成员. 但非静态成员可以访问静态成员. 静态方法中不能使用thi ...

  4. Java基础(二)-static关键字分析

    static关键字是我们在编程中经常会使用到的,但有些可能只知其然而不知其所以然.下面介绍static关键字的作用再通过例子结合说明. static关键字共有五种作用(先说明static所修饰的不会改 ...

  5. java基础 2 static关键字

    2. static关键字 变量:静态变量在内存中只存在一份,只在类第一次实例化时初始化一次,同时类所有的实例都共享静态变量,可以直接同过类名                    来访问他. 方法:静 ...

  6. 【Java基础】static关键字的理解

    修饰范围: 可以修饰成员变量和成员方法.静态的特点: A:随着类的加载而加载 B:优先于对象存在 C:被类的所有对象共享 这其实也是我们判断该不该使用静态的依据. 举例:饮水机和水杯的问题思考可通过类 ...

  7. 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)

    094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  8. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  9. 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)

    092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

随机推荐

  1. C# MVC 用户登录状态判断 【C#】list 去重(转载) js 日期格式转换(转载) C#日期转换(转载) Nullable<System.DateTime>日期格式转换 (转载) Asp.Net MVC中Action跳转(转载)

    C# MVC 用户登录状态判断   来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类Authenticati ...

  2. Cocos2d-x 脚本语言Lua基本数据结构-表(table)

    Cocos2d-x 脚本语言Lua基本数据结构-表(table) table是Lua中唯一的数据结构.其它语言所提供的数据结构,如:arrays.records.lists.queues.sets等. ...

  3. 关于使用Xshell远程连接启动tomcat导致图片不显示,报错Could not initialize class sun.awt.X11GraphicsEnvironment解决方案

    如果您是使用xshell远程启动tomcat,导致二维码.验证码,头像等各种图片不显示,并且打开图片链接报错Could not initialize class sun.awt.X11Graphics ...

  4. Android系统之路(初识MTK) ------ OTA打包ROM安装系统img等到ZIP

    在做OTA升级包的时候,我编译了好多次都没过.老是IO异常.刚開始以为是我 make 的错误.后来多次检查 Error 发现是我的配置信息写错了,与驱动project师一起检查源代码, 改动配置信息后 ...

  5. java7新特性之Diamond syntax

    java7新特性之Diamond syntax Java 7 also introduces a change that means less typing for you when dealing ...

  6. 怎么样关掉红米note开发者选项

    进 系统设置\应用 ,找到“设置”点进去,清一下数据,再打开“设置”查看,就没有“开发者选项”了

  7. go语言---defer

    go语言---defer https://blog.csdn.net/cyk2396/article/details/78885135 defer 是在函数退出前调用,多个defer遵循 先进后出 的 ...

  8. 【LNOI 2014】 LCA

    [题目链接] 点击打开链接 [算法] 考虑求lca(x,y)的深度 我们可以将从根到x路径上的点都打上标记,然后,询问y到根上路径的权值和 那么,求sigma(depth(lca(i,z)))(l & ...

  9. Hadoop MapReduce 运行步骤

    步骤:[使用java编译程序,生成.class文件] [将.class文件打包为jar包] [运行jar包(需要启动Hadoop)] [查看结果] 具体实现:1.添加程序所需要的依赖vim ~/.ba ...

  10. maven中的三种工程,以及在idea中构建父子工程。

    1.pom工程:用在父级工程或聚合工程中.用来做jar包的版本控制.主要是定义POM文件,将后续各个子模块公用的jar包等统一提出来,类似一个抽象父类 2.war工程:将会打包成war,发布在服务器上 ...