zoukankan      html  css  js  c++  java
  • 201671010127 2016-2017-8 回谈static修饰符

      上周学了泛型程序程序设计技术,再一次接触到了静态方法,那么今天就来谈一下static修饰符。

      static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念(C语言中有)。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象,static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过对象或者类名直接访问,访问语法为:

    类名.静态方法名(参数...)
    类名.静态变量名

      

    1、static变量

    按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问,当然也可以通过对象来访问(但是这是不推荐的)。

     对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。

    所以一般在需要实现以下两个功能时使用静态变量:
     (1)在对象之间共享值时
     (2)方便访问变量时

    public class Test {
    public static int a;//静态属性
    }

    我们可以在Run访问这个属性

    public class Run {
    public static void main(String[] args) {
    //我们可以使用类名直接访问
    Test.a=1;
    //当然我们也可以使用对象来访问,虽然不推荐这样做
    Test t1=new Test();
    Test t2=new Test();

    //如果是普通变量,那么每个变量输入各自的对象
    //但是静态变量是所有的对象所共享的
    t1.a++;
    t2.a++;
    System.out.println(Test.a);//输出为3
    }
    }

    2、静态方法

    静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

    静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明成静态的,一个类内部的方法一般都是非静态的。

    我们在Test类中添加一个静态方法

    public static void hello(){
    System.out.println("静态方法");
    }

    我们可以直接使用类名访问。

    Test.hello();//直接使用类名访问

    3、static代码块

    static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。例如:

    //静态语句块

    static{
    Test.a = 3;
    System.out.println("Test类中:"+a);
    }

    运行结果:

    Test类中:3

    3

    静态方法

    利用静态代码块在main方法运行之前就运行了。我们可以对一些static变量进行赋值。

  • 相关阅读:
    编译安装LEMP
    eAccelerator配置和使用指南
    /dev/null的用途
    分库分表
    JVM
    SOFA 数据透析
    HTTPS
    SOFA 通信
    分布式锁
    mysql 锁
  • 原文地址:https://www.cnblogs.com/nbq520/p/7751010.html
Copyright © 2011-2022 走看看