在java当中有很多关键字,static便是其中一个,它很普通但我们经常需要运用到它,所以要了解static是非常有必要的。
 
鉴于本人知识结构有限,若有错误忘不吝赐教,甚为感谢。
 

一.static关键字基础

static是静态的意思,这个关键字主要有四种用法:

    1)static 修饰在类变量
    static修饰在类变量中,代表该类变量属于全局性变量,不跟随类的实例化而生成,可以直接通过类名.变量名直接访问
class MyStatic{

	public static int MY_STATIC_INT = 1;

	public static void main(String[] args) {

		System.out.println(MyStatic.MY_STATIC_INT);

	}
} // 1
 
 
从这段代码可以看出MY_STATIC_INT变量不依赖类的实例化就可以访问,这样的话static关键字可不可以脱离访问修饰符控制对所调用者可见呢?
class MyStatic{
private static int MY_STATIC_INT = 1;//访问修饰设置成private私有
}
class TestStatic{
public static void main(String[] args) {
System.out.println(MyStatic.MY_STATIC_INT); //编译错误
} }
 
显然static是无法脱离访问修饰符控制
 
2)static修饰方法
    (1)当static修饰方法时无需实例化类可(类名.方法名)直接访问。
    (2)并且static修饰的方法无法使用this,super等关键字。
              因为this关键字是指向当前对象的引用,而static修饰符方法是脱离类实例化对象的引用,super关键字是指向当前对象父类实例的引用,同理无法使用
    (3)static修饰的方法无法调用非静态方法,非静态方法可以调用静态方法
              非静态方法引用依赖于类的实例化对象,如果静态方法直接调用非静态方法,程序编译期就会报错,因为非静态方法根本没有实例化。
class MyStatic{
public static void isStaticMethod(){
System.out.println("isStaticMethod");
}
public void unStaticMethod(){
MyStatic.isStaticMethod();
}
}
class TestStatic{
public static void main(String[] args) {
MyStatic myStatic = new MyStatic();
myStatic.unStaticMethod();
}
}
//isStaticMethod
 
class MyStatic{
public static void isStaticMethod(){
unStaticMethod();//编译错误
}
public void unStaticMethod(){
System.out.println("isStaticMethod");
}
}
 
 
3)静态代码块
    (1)可以在同一类下有多个静态代码块,按顺序执行
    (2)静态代码块块在同一类中,只执行一次。
    (3)静态代码块中可调用静态方法,不能调用非静态方法
    (4)静态代码块先于构造器执行

public class KeyWordStatic extends IsFather{
public static String STATIC_VALUE = "1";
public KeyWordStatic(){
System.out.println("is coming constructor");
}
static{
System.out.println("is static block");
System.out.println(STATIC_VALUE);
staticMethod();
} public static void main(String[] args) {
KeyWordStatic keyWordStatic1 = new KeyWordStatic();
KeyWordStatic KeyWordStatic2 = new KeyWordStatic();
} public static void staticMethod(){
System.out.println("staticMethod");
}
} class IsFather{
public IsFather(){
System.out.println("it is father");
}
}
console:
//is static block
//1
//staticMethod
//it is father
//is coming constructor
//it is father
//is coming constructor
 

static关键字总结

   static关键是在java当中被广泛使用,掌握和理解static基本用法和规则是使用好static关键字的前提,static关键字修饰变量常配合final使用,作为全局性常量存在。
 
 
 
 
 
 

