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修饰的方法/属性,不能通过(类名.属性)的方式来访问,一定要先创建实例,再用变量名.属性来访问.
static关键字使用的更多相关文章
- 浅谈Static关键字
1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- PHP的final关键字、static关键字、const关键字
在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...
- Java Static关键字详解
提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- c++中static关键字的用法总结
类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类体中 ...
- static关键字
static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象. 1.static关键字的特点 a:随着类的加载而加载 b:优先于对象存在 (还 ...
- C++中的static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
随机推荐
- AIDL跨进程通信
Android跨进程通信会用到AIDL,当然跨进程通信不一定要用AIDL,像广播也是可以的,当然这里用到AIDL相对比较安全一些: AIDL允许传递基本数据类型(Java 的原生类型如int/long ...
- request.getAttribute( "result");和request.setAttribute("result",username);
request.setAttribute("result",username);在request对象中加入名为result的属性并附值为username,因为request对象是可 ...
- Java实现文件上传
最近自己在做一个小系统玩的时候涉及到了文件的上传,于是在网上找到Java上传文件的方案,最后确定使用common-fileupload实现上传操作. 需求说明 用户添加页面有一个“上传”按钮,点击按钮 ...
- CI 模型的使用M与C之间的调用
CI是PHP一个比较轻,并且好用的一个框架 分层也是分的比较清晰的一个 这里先展示MODEL 放在application/models 目录下面user_model.php <?php clas ...
- Deep Learning学习随记(一)稀疏自编码器
最近开始看Deep Learning,随手记点,方便以后查看. 主要参考资料是Stanford 教授 Andrew Ng 的 Deep Learning 教程讲义:http://deeplearnin ...
- 第一章 Javascript基础
一.Javascript概述(知道) a.一种基于对象和事件驱动的脚本语言 b.作用: 给页面添加动态效果 c.历史: 原名叫做livescript.W3c组织开发的标准叫ECMAscipt. d.特 ...
- [OSGI]Eclipse4.2 OSGI依赖Bundle
Eclipse 4.2 OSGI 依赖的Bundle: org.eclipse.osgiorg.apache.felix.gogo.runtimeorg.apache.felix.gogo.comma ...
- $_GLOBALS超全局数组和global定义的全局变量区别?
全局变量:主程序中定义的变量(函数外部),只能在主程序中使用,在函数内部不能调用 背景:解决在函数内部调用全局变量的问题 解决方法: 1.在函数内部声名全局变量 <?php public $va ...
- Nginx源码研究四:NGINX的内存管理
关于nginx的内存使用,我们先看代码,下面是nginx_cycle.c中对全局数据结构cycle的初始化过程 pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, ...
- 三种php连接access数据库方法
种是利用php的pdo,一种是odbc,com接口来与access数据库连接.利用pdo与access数据库连接 $path ="f:fontwww.jb51.netspiderresult ...