Static关键字

理解Static关键字

基本使用

public class StaticTest {
    public static int staticVar=0;
    public int instanceVar=0;
    public void Speak(){
        System.out.println(instanceVar);
    }
    static void Speak2(){
        System.out.println(staticVar);
    }
    public  static void main(String[] args) {
        StaticTest st=new StaticTest();
        System.out.println(staticVar);
        System.out.println(st.instanceVar);
        st.Speak();
        Speak2();
    }
}

在语法定义上的区别:静态变量前要加static关键字,而实例变量则不加

在程序运行时的区别:实例变量属于某个对象的属性,必须穿件了实例对象,其中的实例变量才会被分配空间,才能使用实例变量。静态变量不属于某个实例对象,而是属于类,所以也被称为类变量,只需要程序加载了这个类该静态变量就被分配了空间,静态变量就可以使用。.

注意:不可以从一个static方法内部发起对非static方法的调用,因为方法与对象无关,或者说static方法是在类引入后出现,此时没有对象,在没有对象的情况下无法调用需要对象才分配空间的非static方法。
在这里插入图片描述

深入理解

Static修饰的变量被称为类变量,类变量具有以下的特征:

  1. 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外,在方法内声明会报错。
    在这里插入图片描述

  2. 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。

public class StaticTest {
   public static int staticVar=0;
   public int instanceVar=0;
   public StaticTest(){
       staticVar++;
       instanceVar++;
       System.out.println("静态变量:"+staticVar);
       System.out.println("动态变量:"+instanceVar);
   }
  
}
public class StaticTest2 {
    public static void main(String[] args) {
        StaticTest staticTest1=new StaticTest();
        StaticTest staticTest2=new StaticTest();
        StaticTest staticTest3=new StaticTest();
        StaticTest staticTest4=new StaticTest();
    }
}

在这里插入图片描述

  1. 静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。

  2. 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。

​ 在JMM中,内存总体来说被分为四个区域(涉及到线程并发常化简堆区域 和栈区域)stack区、heap区、code区、data区。static存储于data区域,此时可以知道在heap区新建的对象,对static的数是能起到加的作用,而对于自身非static变量,则是新建。

public class TreadTime {
    static int  total=0;

    static void P0()
    {
        int i=1;
        for(i=1;i<=10;i++) {
            total = total + 1;
        }
        System.out.println(total);
    }
    static void P1()
    {
        int i;
        for(i=1;i<=10;i++) {
            total = total + 1;
        }
        System.out.println(total);
    }

    public static void main(String[] args) {
            P1();
            P0();
    }
}
  1. 静态变量在第一次被访问时创建,在程序结束时销毁。

  2. 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。

  3. 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。

  4. 静态变量可以通过:ClassName.VariableName的方式访问。

  5. 类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。

Static{}----静态初始化块

1、与对象无关,满足static的特征,一个类只执行一次;

2、执行的时机是加载的时候

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值