静态内部类(public static class)和普通内部类(public class)的区别

本文详细介绍了Java中内部类的两种形式:静态内部类和非静态内部类。静态内部类在初始化时可以独立存在,只能访问外部类的静态成员,而非静态内部类则需要依赖外部类实例。内部类提供了封装和逻辑分组的优势,有助于提高代码可读性和可维护性。同时,内部类可以访问外部类的所有成员,包括私有成员,增强了封装性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、static修饰

java中普通的顶级类是不能使用static关键字修饰的。

只有内部类可以使用static修饰,或者不使用staitc关键字修饰。

// 顶层类A不能用static修饰
public class A{
   
   // 普通内部类B, 可以不用static修饰
   public class B{    
   }
 
   // 普通内部类C, 也可以用static修饰
   public static class C{    
   }
 
}

二、引用区别

1、静态内部类(static修饰的内部类)没有对外部类的引用,所以静态内部类只能访问外部类的静态属性或方法。并且在初始化的时候可以单独存在,例如:

StaticClass staticClass =  new StaticClass();

或者:

Users.StaticClass staticClass2 = new Users.StaticClass()

二种方式初始化,建议使用第二种初始化方法,比较清晰。

2、普通内部类有对外部类的引用,所以普通内部类不能独立存在,初始化的时候必须通过外部类的实例

普通内部类的实例化如下:

Users.CommonClass commonClass = new Users().new CommonClass();

或者:

Users users = new Users();

Users.CommonClass commonClass2 = users.new CommonClass();

三、访问区别

内部类,即便是私有的也能访问,无论静态还是非静态都能访问
  • 可以访问封闭类(外部类)中所有的成员变量和方法
  • 封闭类(外部类)中的私有private成员变量和方法也可以访问
  • 内部类中不可以有静态的变量和静态的方法
静态内部类
  • 无权访问封闭类(外部类)的中的非静态变量或者非静态方法
  • 封闭类(外部类)中的私有private的静态static成员变量和方法也可以访问
  • 静态内部类中可以有静态的变量和静态的方法
内部类可以被声明为private, public, protected, or package private. 但是封闭类(外部类)只能被声明为public or package private

四、使用内部类的原因

  • 这是一种对仅在一个地方使用的类进行逻辑分组的方法:如果一个类仅对另一个类有用,那么将其嵌入该类并将两者保持在一起是合乎逻辑的。
  • 它增加了封装:考虑两个顶级类A和B,其中B需要访问A的成员,如果将A的成员声明为private则B无法访问。通过将类B隐藏在类A中,可以将A的成员声明为私有,而B可以访问它们。另外,B本身可以对外界隐藏。
  • 这可能会导致代码更具可读性和可维护性:在外部类中嵌套小类会使代码更靠近使用位置。

参考:
https://www.cnblogs.com/eternityz/archive/2020/03/26/12577225.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值