static修饰符

来源:互联网 发布:自动股票交易软件 编辑:程序博客网 时间:2024/05/17 02:05
static修饰符可以用来修饰类的成员变量,成员方法和代码块
1.用static修饰的成员变量表示静态变量,可以直接通过类名来访问
2.用static修饰的成员方法表示静态方法,可以直接通过类名来访问
3.用static修饰的程序代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块
被static所修饰的成员变量和成员方法表明归某个类所有,它不依赖于类的特定实例,被类的所有实例共享。
只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定位它们

static 变量
类的成员变量分为两种:一种是被static修饰的变量,叫类变量或静态变量;
                   另一种是没有被static修饰的变量,叫实例变量。
静态变量与实例变量的区别:
静态变量在内存中只有一个拷贝,运行Java虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配
对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中多处拷贝,互不影响
在类的内部,可以在任何方法内直接访问静态变量;在其他类中,可以通过某个类的类名来访问它的静态变量
public class Sample1
{
    static intnumber = 1;
    publicstatic void main(String[] args)
    {
   Sample2.method();
       Sample1 s = new Sample1();
       System.out.println(number);
       System.out.println(Sample1.number);
       System.out.println(s.number);
    }
}
class Sample2
{
    publicstatic void method()
    {
       Sample1.number++;
    }
}
打印结果是:
2
2
2




static 方法
成员方法分为静态方法和实例方法。用static修饰的方法叫做静态方法,或类方法。静态方法也和静态变量一样,不需要创建类的实例,可以直接通过类名来访问
1.静态方法可访问的内容
因为静态方法不需要通过它的所属类的任何实例就会被调用,因此在静态方法中不能使用this关键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接
访问所属类的静态变量和静态方法。
静态方法也不能使用super关键字
2.实例方法可访问全部
3.在main()创建实例,然后通过实例来访问成员变量和方法
在执行这个静态方法时,由于创建了实例,JAVA虚拟机能能明确知道到底执行哪个实例的实例变量和实例方法,因此在静态方法内访问实例变量和实例方法,它会顺利
地从堆区找到那个实例的实例变量和实例方法
作为程序入口的main()方法,为什么必须用static修饰,因为把main()方法定义为静态方法,可以使得方
法,而无需创建这个类的实例
4.静态方法必须被实现
静态方法用来表示某个类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。既然如此,当前类必须为静态方法提供实现
5.方法的字节码都位于方法区
不管是实例方法,还是静态方法,它们的字节码都位于方法区内,Java编译器把Java方法的源程序代码编译成二进制的编码,成为字节码。
Java虚拟机的解析器能够解析这种字节码
6.static代码块
类中可以包含静态代码块,它不存在于任何方法体中。在Java虚拟机加载类时就会执行这些静态代码块,如果类中包含多个静态代码块,那么Java虚拟机将按照它在类中出
现的顺序依次执行,每个静态代码块只会被执行一次
public class Example
{
   static{
       System.out.println("1");
    }
   static{
       System.out.println("2");
    }
    publicstatic void main(String[] args)
    {
   System.out.println("3");
    }
}
打印结果是
1
2
3


类的构造方法用于初始化类的实例,而类的静态代码块则可用于初始化类,给类的静态变量赋初始值


静态代码块与静态方法一样,也不能直接访问类的实例变量和实例方法,而必须通过实例的引用来访问它们

原创粉丝点击