我们可以基于一个类创建多个对象,每个对象都拥有自己的成员,所有成员变量的值是根据对象而存在的,有些时候我们希望一个类的所有对象共享一个成员,这就用到了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. 【ZOJ 3844】Easy Task

    题意 每次把序列中最大的数a的一个和最小的数b的一个变成a-b.求最后是否能使序列里的数全部相同,能则输出这个相同的数. 分析 一定是有解的,不断减少最大数的个数,最大数减少为0个时,就是减少了不同数 ...

  2. BIEE 维表

    (1)       在物理层给表创建别名(表——>新建对象——>别名) (1)       在业务层创建维度(表——>创建逻辑维——>基于级别层次的维) 钻取是维本身的功能 一 ...

  3. PLSQL导入Excel表中数据

     PL/SQL 和SQL Sever导入excel数据的原理类似,就是找到一个导入excel数据的功能项,按照步骤走就是了.下面是一个些细节过程,希望对像我这样的菜鸟有帮助.  www.2cto.co ...

  4. 洛谷P2279 [HNOI2003]消防局的设立

    题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状 ...

  5. 洛谷P2320 [HNOI2006]鬼谷子的钱袋

    https://www.luogu.org/problem/show?pid=2320#sub 题目描述全是图 数学思维,分治思想 假设总数为n 从n/2+1到n的数都可以用1~n的数+n/2表示出来 ...

  6. Activity启动模式 及 Intent Flags 与 栈 的关联分析

     http://blog.csdn.net/vipzjyno1/article/details/25463457    Android启动模式Flags栈Task   目录(?)[+] 什么是栈 栈 ...

  7. POJ1651Multiplication Puzzle(矩阵链乘变形)

    Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8040   Accepted: ...

  8. java链接到mysql

    原文出自 http://qq163230530.blog.163.com/blog/static/4289250620081186262719/ eclipse 下载安装后 新建web项目 首先配置服 ...

  9. linux3

    第一课:date +%Y-%m-%d 显示日期date +%H:%M 显示小时分钟date 显示日期 vi /etc/sysconfig/network-scripts/ifcfg-eth0 网卡配置 ...

  10. 多一个“点”给IIS与ASP.NET带来的问题

    [IIS] 一个网站如果用的是IIS(假设没有在前端7层负载均衡中对这种场景进行特殊处理),只要在浏览器地址栏中输入这个网站的域名并加上“.”,比如:www.cnblogs.com. ,就会引发“Ba ...