Java关键字之static的典型用法分析
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的典型用法分析的更多相关文章
- java 关键字final static native详解
java 关键字native static final详解 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义, ...
- Java关键字:static
通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...
- Java关键字之static
static 表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被stati ...
- Java关键字(三)——static
我们说Java是一种面向对象编程的语言,而对象是把数据及对数据的操作方法放在一起,作为一个相互依存的整体,对同类对象抽象出其共性,便是Java中的类,我们可以用类描述世间万物,也可以说万物皆对象.但是 ...
- Java for循环的几种用法分析
J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象.本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类 ...
- Java 四种线程池的用法分析
1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...
- Java关键字final、static使用总结(转)
原文链接:Java关键字final, static一些要点 1. final final类不能被继承,没有子类,final类中的方法默认是final的 final方法不能被子类的方法复盖,但可以被 ...
- Java中 final static super this instanceof 关键字用法
一.final关键字 final可以修饰变量.方法及类: 1.当定义一个final变量时,jvm会将其分配到常量池中,其所修饰的对象只能赋值一次,对基本类型来说是其值不可变,引用类型(包括作为函数形参 ...
- java关键字static用法详解
java中有53个关键字,其中包含2个保留字,这篇文章主要介绍一下static这个关键字. static在java中算是一个比较常见的关键字,有着多种用法,因此很有必要好好地了解一番. 一.定义 st ...
随机推荐
- Centos7.0 三种网络适配器
VMnet0:桥接模式 VMnet1:主机模式 VMnet8:NAT模式 VMware Network Adepter VMnet1:宿主Host用于与 主机模式 虚拟网络进行通信的虚拟网卡 VMwa ...
- BLE 5协议栈-物理层
文章转载自:http://www.sunyouqun.com/2017/04/page/4/ 1. 简介 物理层(Physical Layer)是BLE协议栈最底层,它规定了BLE通信的基础射频参数, ...
- hadoop工作流程
一)任务流程 1)Mapreduce程序启动一个Jobclient实例,开启整个mapreduce作业 2)Jobclient通过getnewjobld()j接口向Jobtarker发出请求,以获得一 ...
- linux pip使用国内源
最近在Linux里面使用pip安装应用的速度十分的慢,于是便上网找了一些国内的源. 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:https:// ...
- C# 类的继承和访问
学习笔记------类的继承和访问: class MyBaseClass { public void PrintSun(){ Console.WriteLine("base111111111 ...
- Kattis - heapsoffun Heaps of Fun (概率密度函数+dp)
题意:有一棵含有n个结点(n<=300)的根树,树上每个结点上的权值是从[0,ai](ai<=1e9)区间内随机的一个实数,问这棵树能形成一个最小堆的概率. 由于结点取值范围是1e9而且是 ...
- UVA - 1640 The Counting Problem (数位dp)
题意:统计l-r中每种数字出现的次数 很明显的数位dp问题,虽然有更简洁的做法但某人已经习惯了数位dp的风格所以还是选择扬长避短吧(说白了就是菜啊) 从高位向低位走,设状态$(u,lim,ze)$表示 ...
- 我说CMMI之四:CMMI的表示方法--转载
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/dylanren/article/deta ...
- 弹出框 popover.js
弹出框 popover.js 为任意元素添加一小块浮层,就像 iPad 上一样,用于存放非主要信息. 弹出框的标题和内容的长度都是零的话将永远不会被显示出来. 插件依赖 弹出框依赖 工具提示插件 ,因 ...
- d3 词云使用
D3-Cloud是一个开源的词云实现,基于D3.js,使用HTML5 Canvas绘制输出,因为采用异步的方式处理,所以表现性能良好. 项目主页:https://www.jasondavies.com ...