static关键字用法
java中static关键字可用于修饰:
1.属性:表示该属性变量在类被加载时即被创建并初始化,类加载过程只进行一次,因此静态变量也只被创建一次
2.方法:静态方法为类的公有方法,可直接用‘类名.方法名'访问,静态方法不可访问本类中的非静态成员,子类不可
将父类的静态方法覆盖为非静态的,反之亦然。此外,静态方法中不能使用this关键字,也不能用super关键字去访问
父类静态方法,可直接用'父类.父类静态方法名'访问。
3.代码块:静态初始化代码块,在类被加载时执行一次,可用于类的初始化
具体实例:
1)下面的例子中,静态变量staticVar,只在类第一次加载时被创建并初始化,以后无论创建多少类对象,该变量都不再
加载,因此每次都在原有基础上增加1,而实例变量instanceVar,只有当创建类对象时才对其进行创建并在构造函数中
加1,每创建一个对象,就对应创建一个instanceVar实例变量。注意:在静态方法中访问instanceVar将报错。
2)UseStatic类中,类加载时初始化顺序为:静态变量-->静态代码块
package com.pattywgm.a_fundamental; import org.junit.Test; /**
*
* @author patty
* @time 2014-12-4
* @todo 考查static关键字的用法
*/
public class StaticTest {
//默认为0 ,可不指定初始值
static int staticVar; //静态变量,在类初始化时加载,只加载一次
int instanceVar; //实例变量 public StaticTest() {
staticVar++;
instanceVar++;
System.out.println("staticVAr= "+staticVar+" instanceVar= "+instanceVar); } public void doSth(){
System.out.println("Do something...");
} public static void doSthStatic(){
// System.out.println(instanceVar); //不能对非静态字段 instanceVar 进行静态引用
System.out.println("Do something static...");
} @Test
public void testStatic(){
//单元测试会首先创建一个类的对象,然后再调用该测试方法
new StaticTest();
} public static void main(String[] args){
// StaticTest staticTest;
System.out.println(staticVar); //此时还未创建对象,staticVar值未增加,仍为0
//每创建一个StaticTest对象,staticVar值增加1,instanceVAr值由0加1
StaticTest staticTest1=new StaticTest(); //
StaticTest staticTest2=new StaticTest();
StaticTest staticTest3=new StaticTest();
System.out.println("instanceVar(whole) is:"+staticTest3.instanceVar);
int instanceVar=200; //局部变量优先
System.out.println("instanceVar(local) is:"+instanceVar);
System.out.println("staticVar(whole) is:"+staticVar);
int staticVar=500; //局部变量优先
System.out.println("staticVar(local) is:"+staticVar); }
} //end StaticTest
/**
*
* @author patty
* @time 2014-12-4
* @todo 考查static变量/方法/代码块
* 类加载时加载顺序为:静态变量,静态代码块,然后才调用静态方法
*/
class UseStatic{
public static int a=3;
static int b; static void method(int c){
System.out.println("C: "+c);
System.out.println("A: "+a);
System.out.println("B: "+b);
}
//代码块
static{
System.out.println("Static block...");
System.out.println("a= "+a+" b= "+b);// 3 0
b=a*5;
System.out.println("a= "+a+" b= "+b);// 3 15
} public static void main(String[] args){
method(24);
System.out.println(StaticTest.staticVar); //
}
}//end UseStatic class StaticDemo extends StaticTest{
static int sta;
int stb;
public StaticDemo() {
//super();
sta++;
stb++;
System.out.println("sta= "+sta+" stb= "+stb);
}
//此处不可将doSth声明为静态方法,即子类不能以static覆盖父类的非静态方法
public void doSth(){
super.doSth();
System.out.println("Sub do something");
}
//此处必须加上static修饰符,因为实例方法不能覆盖 StaticTest 中的静态方法
public static void doSthStatic(){
StaticTest.doSthStatic(); //静态方法不可用super关键字,用父类名直接访问
System.out.println("Sub do something static");
} public static void main(String[] args){
System.out.println("sta= "+sta);
new StaticDemo().doSth();
doSthStatic();
}
} ///:output:
/* StaticTEst
* testStatic
staticVAr= 1 instanceVar= 1
staticVAr= 2 instanceVar= 1
* main
0
staticVAr= 1 instanceVar= 1
staticVAr= 2 instanceVar= 1
staticVAr= 3 instanceVar= 1
instanceVar(whole) is:1
instanceVar(local) is:200
staticVar(whole) is:3
staticVar(local) is:500 *StaticDemo
sta= 0
staticVAr= 1 instanceVar= 1
sta= 1 stb= 1
Do something...
Sub do something
Do something static...
Sub do something static
*/
//:~~~
static关键字用法的更多相关文章
- ava下static关键字用法详解
Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static ...
- c语言中external,static关键字用法
static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...
- 【C#基础】static 关键字用法小结
静态变量 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用. 有时候,我们希望 ...
- 【转】Java中static关键字用法总结
1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...
- 【java_需阅读】Java中static关键字用法总结
1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...
- C++static关键字用法
一.static的作用有三种:限制变量或函数作用域.保持变量内容的持久.默认初始化为0 1.被static关键字修饰的全局函数或者变量具有文件作用域,即只在当前文件中可见. 2.被static修饰的变 ...
- Java中static关键字用法总结
1. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · ...
- c语言中static关键字用法详解
个人总结: 1.C不是面向对象的,在c中static修饰的变量或函数仅在当前文件中使用 2.C可以对局部变量使用static修饰(注意面向对象的java则不行),其放在全局区一直存在 概述static ...
- C语言:static关键字用法
参考博客:https://blog.csdn.net/guotianqing/article/details/79828100 看个例子: #include <stdio.h> void ...
随机推荐
- java-String基础篇
一.String字符串理解 java字符串类,包含了字符串的值和实现字符串相关操作的一些方法 1.String字符串可分静态字符串和动态字符串 静态初始化字符串:String s1 = "h ...
- SIFT定位算法关键步骤的说明
1. SIFT算法中一些符号的说明 $I(x,y)$表示原图像. $G(x,y,\sigma)$表示高斯滤波器,其中$G(x,y,\sigma) = \frac{1}{2\pi\sigma^2}exp ...
- 2016中国VR开发者论坛第一期
由VR界网和暴风魔镜联合举办的2016中国VR开发者论坛第一期已于3月2日下午5点在吉林动画学院圆满落幕,本次论坛云集了VR相关领域的精英,邀请了VR社交<极乐王国>.暴风魔镜.南京睿悦. ...
- Windows下用C++删除磁盘分区信息
做一个能对U盘重新分区的小工具,使用该方法删除U盘中原有的分区表. bool CCesDiskDll::DestroyDisk(unsigned char deviceNumber) { DWORD ...
- SQL Server 2008 数据库镜像部署实例之三 配置见证服务器
SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ...
- NDK SO 库开发与使用中的 ABI 构架选择
Bugtags V1.2.7 引入了 NDK SO 库,在集成的时候,遇到不同的 SO 库打包到 APK 时,安装在某些机器上,出现 java.lang.UnsatisfiedLinkError 加载 ...
- [ActionScript 3.0] AS3.0 火焰效果
package { import flash.display.Sprite; import flash.display.* import flash.events.Event; import flas ...
- Makefile 自动化变量
Makefile中常用自动化变量解释如下: $@------规则的目标文件名 $<------规则的第一个依赖项文件名 $^------规则的所有依赖文件列表,以空格隔开. $?-------所 ...
- div背景图片叠加
.box1{ width: 500px; height: 500px; background: url("")no-repeat,url("")no ...
- 如何实现Qlikview的增量数据加载
笔者备注: 刚刚接错Qlikview,上网搜集的资料,如何处理增量数据. 1 寻找增量时间戳(1)各种数据库:表的创建时间字段和修改时间字段或者最后的修改时间字段:(2)sql server:可以用找 ...