static

目录

static(静态修饰符)是什么          

为什么要有static

            Static有什么用

Static用在哪、什么时候用

1,静态变量    

2,静态函数

  3.静态代码块

成员变量和静态变量(static修饰的成员变量)的区别

final



static(静态修饰符)是什么
          

static是一个静态修饰符,可以修饰变量、方法、代码块

 

为什么要有static

我们知道,java中想要使用对象,必须使用new来创建对象,为其开辟空间,该对象才能被使用。但有些情况没有办法解决:

1、我们想要为特定的域分配单一的存储空间,并不在乎是不是需要创建对象,一个,N个,零个对象都无所谓。

2、我们希望某个方法不与包含它的类的任何对象有联系,也就是不创建这个对象,我们也能使用这个方法。

为了满足上面的两种需求,static诞生了。


            
Static有什么用

static的特点:

 - static修饰的成员被所有的对象所共享。(多个对象共同使用同一个static成员)

 - static优先于对象存在,因为static的成员随着类的加载就已经存在了,且随着类的消失而消失,只执行一次。

 - static修饰的成员多了一种调用方式,就可以直接被类名所调用(类名.静态成员) 。

 - static修饰的数据是共享数据,对象中的存储的是特有数据。

先看着,有个印象,往下看看   反正都得掉过头回来看的。哈哈

 

Static用在哪、什么时候用

 

1,静态变量
    

 - 当对象中所具备的成员变量的值都是相同的,可以共享时,这时这个成员变量就可以被静态修饰。
 - 当数据在对象中都是不同的,是对象的特有数据时,该数据就必须存储在对象中,是非静态的。

    

 - 当对象使用的是相同的数据,不需要做修改,不需要存储在对象中时,该数据就可以定义成静态的。

注意: 非静态的成员变量只能使用对象进行访问(对象.变量名),不能使用类名进行访问。


2,静态函数

 - 从源代码看,看该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。
 - 如果不需要,就可以将该功能定义成静态的。当然,也可以定义成非静态。(即看该函数的功能是否有访问到对象中的特有数据,有则非静态,无则皆可。)

    


注意: 

 - 静态方法只能访问静态成员,不能直接访问非静态的成员(成员变量、成员函数)。非静态既可以访问静态,又可以访问非静态。

      (原因:静态方法可以用类名直接调用,此时可能还没有对象,而非静态成员是随着对象的加载而加载的,没有对象则没有非静态成员)
 - 静态方法中不可以使用this或者super关键字。

        (原因:静态的函数是可以使用类名调用的,一旦使用类名调用,这时候不存在对象,而关键字this是代表了一个函数的调用者对象,这时候产生了冲突。)
 - 主函数是静态的。


 
 3.静态代码块


     
 - 静态代码块:静态代码块所属的类被加载到内存的时候执行的。
 - 静态代码块的应用场景:以后主要用于准备一个项目的初始化工作。
                   比如:从配置文件中读取数据库用户名与密码。

成员变量和静态变量(static修饰的成员变量)的区别


1,两个变量的生命周期不同。
    成员变量随着对象的创建而存在,随着对象的被回收而释放。
    静态变量随着类的加载而存在,随着类的消失而消失。

2,调用方式不同。
    成员变量只能被对象调用。
    静态变量可以被对象调用,还可以被类名调用(类名.静态成员)。

3,别名不同。
    成员变量也称为实例变量。
    静态变量称为类变量。 

4,数据存储位置不同。
    成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据.
    静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据.

5 数量与存储位置上的区别:
 静态成员变量是存储方法区内存中,而且只会存在一份数据(共享)。
非静态的成员变量是存储在堆内存中,有n个对象就有n份数据(私有)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值