java基础之关键字static的更多相关文章

  1. java基础(五)-----关键字static

    在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块. ...

  2. Java基础-synchronized关键字的用法(转载)

    synchronized--同步 顾名思义是用于同步互斥的作用的. 这里精简的记一下它的使用方法以及意义: 当synchronized修饰 this或者非静态方法或者是一个实例的时候,所同步的锁是加在 ...

  3. Java基础(basis)-----关键字final和static的作用

       1.关键字final      final修饰类:这个类就不能被继承      final修饰方法:不能被重写      final修饰属性:此属性就是一个常量,一旦初始化后,不可再被赋值.习惯 ...

  4. Java基础——final、static关键字

    final关键字是最终的意思,可以修饰成员方法.成员变量.类 特点: 1.修饰方法:表示该方法是最终方法,不能被重写 2.修饰变量:表示变量是常量,不能再次被赋值 3.修饰类:表示类是最终类,不能被继 ...

  5. Java基础之关键字,标识符,变量

    Java基础 首先,来看一下Java基础知识图解,以下便是在java学习中我们需要学习设计到的一些知识(当然不是很完全). 这些都是接下来在以后的学习中我们会学到的一些知识. 1 关键字 首次先来学习 ...

  6. java基础---->final关键字的使用

    这里介绍一些java基础关于final的使用,文字说明部分摘自java语言规范.心甘情愿这四个字,透着一股卑微,但也有藏不住的勇敢. Final关键字的说明 一.关于final变量规范说明 .A fi ...

  7. Java面向对象之关键字static 入门实例

    一.基础概念 静态关键字 static 是成员修饰符,直接用于修饰成员. (一)特点: 1.被静态修饰的成果,可以直接被类名所调用. 2.静态成员优先于对象存在. 3.静态成员随着类的加载而加载.随着 ...

  8. java基础Synchronized关键字之对象锁

    java中Synchronized关键字之对象锁    当有多个线程对一个共享数据进行操作时,需要注意多线程的安全问题. 多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同 ...

  9. Java基础super关键字、final关键字、static关键字、匿名对象整理

    super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...

随机推荐

  1. S2b只适合于电商吗?

    万物互联时代,任何产业蓬勃发展都离不开互联网,从B2M.B2B.B2C.C2C.M2M,层出不穷的商业模式都让人眼花缭乱,最近还推出了s2b这个全新的模式. S代表着大的供应平台,它将更好地赋能给更多 ...

  2. oracle 恢复数据到某个时间点

    delete from tablename;insert into tablename select * from tablename as of timestamp to_timestamp('20 ...

  3. 关于在linux下清屏的几种技巧(转载-备忘)

    原文地址:http://www.cnblogs.com/5201351/p/4208277.html 在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢 ...

  4. git实用攻略(二)

    最近团队的版本控制从svn切换到了git,虽说已经使用git有2年多了,也写了一个实用攻略,但是github上的项目使用经验和公司内部团队协作的使用经验还有很多不同.补充下新的使用体会. 首先还是看一 ...

  5. Qt音乐播放器制作(二)Easy Player

    两天没有公布新的动态.主要原因还是个人的生活和工作时间限制,如今赶晚贴出第二版. 先放个图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamFuNV9y ...

  6. 为什么MOBA、“吃鸡”游戏不推荐用tcp协议——实测数据

    欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云游戏行业资深架构师 余国良 MOBA类和"吃鸡"游戏为什么对网络延迟要求高? 我们知道,不同类型的游戏因为玩法. ...

  7. 注册Azure AD 2.0 应用程序

    作者:陈希章 发表于 2017年3月22日 上一篇 介绍了Microsoft Graph应用程序的一些概念,以及目前还比较普遍的Azure AD 1.0应用程序的注册方式.但正如我多次提到的那样,虽然 ...

  8. MAC系统里JDK版本切换

    1.首先安装需要的JDK版本 JDK7,JDK8则需要自己到Oracle官网下载安装对应的版本.自己安装的JDK默认路径为:/Library/Java/JavaVirtualMachines/jdk1 ...

  9. 小白的Python之路 if __name__ == '__main__' 解析

    if __name__ == '__main__' 参考文献: http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html http ...

  10. JavaScript基础4——关于语句流程控制(分支语句、循环语句等)

    分支语句 (1)if...else...语句,基本格式分三种,如下 <script type="text/javascript"> var i=50; //if语句 i ...