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 ...
随机推荐
- byte与char的区别
byte 是字节数据类型 ,是有符号型的,占1 个字节:大小范围为-128—127 .char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 ):大小范围 是0—65535 :char ...
- List和Map之间的转换和关联
首先,Map.values返回的是此Map中包含的所有值的collection视图. 然后利用ArrayList的构造器ArrayList(Collection<? extends E> ...
- ClientAbortException 异常解决办法
http://blog.sina.com.cn/s/blog_43eb83b90102ds8w.html ClientAbortException 异常解决办法 当我们用Servlet导出图片,或用J ...
- Delphi制作DLL
一.开使你的第一个DLL专案 1.File->Close all->File->New﹝DLL﹞ 代码: //自动产生Code如下 library Project2; //这有段废话 ...
- ORACLE随机查询
1. select * from (select * from tablename order by dbms_random.value) where rownum< N; 注:dbms_ran ...
- Intellij IDEA的激活
选server激活,填http://www.iteblog.com/idea/key.php即可 现在改为http://idea.iteblog.com/key.php
- 【php】assert函数的用法
[php]assert函数的用法 http://www.douban.com/note/217557007/ 2012-06-01 10:32:37 assert这个函数在php语言中是用来判断一 ...
- 在linux下python爬虫进程发生异常时自动重启直至正常结束的方法
之前在做爬虫的时候遇到一种情况,当网络情况不太好的时候,爬虫爬到的链接在urlopen时会因为无法正常连接而报URLError或者timeout的错误导致陈序报错而终止:但是这些错误在重新运行陈序后能 ...
- 全面了解 Linux 服务器 - 4. 查看 Linux 系统的平均负载
可使用 uptime.top.w 命令来查看. 以 uptime 命令为例: liuqian@ubuntu:~$ uptime 17:31:26 up 7:27, 2 users, load aver ...
- VBS编辑字段
'为已经创建好的数据表添加字段'参数:strDBPath 字符串型 数据库路径'参数:strTableName 字符串型 需要创建的数据表的名称'参数:strColumnName 字符串型 需要添加的 ...