我们可以基于一个类创建多个对象,每个对象都拥有自己的成员,所有成员变量的值是根据对象而存在的,有些时候我们希望一个类的所有对象共享一个成员,这就用到了static静态关键字

  被静态关键字修饰的成员属于静态成员,它属于整个类所有,而并不仅仅是一个对象中的成员所共享,当系统第一次使用该类时,就会为其分配内存空间,直到该类被销毁是才进行资源回收,静态成员也有自己特有的访问方法

  static可以修饰变量、方法、代码块

  1、静态变量

  因为局部静态变量和局部变量的使用方法一样,直接使用即可,所以对于类中定义的静态成员变量,非静态方法可以直接通过变量名访问,不用考虑其他,对于静态方法,最典型的就是public static void main(String[] args)这个入口方法,如果在这样的静态方法内部访问,需要用"类名.静态变量名"的方式进行访问,比如Hello.abc当然也可以先实例化对象,然后通过对象.静态变量名的方式来访问,但是还是推荐使用类名.静态变量名进行访问

  2、静态方法

  上面说了静态方法内部访问静态成员变量的方法,并且静态方法可以直接访问本类的静态变量和静态方法,不用加任何修饰,访问其他类则推荐使用类名.成员名的方式访问;那么访问普通成员变量呢?不能直接访问,应该先实例化对象,然后通过对象.成员变量名的方式进行访问,但是普通方法可以直接访问静态方法和静态变量;同理静态方法不能直接访问普通方法,也需要实例化对象.方法,这样的方式来访问普通方法。

  3、静态代码块

  Java在初始化变量的时候可以使用public String name = "abc";这样的方法来初始化变量的值,也可以通过下面代码块实现:

 public class Hello {
public String name; //定义成员变量
{ //初始化块赋值
name = "abc";
}
}

  可以使用多个初始化块,当创建类的实例时,会依次执行这些代码块,通过static关键字修饰的代码块称为静态代码块;

  静态代码块的初始化内容只能执行一次,再次被实例化时将不会被执行;

  静态代码块中只能初始化静态变量,不能放置普通变量;

  我们可以看个例子:

 public class Hello {
int num1;
int num2;
static int num3;
public Hello(){
num1 = 30;
System.out.println("通过构造方法给num1赋值");
}
{
num2 = 60;
System.out.println("通过初始化块给num2赋值");
}
static {
num3 = 90;
System.out.println("通过静态初始化块给num3赋值");
} public static void main(String[] args){
Hello he = new Hello();
System.out.println("num1:" + he.num1);
System.out.println("num2:" + he.num2);
System.out.println("num3:" + num3);
Hello he1 = new Hello();
}
}

这个输出什么呢?可能输出和我们想象的有点相反,正确输出如下:

通过静态初始化块给num3赋值

通过初始化块给num2赋值

通过构造方法给num1赋值

num1:30

num2:60

num3:90

通过初始化块给num2赋值

通过构造方法给num1赋值

根据上面的输出结果可以看出,在实例化对象时静态初始化块最先执行,然后执行普通初始化块,最后才执行构造方法;并且由于静态初始化块只在类被加载时执行一次,所以第二次实例化对象时没有被执行,这就是静态初始化块的执行顺序和特点

最后总结一点静态和普通就好像是两个权限,普通的好像权限高一些,可以直接操作静态,但是静态要操作普通的则要复杂一些,需要实例化才可以

Java中static静态关键字的使用的更多相关文章

  1. php中static 静态关键字

    一直依赖对于php中static关键字比较模糊,只是在单例模式中用过几次.上网查了查,没有找到很全的介绍,自己总结一下. 根据使用位置分为两部分 1.函数体中的静态变量 2.类中的静态属性和方法 1 ...

  2. Java之static静态关键字详解|final关键字详解

    前言 在Java语言中,static表示"静态"的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块.static的主要作用在于创建独立于具体对象的域变量或者方法 ...

  3. php中static静态关键字的使用

    php中除了常规类和方法的使用,访问控制之外,还有静态关键字static,静态变量可以是局部变量也可以是全局变量,当一个程序段执行完毕时,静态变量并没有消失,它依然存在于内存中,下次在定义时还是以前的 ...

  4. php中static静态关键字的使用方法和应用场景

    php中除了常规类和方法的使用,访问控制之外,还有静态关键字static,静态变量可以是局部变量也可以是全局变量,当一个程序段执行完毕时,静态变量并没有消失,它依然存在于内存中,下次在定义时还是以前的 ...

  5. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  6. 关于Java中的final关键字

    Java中的final关键字是用来限制用户行为的,说白了,就是用来限制我们这些程序员的.final可以用来修饰:变量.方法.类. 1)Java final variable final用来修饰变量时, ...

  7. Java之Static静态修饰符详解

    Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...

  8. Java中static、this、super、final的用法

    一.          static 请先看下面这段程序: public class Hello{public static void main(String[] args){//(1)System. ...

  9. Java中static的用法,初始化块

    使用 Arrays 类操作 Java 中的数组语法: Arrays.sort(数组名); 可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该 ...

随机推荐

  1. jstl是自动就有的吗,不是的Unknown tag (c:if).

    这个错误的原因就是没有导包 http://www.runoob.com/jsp/jsp-jstl.html 这个网站有方法

  2. TCP/IP详解 学习七

    静态选路的前提: 1)         网络比较小 2)         网络之间单点连接 3)         网络之间没有多余的路由 动态选路协议,用于路由器之间的通信,有以下几种: 1)     ...

  3. poj1733Parity game

    Parity game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7288   Accepted: 2833 Descr ...

  4. HD2444The Accomodation of Students(并查集判断二分图+匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  5. 透透彻彻IoC(你没有理由不懂!)

    http://www.myexception.cn/open-source/418322.html 引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明 ...

  6. Android应用目录结构分析

    一.手动创建android项目 手动创建一个Android项目,命名为HelloWorld,命令如下: android create project -n HelloWorld -t 1 -p E:/ ...

  7. jquery------添加jQuery对象方法

    my.js $(document).ready(function(){ (function($){ $.fn.swapClass=function(class1,class2){ if(this.ha ...

  8. -----------------------------------项目中整理的非常有用的PHP函数库(一)-----------------------------------------------------

    1.PHP加密解密 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密. function encryptDecrypt ...

  9. web漏洞总结

    目录: 1.sql注入获取数据库信息2.sql注入绕过管理后台登录3.反射型xss4.存储型xss5.csrf6.文件上传7.暴力破解8.目录遍历9.权限跨越10.文件包含11.未知漏洞 web漏洞演 ...

  10. Windbg对过滤驱动DriverEntry函数下断点技巧

    方法1: 1> 先用DeviceTree.exe查看指定的过滤驱动的Load Address(加载地址) 2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址 3> 计算过 ...