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 ...
 
随机推荐
- world machine, 输出lightmap
			
一,输出黑白lightmap: 二,输出彩色lightmap: 需要注意的是:当输出黑白lightmap时,输出设备要用Height Output:当输出彩色lightmap时,输出设备要用Bitma ...
 - Spring中的ApplicationContext事件机制
			
ApplicationContext的事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListerner接口来实现. 1. 创建EmailEvent pu ...
 - 8、java继承中的this和super的应用
			
java中只支持单继承,这是为了防止继承的父类中出现同样的函数不知道调用哪个好.虽然java只支持单继承但是有多实现来补偿. 子父类出现后,类成员的特点: 类中成员:1,变量.2,函数.3,构造函数. ...
 - bzoj1837: [CROATIAN2009]cavli 凸包1
			
Description 给你N个点,请循环完成下列任务 1:求出这N个点的凸包的面积 2:拿掉最左或最右或最上或最下的一个点,当点的个数不足三个时停止 Input 第一行,一个数字N 接下来N行,每行 ...
 - HTC Vive开发笔记之SteamVR插件集成
			
重要组件 SteamVR_Camera VR摄像机,主要功能是将Unity摄像机的画面进行变化,形成Vive中的成像画面 使用方法: l 在任一个摄像机上增加脚本 l 点击Expand按钮 完成以上操 ...
 - 使用属性动画简单实现view飞入效果
			
比较简单的效果,可以用来菜单飞入之类,作为记录吧, package com.test.animation; import android.app.Activity; import android.os ...
 - Blackfin DSP(七):用SPORT口模拟SPI
			
1.问题的提出 当系统从SPI device启动时,若SCLK = 133M,则SPI的最大速度为33M.然而,有一些串行的flash设备能更快的运行,因此,如果我们使用SPORT口,它的最大速度为S ...
 - The trash has reached its maximum size
			
From: http://hi.baidu.com/aipie0066/item/1d7fb3e3a4710b3a4cdcaf5e The trash has reached its maximum ...
 - 在silverlight中通过WCF连接ORACLE DB数据库(转)
			
转自 http://hi.baidu.com/qianlihanse/item/458aa7c8d93d4e0cac092ff4 这不是我的原创,我也是上网学习的~ How to get data f ...
 - 用 Navicat 写mysql的游标
			
千言万语也比不上一个简单直接明了的小例子: CREATE PROCEDURE pro_users() begin DECLARE myid int; DECLARE no int; ); ); ); ...