静态内部类类vs普通内部类

文章详细对比了Java中的静态内部类和普通内部类的差异,强调静态内部类不持有外部类引用,而普通内部类可以访问外部类的静态和非静态成员。此外,还讨论了静态变量和实例变量的内存分配、访问方式以及应用场景。静态方法不能直接访问实例方法和变量,而静态代码块在类加载时执行,用于初始化静态变量。
摘要由CSDN通过智能技术生成

静态内部类vs普通内部类


java中一个类要被声明为static的,只有一种情况,就是静态内部类。如在外部类声明为static的,程序会编译都不会通过。

  1. 普通内部类持有对外部类的引用,静态内部类没有持有外部类的引用。

  1. 普通内部类能够访问外部类的静态和非静态成员,静态内部类不能访问外部类的非静态成员,他只能访问外部类的静态成员。

  1. 一个普通内部类不能脱离外部类实体被创建,且可以访问外部类的数据和方法,因为他就在外部类里面。

适用场景:当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建时,考虑采用静态内部类的设计,在知道如何初始化静态内部类。

静态变量vs实例变量


1)静态变量

加载类过程中完成静态变量的内存分配。在类的内部,可以在任何方法内直接访问静态变量。在其他类中,可以通过类名访问该类中的静态变量。2)实例变量

每创建一个实例,Java 虚拟机就会为实例变量分配一次内存。在类的内部,可以在非静态方法中直接访问实例变量。在本类的静态方法或其他类中则需要通过类的实例对象进行访问。静态变量在类中的作用如下:

静态变量可以被类的所有实例共享,因此静态变量可以作为实例之间的共享数据,增加实例之间的交互性。如果类的所有实例都包含一个相同的常量属性,则可以把这个属性定义为静态常量类型,从而节省内存空间。例如,在类中定义一个静态常量 PI。静态变量的好处:它能使程序存储器高效(即它节省内存)。

静态方法与实例方法的区别:


静态方法,属于类,而不属于类的对象。1)它通过类直接被调用,无需创建类的对象。2)静态方法中,不能使用 this 关键字,也不能直接访问所属类的实例变量和实例方法;3)静态方法中,可以直接访问所属类的静态变量和静态方法。4)同this 关键字,super 关键字也与类的实例相关,静态方法中不能使用 super 关键字。实例方法,可直接访问所属类的静态变量、静态方法、实例变量和实例方法。静态方法与静态变量好处:

  1. 属于类级别,无需创建对象就即可直接使用,使用方便。

  1. 全局唯一,内存中唯一,静态变量可以唯一标识某些状态。

  1. 类加载时候初始化,常驻在内存,调用快捷方便。

静态方法与静态变量缺点:

  1. 静态方法不能调用非静态的方法和变量。

2.不能使用this和super关键字。

静态代码块


定义:静态代码块,是 Java 类中的 static{ } 修饰的代码。

作用:用于类初始化时,为类的静态变量赋初始值,提升程序性能。静态代码块的特点如下:

静态代码块,有点类似于一个方法,但不可以存在于任何方法体内。静态代码块,可以置于类中的任何地方,类中可以有多个静态初始化块。 Java 虚拟机在加载类时执行,将只需要进行一次初始化的操作放在 static 代码块。类中含多个静态代码块,Java虚拟机将按它们在类中出现的顺序依次执行,且都执行一次。同静态代码块与静态,不能直接访问类的实例变量和实例方法,需通过类的对象访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值