Static关键字的用法(小白整理)

来源:互联网 发布:网络测试 编辑:程序博客网 时间:2024/06/07 13:03

就我现在知道的static关键字的用法有如下几点:
1).修饰类成员变量和成员方法(static只能修饰类成员变量),使其成为静态成员变量和静态方法;静态成员变量和静态方法可以把它们理解为类的属性和方法,是类的所拥有的东西,它们是先于对象创建的,在类加载(类加载是在创建对象之前进行加载)的时候就在系统内存中为其分配了相应的空间;因为它们是先与对象创建的,所有可以不用创建对象就可以对其进行调用;创建对象后,也可以通过对象调用,所有的对象都是共享静态成员变量和方法的;也就是说,其中一个对象对变量的值进行了修改,其他对象调用这个变量得到的就是修改后的变量。
代码测试如下:

public class TestStatic {    public static void main(String[] args) {        System.out.println(Static_.a);//类直接调用变量        Static_.fun();//类直接调用方法        //创建2个对象        Static_ s1 =new Static_();        Static_ s2 = new Static_();        //对象调用属性        System.out.println(s1.a);        System.out.println(s2.a);        //修改过后,重新输出        s1.a = 10;         System.out.println(s1.a);        System.out.println(s2.a);    }}class Static_{    //静态变量    public static int a = 3;    public Static_() {    }    public static void fun(){        System.out.println("静态方法");    }}

这里写图片描述
2).static修饰代码块,表示静态代码块,代码块就是写在一对大括号中的一段代码,在大括号前加个static关键字修饰,就成了静态代码块;静态代码块的执行时机也是在对象创建前(类加载的时候)执行,并且在整个程序运行过程中只执行一次;
代码测试如下:

public class TestStatic {    public static void main(String[] args) {        //创建2个对象,测试静态代码块的执行顺序        Static_ s1  = new Static_();        Static_ s2  = new Static_();    }}class Static_{    static  {System.out.println("静态代码块1被执行!");}    public Static_() {        // TODO Auto-generated constructor stub        System.out.println("对象创建成功!");    }    static  {System.out.println("静态代码块2被执行!");}}

这里写图片描述
3)修饰成员内部类:自动升级为普通类,相当于一个独立的类。当static修饰成员内部类的时候,不用创建外部类对象,可直接创建成员内部类对象。但是需要导包。

import TestStatic.Static_.Inner;public class TestStatic {    public static void main(String[] args) {        Static_.Inner inner = new Inner();    }}class Static_{    public Static_() {        // TODO Auto-generated constructor stub    }    public static class Inner{        public Inner(){            System.out.println("成员内部类创建成功!");        }    }}

这里写图片描述
在java中,如果一个类中的所有方法,属性都是用static修饰的话,那么这个类被叫做工具类;