static关键字使用
static关键字
对一些公共使用的数据,比如是饭店筷子,不可能说每个人去饭店吃饭的时候自带一双筷子,饭店的筷子对于进店吃饭的对象都是公共的;
静态变量,跟其他变量不同的是,它是与类关联的,其他变量则是属于某个对象,每一个对象就会有这个数据的拷贝;
被static 修饰的变量都是共享的,修改属性的值会全局改变.访问静态变量可以通过"类名.属性来访问";
static也可以描述方法,称为静态方法,访问静态方法可以通过"类名.方法名"来访问,不需要创建对象;
*注意在普通方法里面不能用static修饰变量,比如如下语句:
public void xxx{
static int a=; //报错
}
如下通过代码体现静态关键字的特性,声明静态变量和普通变量分别对它们进行赋值操作来体现静态的特性.
public class staticdemo {
public int a = 1; // 非static属性,每个实例都是独享的.
public static int b = 2; static{ System.out.println("static block"); } public void foo1()
{
System.out.println("non-static");
} public static void foo2()
{
System.out.println("static method");
} public static void main(String[] args) { staticdemo sd = new staticdemo();
System.out.println(sd.a); System.out.println(sd.b);
System.out.println(staticdemo.b); staticdemo sd1 = new staticdemo();
staticdemo sd2 = new staticdemo(); sd1.a = 2;
sd2.a = 3;
System.out.println("sd1.a=" + sd1.a);
System.out.println("sd2.a=" + sd2.a); System.out.println("修改sd1.b=3,sd2.b=4前,sd1.b=" + staticdemo.b
+ " sd2.b=" + staticdemo.b); sd1.b = 3;
sd2.b = 4;
System.out.println("修改sd1.b=3,sd2.b=4后,sd1.b=" + staticdemo.b
+ " sd2.b=" + staticdemo.b); }
}
通过改变静态变量的值,可以看到两个对象的值都改变了.其实该变量作为类变量,所有对象只是共享一个值,通过改变这个变量的值,其他对象访问它自然也是访问到改变之后的值;
运行结果:
static block
1
2
2
sd1.a=2
sd2.a=3
修改sd1.b=3,sd2.b=4前,sd1.b=2 sd2.b=2
修改sd1.b=3,sd2.b=4后,sd1.b=4 sd2.b=4
__________________________________________________________________________________________________________________________
只要是被static修饰的属性,在调用含有静态资源的类的时候,如果静态还没有加载过的时候,就先执行静态资源(除了方法),
等加载完静态在轮到其他资源.
(参考类的执行过程)
所以这里还要注意一个问题:
比如上面的例子,访问成员a使用如下代码时
public static void main(String[] args) { //staticdemo sd = new staticdemo();
//System.out.println(sd.a); System.out.println(staticdemo.a); //错误代码
运行时就会报错,原因是因为没用static修饰的方法/属性,不能通过(类名.属性)的方式来访问,一定要先创建实例,再用变量名.属性来访问.
最新文章
- 如何用CSS实现在新窗口打开链接?
- [转][译]关于CSS中的float和position和z-index
- MST:Bad Cowtractors(POJ 2377)
- Flask-DebugToolbar
- 在Ubuntu Kylin下安装QQ教程
- Redis源码研究--跳表
- Bag of Words/Bag of Features的Matlab源码发布
- C++ 标准时间线
- 裸kmp算法
- javascript权威指南(1)
- 基于SUSE Linux做NFS文件挂载
- ios学习之常见问题记录
- select2 4.0.3 空记录时的处理
- TCP 三次握爪 四次挥手
- int x ; x+1<;x;公式成立
- 3分钟看完Java 8——史上最强Java 8新特性总结之第二篇 Stream API
- Coursera, Deep Learning 1, Neural Networks and Deep Learning - week2, Neural Networks Basics
- 学习Spring Boot:(二十六)使用 RabbitMQ 消息队列
- 洛谷2973 [USACO10HOL]赶小猪Driving Out the Piggi… 概率 高斯消元
- abap特性