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 ...
随机推荐
- Downloader调用WCF服务返回文件
Generator using System; using System.Collections.Generic; using System.IO; namespace Downloader { pu ...
- POJO类中的任何布尔类型的变量,都不要加is
POJO类中的任何布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误. 定义为基本数据类型boolean isSuccess:的属性,它的方法也是isSuccess(),HSF框架在反向解 ...
- Install Qt creator
download qt for linux yum install dialog move download qt file(qt-opensource-linux-x64-5.6.0.run) fr ...
- winform中dataGridView高度自适应填充完数据的高度
// winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度是根据数据的多少而变动. 在load的时候,数据绑定后,加上如下代码: ...
- php利用zookeeper作dispatcher服务器
===== https://blog.eood.cn/php_share_memory 最常见的apc 可以缓存php的opcode提高应用的性能,可以在同个php-fpm进程池间共享数据 常见功能: ...
- [Tex学习笔记]积分平均
$\def\avint{\mathop{\mathchoice{\,\rlap{-}\!\!\int} {\rlap{\raise.15em{\scriptstyle -}}\kern-.2em\in ...
- mysql 语法总结
设置SQL语句所用的字符编码:set names UTF8; 判断指定的数据库是否存在:DROP DATABASE IF EXISTS 库; 开始使用指定的数据库:USE 库; 创建数据库CREAT ...
- jquery判断复选框checkbox是否被选中
jquery判断复选框checkbox是否被选中 使用is方法 //如果选中返回true //如果未选中返回false .is(':checked');
- 极限编程之TDD
测试驱动开发(Test-Driven Development,TDD)是通过测试定义所要开发的功能的接口,然后实现功能的开发过程. Test-Driven Development(TDD), ...
- itextSharp 附pdf文件解析
一.PdfObject: pdf对象 ,有9种,对象是按照对象内涵来分的,如果按照对象的使用规则来说,对象又分为间接对象和直接对象.间接对象是PDF中最常用的对象,如前面对象集合里面的,所有对象都是间 ...