static 关键字主要有以下几种使用场景:

  • 修饰类的成员变量。
  • 修饰类的成员方法。
  • 修饰类的代码块。
  • 修饰内部类。

1. static 修饰类的成员变量时,被称为静态成员变量。引用 static 修饰的成员变量时,无需创建类的实例对象,可直接使用 类.变量名 进行调用。

代码示例:

public class Student {

    int age;  //普通变量
static String name; //静态变量 }
public static void main(String[] args) {

    Student student = new Student();
System.out.println(student.age); //普通成员变量,需要实例化对象进行调用
System.out.println(Student.name); //静态成员变量,无需实例化对象即可调用 }

2. static 修饰类的成员方法时,被称为静态成员方法。引用 static 修饰的成员方法时,无需创建类的实例对象,可直接使用 类.方法名 进行调用。

代码示例:

public class Student {

    /**
* 普通方法
*/
public void haha(){} /**
* 静态方法
*/
public static void say(){} }
public static void main(String[] args) {

    Student student = new Student();
student.haha(); //普通成员方法,需要实例化对象进行调用
Student.say(); //静态成员方法,无需实例化对象即可调用 }

3. static 修饰类的代码块时,被称为静态代码块。在类加载时,静态代码块先执行,其次是普通代码块,最后是类的构造方法。而且不管类创建多少对象,静态代码块只执行一次,  而普通代码块和构造方法会执行多次。

代码示例:

public class Student {

    Student(){
System.out.println("我是默认的构造方法");
} {
System.out.println("我是代码块");
} static {
System.out.println("我是被static修饰的静态代码块");
} }
public static void main(String[] args) {

        Student s1=new Student();
Student s2=new Student(); }

输出结果:

我是被static修饰的静态代码块
我是代码块
我是默认的构造方法
我是代码块
我是默认的构造方法

4. static 只能修饰内部类,不能修饰普通类。

代码示例:

public class Student {
private String name; public static class School{ //static修饰的内部类
private String name;
} }

看下面的代码示例:

public class Student {

    int age;  //普通变量
static String name; //静态变量 {
System.out.println("我是代码块1");
} {
System.out.println("我是代码块2");
} static {
System.out.println("我是被static修饰的静态代码块1");
} static {
System.out.println("我是被static修饰的静态代码块2");
} Student(){
System.out.println("我是默认的构造方法");
} /**
* 普通方法
*/
public void haha(){
System.out.println("我是一个普通方法");
System.out.println(name);
} /**
* 静态方法
*/
public static void say(){
System.out.println("我是一个静态方法");
} }
public class Main{

    public static void main(String[] args) {

        Student.name="张三";

        Student s1=new Student();
Student s2=new Student();
s2.haha(); Student.say();
} }

运行结果:

我是被static修饰的静态代码块1
我是被static修饰的静态代码块2
我是代码块1
我是代码块2
我是默认的构造方法
我是代码块1
我是代码块2
我是默认的构造方法
我是一个普通方法
张三
我是一个静态方法

从上面的代码和运行结果可以得出以下结论:

  • 被 static 修饰的变量,无需创建类的实例变量,可以直接使用 类.变量名 进行调用,进而取值或者赋值。
  • 被 static 修饰的方法,无需创建类的实例变量,可以直接使用 类.方法名 进行调用。
  • 被 static 修饰的变量和方法属于类的,被所有的对象共享。
  • 当 new 一个对象时,如果类中有静态代码块和普通代码块,那最先执行的是静态代码块,其次是普通代码块,最后才是类的构造方法。
  • 如果一个类中有多个静态代码块,那么执行的时候,从上往下依次执行。
  • 无论创建多少个实例对象,类中的静态代码块只会执行一次,而普通代码块会多次执行。
  • 在静态成员方法内部不能调用非静态成员变量,而非静态成员方法则没有此限制。
  • static不能修饰局部变量。

总结性描述:

static表示静态的意思,一般用于修饰成员变量(类变量、静态变量)和成员函数(类方法、静态方法),被static修饰的方法只能访问静态成员变量和静态方法,不可以直接访问非静态成员变量和非静态方法;非静态方法可以直接调用静态的变量和方法。静态是随着类的加载而加载的,因此可以直接用类进行访问。static也可以修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需要实例一个外部类。

请看一下下面的代码示例:

public class Student {

    {
System.out.println("我是代码块");
} static {
System.out.println("我是被static修饰的静态代码块");
} public Student(){
System.out.println("我是默认的构造方法");
} }
public class ZhangSan extends Student{

    {
System.out.println("111我是代码块");
} static {
System.out.println("111我是被static修饰的静态代码块");
} public ZhangSan(){
System.out.println("111我是默认的构造方法");
}
}
public class Main{

    public static void main(String[] args) {

        ZhangSan zhangSan = new ZhangSan();

    }

}

运行结果:

我是被static修饰的静态代码块
111我是被static修饰的静态代码块
我是代码块
我是默认的构造方法
111我是代码块
111我是默认的构造方法

static 关键字的使用及说明的更多相关文章

  1. 浅谈Static关键字

    1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...

  2. (转)Java中的static关键字解析

    转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...

  3. PHP的final关键字、static关键字、const关键字

    在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...

  4. Java Static关键字详解

    提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...

  5. 关于Java中的static关键字

    Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...

  6. Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  7. c++中static关键字的用法总结

    类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类体中 ...

  8. static关键字

    static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象. 1.static关键字的特点 a:随着类的加载而加载 b:优先于对象存在 (还 ...

  9. C++中的static关键字的总结

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...

  10. (转)Java中的static关键字解析

    转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...

随机推荐

  1. java Logger 类

    package org.rx.common; import org.slf4j.LoggerFactory; import java.util.Collections; import java.uti ...

  2. php 常用加密函数

    md5()md5()默认情况下以 32 字符十六进制数字形式返回散列值,它接受两个参数,第一个为要加密的字符串,第二个为raw_output的布尔值,默认为false,如果设置为true,md5()则 ...

  3. 杂项-WebService:WebService

    ylbtech-杂项-WebService:WebService Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个 ...

  4. 提升R代码运算效率的11个实用方法

    提升R代码运算效率的11个实用方法 众所周知,当我们利用R语言处理大型数据集时,for 循环语句的运算效率非常低.有许多种方法可以提升你的代码运算效率,但或许你更想了解运算效率能得到多大的提升.本文将 ...

  5. 【二叉树】二叉树常用算法的C++实现

    常见算法有: 1.求二叉树的最大深度 2.求二叉树的最小深度 3.二叉树的层次遍历 4.二叉树的前序遍历 5.二叉树的中序遍历 6.二叉树的后序遍历 7.求二叉树的节点个数 8.求二叉树的叶节点个数 ...

  6. npm和cnpm的安装(window)

    一:安装node.js 1.进入https://nodejs.org/en/中下载自己电脑相对应的node.js. 2.将下载下来的node.js进行安装. 3.利用管理员身份打开cmd,在里面输入n ...

  7. 高效IO之Dex加密(三)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 apk加固原理之dex加密 原理其实不复杂,加固其实就是加密dex文件,防止de ...

  8. Logic回归总结

    转自http://blog.csdn.net/dongtingzhizi/article/details/15962797 当我第一遍看完台大的机器学习的视频的时候,我以为我理解了逻辑回归,可后来越看 ...

  9. js面向对象(一)---基本的概念、属性、方法

    一.什么是面向对象编程 1.用对象的思想去写代码,就是面向对象编程 2.我们一直在使用对象,如数组Array    时间Date //我们把系统自带的对象,叫做系统对象 var arr = new A ...

  10. !vtop 命令

    这命令超级牛B ,用途是算内存所在屋里地址 !vtop 命令可以有两个参数,第一个参数是CR3 寄存器的值,第二个参数是要查询的虚拟地址是多少,比如 kd> !vtop 19001e0 7c80 ...