博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中static的用法
阅读量:5246 次
发布时间:2019-06-14

本文共 1652 字,大约阅读时间需要 5 分钟。

static静态,作为修饰符,最初是由c引入,一开始static表示退出一个块后依然存在的局部变量。随后,static表示不能被其他文件访问的全局变量和函数。到了C++和java,static表示属于类且不属于类对象的变量和函数。

从具体用法来看,主要用到5个方面。

一、静态域。

static修饰类的域(字段,成员变量),被static修饰的域在类中只有一个,它属于类,也称为类域。它只能被类操作,不能由对象操作。比如

pubic class Employee

{

  private static int nextId=1;

  private int id;

}

这里nextId是静态域,id就是实例域。nextId在Employee这个类中只有一份,所有Employee的对象共享这个静态域,即使没有对象,nextId依然存在。而实例域id,不同的对象可以都拥有一份id,id属于对象,不属于类。操作的时候,用类操作静态域,也就是Employee.nexdId。用对象操作实例域,也就是tom.id(tom是Employee的一个对象)。

对于静态域而言,一般静态变量用的较少,静态常量用的比较多。比较典型的就是数学中的PI。

public class Math

{

  public static final double PI=3.14159265358979323846;

}

程序中通过Math.PI来获取这个常量。

二、静态方法

static修饰的方法就是静态方法,静态方法是属于类的。比较典型的还是Math里面的方法,如pow(x,a),表示x的a次幂,调用的时候直接写Math.pow(x,a)。

静态方法不能操作对象,也不能访问实例域,只能访问自身所在类的静态域。比如

public static int getNextId()

{

  return nextId;//返回静态域

}

三、静态代码块

在类的内部,用static修饰的一个代码块,也称为静态初始化块。主要用于对类内部的静态域进行初始化。它在第一次使用类的时候执行,只执行一次,而且在构造函数之前执行。比如,连接数据库之前,需要对连接数据库用到的字符串初始化,并且只加载一次驱动,就把这些都放到静态代码块中。示例代码如下:(摘了能够说明问题的部分代码)

static

{

//需加载驱动的名字 

drivername=prop.getProperty("drivername");

//数据库地址

dburl=prop.getProperty("dburl");

//数据库用户名

dbusername=prop.getProperty("dbusername");

//数据库密码

dbpassword=prop.getProperty("dbpassword");              

//加载驱动,驱动只需要加载一次

Class.forName(drivername);

}

四、静态导入

import导入类的时候,如果加上static,就可以导入静态域和静态方法。

在源文件顶部加入这样一行代码:

import static java.lang.Math.*;

我们在后面的程序中就可以直接使用Math的静态域和静态方法了。

比如double i=pow(PI,3);

这样代码比没有静态导入之前的代码

double b=Math.pow(Math.PI, 3);

要清晰了很多,也简洁了不少,更易于理解。

五、静态内部类

在内部类的前面加上static修饰,就是静态内部类。这样使用,只是把这个类隐藏在另外一个类的内部,不需要引用外围类对象。静态内部类的对象除了不能引用外围类的对象外,和其他的内部类是完全一样的。

以上是我阅读Java核心技术 卷I时,结合学习其它内容,个人总结的static的用法,有不当之处,请大家指正。

转载于:https://www.cnblogs.com/coodream2009/p/5415451.html

你可能感兴趣的文章
使用webpack将es6 es7转换成es2015
查看>>
Linux内核 哈希表的结构与实现
查看>>
web前端之HTML常用标签,元素,属性
查看>>
分享下自己在项目中写的一个分页控件
查看>>
汇编学习笔记(9)-汇编程序的基本语法(NASM)
查看>>
【剑指offer】面试题九:斐波那契数列
查看>>
Git中使用amend解决提交冲突
查看>>
使用TransactionScope(轻量级事务)实现数据库操作事务
查看>>
git的fetch
查看>>
对provide/inject的研究
查看>>
base64转blob
查看>>
JAVA-初步认识-第五章-数组-常见操作-最值2
查看>>
5 ways to instantly appear more confident
查看>>
python与redis交互
查看>>
Harbor 搜索镜像及查看 tag
查看>>
VS2010 编译 boost thread库
查看>>
疯狂猜图(点击图片放大)
查看>>
文科妹学 GitHub 简易教程
查看>>
[LeetCode] Rotate List
查看>>
代码: js: 数值操作
查看>>