快速了解Java的static关键字

static关键字用于修饰属性和方法,使其成为类变量和类方法。静态变量存储在方法区,所有对象共享,可以直接通过类名访问。静态方法与对象无关,通常用于工具或公用功能。在静态方法中不能访问非静态成员,因为静态方法不依赖于对象。
摘要由CSDN通过智能技术生成

1、static修饰属性:与具体对象无关,是和类相关的内容
        (1)static修饰属性,则该属性为静态变量,直接通过类名称来调用,存储在JVM的方法区,该类的所有对象共享此变量。类中的有些属性是类本身所具备的属性,和具体的某个对象无关,该类中的所有对象这个属性值都是相同的。
        (2)举例说明
                · 对于"日本人"类,有"姓名,年龄,国籍"等属性,而且国籍这个属性是和国家(类)密切相关的,所有该国的人员(对象)国籍值都是相同的。当有一天日本成为中国的一个省,那一个一个改国籍很麻烦。因此,country这种与具体对象无关的属性应当设置为类属性在成员变量前,使用static修饰时,该变量就成为了类属性,和具体对象无关,直接通过类来访问,该类所有对象共享此变量(只要有一个对象改了该属性值,对其他对象都是可见的)。这样直接修改日本人类中的static国籍属性,那所有对象的国籍都会变成"中国人"
(3)静态变量的说明
        ①static变量只存在于类之中,方法中千万不能定义静态变量!!!!!!!!!!!
        ②静态属性直接通过类名称来访问(推荐的),没有任何该类对象,这个属性也是存在的。

System.out.println(Japanese.country);

        ③当引用值为null时,使用该引用访问属性或方法就会抛出NPE异常。但是访问static静态变量就不会异常。
        ④成员变量必须通过对象来访问,静态变量通过类来访问
(4)关于静态变量的存储:静态变量存储在JVM的方法区,所有该类对象共享
        当类中有静态变量,则会直接在方法区中记录。当实例化时,会在栈中记录引用,堆中新增对象,栈中不同引用会指向堆中不同对象,但他们都指向方法区中同一个静态变量(不需要每次实例化都新建静态变量,因为他们都一样)
2、static修饰方法:
        (1)static修饰方法称为类方法/静态方法,和具体对象无关,通过类名称直接访问
        (2)一般工具/公用方法都设置为静态方法,直接通过类名称来访问,不需要产生对象
3、注意
        (1)看见static关键字,与对象无关,直接通过类名称访问。static修饰的属性/方法都称为类的静态域,静态域没有该类对象就能访问,通过类名称来访问
        (2)在类中,不加static关键字定义的属性或方法称为成员域(必须有对象才能访问)
        (3)问题:
                ①在静态方法中能否访问成员域?

                在静态方法中访问一个成员变量,成员域必须有对象才能访问(有对象成员域才有意义),静态方法的使用不需要对象,没对象成员域就没意义,所以不对
                ②在成员域中能否访问静态域?

                在一个成员方法中访问一个静态变量,有对象成员域就有意义,此时当然可以访问不需要对象就有意义的静态域
                ③能否使用static修饰一个类?

                不能,类定义出来是为了产生对象,static若修饰类,没对象也行,则自相矛盾!但是static可以修饰内部类
                ④能否在静态方法中使用this关键字?

                不能,this关键字修饰当前对象的属性/方法,是成员域的一部分,没对象的话,静态方法中使用this关键字没有意义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值