static关键字是java中非常重要的一个关键字,用的好的话可以提高程序的运行性能,优化程序结构。接下来我们来总结
一下static关键字及其用法。
1.static变量
static变量也称作静态变量,静态变量为所属类的成员所共享,静态变量只会有一份,而不是每个实例都有自己的一份。
在静态方法中和非静态方法中都可以直接引用静态变量,而非静态变量则不可能在静态方法中直接引用,比如我们最常见的
main()方法,我们来看一下以下的code:

package com.ab.main;

/**
* @author
*
*/
public class StaticTest { private int m = 0;
private static int Count = 0; public StaticTest() {
Count++;
} /**
* @param args
*/
public static void main(String[] args) {
System.out.println("Count: "+Count);
//System.out.println("m value is: "+m);
//error:不能对非静态字段 m 进行静态引用 StaticTest Static1 = new StaticTest();
System.out.println("这是第"+Static1.Count+"次初始化"); StaticTest Static2 = new StaticTest();
System.out.println("这是第"+Static2.Count+"次初始化"); Static1.testStatic1(); testStatic2(); } public void testStatic1(){
System.out.println("m value is: "+m);
System.out.println("count value is: "+Count);
} public static void testStatic2(){
//System.out.println("m value is: "+m);
//error:不能对非静态字段 m 进行静态引用
System.out.println("count value is: "+Count);
} }

其中在静态的main()方法中可以直接引用静态变量Count,但是不能引用非静态变量m,要不然会报error:
不能对非静态字段 m 进行静态引用
静态变量每个类一个,而实例变量为每个对象一个,静态变量可以节约内存。
静态变量是在类被加载的时初始化,如以上代码所示,Count只在加载时候初始化一次,new对象后Count加1,
再次new对象的时候,Count不在初始化,就在1的基础上再加1变为2,以上代码的count部分输出为:
这是第1次初始化
这是第2次初始化
而如果把private static int Count = 0;改为private int Count = 0;的话输出结果为:
这是第1次初始化
这是第1次初始化
每次new的时候重新初始化为0,然后再加1
此外还有一个常用的用法是和final配合使用,比如public static final double PI = 3.141592653589793;
我们知道final变量代表你不能改变它的值,就是常数的定义,一般都是大写字母。

2.static方法
静态的方法可以直接调用而不需要堆上的实例,也就是可以直接用类的名称调用,而不是用对象引用变量,比如在
最常见的入口函数main()就是典型的public static void main(String[] args)静态方法,如果还有定义为static
的方法,比如code中的public static void testStatic2()我们就可以在main中直接testStatic2();调用,而要
调用public void testStatic1()这个非静态方法的话,则需要new一个实例出来StaticTest Static1 = new StaticTest();
静态方法不能直接存取非静态的变量,可以直接调用静态变量

3.static代码块
static还有一个作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,
类中可以有多个static块。
在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。
4.static import
这是Java 5.0的新功能,import static ...之后调用的时候直接使用方法名调用,就好像是该类自己的方法一样。

总结
static是java中非常重要的一个关键字,主要有四种用法:

用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享;
用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用;
静态块用法,将多个类成员放在一起初始化;
静态导包用法,将类的方法直接导入到当前类中,更加方便。

Java关键字之static的典型用法分析的更多相关文章

  1. java 关键字final static native详解

    java 关键字native static final详解 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义, ...

  2. Java关键字:static

    通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...

  3. Java关键字之static

    static 表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被stati ...

  4. Java关键字(三)——static

    我们说Java是一种面向对象编程的语言,而对象是把数据及对数据的操作方法放在一起,作为一个相互依存的整体,对同类对象抽象出其共性,便是Java中的类,我们可以用类描述世间万物,也可以说万物皆对象.但是 ...

  5. Java for循环的几种用法分析

    J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象.本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类 ...

  6. Java 四种线程池的用法分析

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...

  7. Java关键字final、static使用总结(转)

    原文链接:Java关键字final, static一些要点 1. final   final类不能被继承,没有子类,final类中的方法默认是final的 final方法不能被子类的方法复盖,但可以被 ...

  8. Java中 final static super this instanceof 关键字用法

    一.final关键字 final可以修饰变量.方法及类: 1.当定义一个final变量时,jvm会将其分配到常量池中,其所修饰的对象只能赋值一次,对基本类型来说是其值不可变,引用类型(包括作为函数形参 ...

  9. java关键字static用法详解

    java中有53个关键字,其中包含2个保留字,这篇文章主要介绍一下static这个关键字. static在java中算是一个比较常见的关键字,有着多种用法,因此很有必要好好地了解一番. 一.定义 st ...

随机推荐

  1. linux下ifconfig只剩下lo的解决方法

    运行以下命令,删除旧的网络配置,重新让networkmanager自动配置即可 sudo service network-manager stop sudo rm /var/lib/NetworkMa ...

  2. python、第五篇:数据备份、pymysql模块

    一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: #1. 测试+链接 ...

  3. 模拟赛小结:2019-2020 ICPC, Asia Jakarta Regional Contest

    比赛链接:传送门 离金最近的一次?,lh大佬carry场. Problem A. Copying Homework 00:17(+) Solved by Dancepted 签到,读题有点慢了.而且配 ...

  4. docker_facenet_image在Docker容器中运行Facenet环境搭建

    对开发和运维人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境.任意时间让应用正常运行.而Docker恰恰是可以实现这一终极目标的瑞士军刀. 具体来说,Docker在开发和运维过程中,具 ...

  5. 读《JavaScript面向对象编程指南》(二)

    第五章 原型 在JavaScript中,所有函数都会拥有一个 prototype 的属性,默认初始值为空对象. 可以在相关的原型对象中添加新的方法和属性,甚至可以用自定义对象来完全替换掉原有的原型对象 ...

  6. JS---client系列

    offset系列:获取元素的宽,高,left,top, offsetParent   offsetWidth:元素的宽,有边框 offsetHeight:元素的高,有边框 offsetLeft:元素距 ...

  7. P1081 [NOIP2012]开车旅行[倍增]

    P1081 开车旅行    题面较为啰嗦.大概概括:一个数列,只能从一个点向后走,两种方案:A.走到和自己差的绝对值次小的点B.走到和自己差的绝对值最小点:花费为此差绝对值:若干询问从规定点向后最多花 ...

  8. 【每日一包0001】is-sorted

    github地址:https://github.com/ABCDdouyae... is-sorted 用于判断数组是否被排序了 文档地址:https://www.npmjs.com/package/ ...

  9. Rust学习-阶段1学习总结

    学习Rust已经两周了,基本上是断断续续的在学,或者是在上下班坐公交时,或者是在ODC没事做时.现在已经学习了Rust程序设计语言的前5章,是时候做一个总结了.关于数据类型或者if else这种内容我 ...

  10. c# 使用Split分割 换行符

    c# 使用Split分割 换行符,方法如下(其余方法有空再添加): string str = "aa" + "\r\n" + "bb"; s ...