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 ...
随机推荐
- Wayos网吧路由英雄联盟频繁掉线解决办法
英雄联盟某些机器瞬间ping值飙升,然后一直掉线重连!研究好久,解决了,经验与大家分享 第一步,在路由器地址后加qos_ext.htm进入qos参数设置页面(如果出现不了设置界面请更新固件).比如:h ...
- idea逆向生成hibernate工程
1.创建maven工程 2.在resources下创建hibernate.cfg.xml文件 <?xml version='1.0' encoding='utf-8'?> <!DOC ...
- vue-cli 4 安装与 新建项目 路由
环境: windows: vue-cli: 编辑器: vsCode npm: #去nodejs网安装https://npm.taobao.org/mirrors/node/v12.12.0/node- ...
- 第02章 新手必须掌握的 Linux 命令
- java同步锁实现方法
1.synchronized关键字修饰 当用此关键字修饰方法时, 内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则就处于阻塞状态 synchronized关键字也可以修饰静态方法,此 ...
- 支付宝支付之扫码支付(电脑网站支付)、H5支付(手机网站支付)相关业务流程分析总结
前言 在上一篇文章<微信支付之扫码支付.公众号支付.H5支付.小程序支付相关业务流程分析总结>中,分析和总结了微信支付相关支付类型的业务流程,这里作为与微信支付平起平坐不相伯仲的支付宝支付 ...
- python算数、逻辑运算,位运算
算术运算符 对变量和数组进行算术运算. 算术运算符:+,-,*,/,% +:将连个或者多个数值相加 -:将两个数值相减 *:将两个数值相乘 /:将两个数值相除 %:取相除的余数 赋值运算符 将右边的值 ...
- ORACLE获取BOM清单
BOM 结构如图 -- 1DH142-022 (DRIVE) -- 100729421 (PCBA) -- 100764148 (HDA) -- 100687050 (VCM) -- 100701 ...
- k8s配置文件模板
一,deployment Deployment为Pod和Replica Set下一代Replication Controller)提供声明式更新 1,配置示例 apiVersion: apps/v1 ...
- 《剑指offer》算法题第四天
今日题目: 二进制中1的个数 数值的整数次方 调整数组顺序使奇数位于偶数前面 链表中倒数第K个节点 链表中环的入口节点 今天的题目都比较简单,但是前三道题都有不同的解法,4,5两题就不在这边讨论了,其 ...