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的用法,有不当之处,请大家指正。

Java中static的用法的更多相关文章

  1. Java中static的用法,初始化块

    使用 Arrays 类操作 Java 中的数组语法: Arrays.sort(数组名); 可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该 ...

  2. Java中static的用法解析

    知识点1.static关键字a.可以修饰变量,方法,代码块b.修饰的变量和方法可以使用类名.变量名/类名.方法名调用c.static修饰的资源为静态资源,在类加载的时候执行d.在静态方法中只能调用静态 ...

  3. 【转】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

  4. 【java_需阅读】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

  5. Java中static关键字用法总结

      1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · ...

  6. Java类中static的用法

    关于Java中static的使用有以下四种情况: 1.静态成员变量         被static修饰的成员变量,叫静态成员变量或类变量:没有被static修饰的变量,叫实例变量. 两者的区别是:  ...

  7. java中this的用法?

    2008-07-28 08:10cztx5479 | 分类:JAVA相关 | 浏览4533次 java中this的用法? import java.awt.*; import java.awt.even ...

  8. 转:十八、java中this的用法

    http://blog.csdn.net/liujun13579/article/details/7732443 我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它, ...

  9. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

随机推荐

  1. linux shell中的 #!/bin/bash

    #!/bin/bash是指此脚本使用/bin/bash来解释执行. 其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径. bash只是shell的一种,还有很多其它shell,如:sh ...

  2. 更改 input type 的值

    需要实现的效果:一个输入框,当输入框未获得焦点的时候,value 值为 “密码”:当输入框失去焦点的时候,输入内容显示为”*****” <input name=”password” type=” ...

  3. Mysql查询优化器

    Mysql查询优化器 本文的目的主要是通过告诉大家,查询优化器为我们做了那些工作,我们怎么做,才能使查询优化器对我们的sql进行优化,以及启示我们sql语句怎么写,才能更有效率.那么到底mysql到底 ...

  4. 删除特定影响因素(字段列)下的重复记录(MySQL)

    ;CREATE TABLE TabTest ( `id` ) NOT NULL AUTO_INCREMENT ,`factorA` ) NOT NULL DEFAULT ' ' ,`factorB` ...

  5. jsonp实现跨域访问

    要实现JSONP跨域访问,首先就要了解什么是跨域?然后JSONP与JSON的关系? 1.什么是跨域? 跨域简单的说就是一个域名下的程序和另一个域名下的程序做数据交互.比如说:现有一个http://ww ...

  6. Spring3.0将全面支持REST

    Rod Johnson上个月底说,Spring 3.0全面支持REST风格的Web服务. "We're really seeing extensive interest and growth ...

  7. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)(整理)

    BSD开源协议(original  BSD license.FreeBSD  license.Original  BSD license) BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可 ...

  8. R工作空间

    工作空间,指的是你现有的R语言工作环境,它包括了任何一个用户定义的对象,比如:向量,矩阵,数据结构,列表,方法等.在一个R会话结束的时候,你可以保存现有的工作空间的映像,在下一次R启动的时候,该工作空 ...

  9. 在C语言环境下使用google protobuf

    本文写给经常使用C编程且不喜欢C++而又要经常使用google protobuf的人.        经常写通讯程序的人对数据进行序列化或者反序列化时,可能经常使用google的protobuf(PB ...

  10. Azure linux centos 默认登陆账号是什么?

    什么?刚创建的linux虚拟机账号忘记了? 不要急,往下看!! Azure为我们考虑好了,默认创建centos 系统时,默认账号是azureuser,这个账号是非root权限的. 很多人在创建的时候容 ...