看了普通的内部类和静态内部类的区别,进行了一些探索与发现。
Case1:
public class Test {
public static void main(String[] args) {
int ab[] = new int[3]; int ii = ab.length;
}
static class A{
}
}
Case2:
public class Test {
public static void main(String[] args) {
int ab[] = new int[3]; int ii = ab.length;
}
class A{
}
}
字节码对比(Test$A)
Case1 --> Case2
常量池差异:
对比可以看下Case1比Case2可以看出初步差异,特别是final Test this$0,如果字节码被修改过会造成一些异常,静态内部类则没有这样的final访问限制。看到这里应该也差不了了解如果在字节码级别Test$A.this$0操作不好也会出现问题,对asm方式操作字节码来说这个是不可接触的。
分享到:
相关推荐
内部类可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。在这里,我们重点关注成员内部类和静态内部类。 成员内部类,就像它的名字一样,是类的一个成员,与字段和方法处于同一级别。它可以访问外部...
内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态嵌套类。其中,静态嵌套类是与外部类关联但不持有对外部类的引用,因此它可以像普通类一样被静态引用,而无需外部类实例。 Java的静态嵌套类通常用于...
匿名内部类和静态内部类的区别** - 匿名内部类不能是静态的,它总是在使用时被实例化,并且通常用于实现接口或继承一个类。 - 静态内部类则可以独立存在,无需匿名。 **6. 编译后的文件结构** - Java编译器会为...
内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...
### Java 利用反射获取内部类静态成员变量的值操作 #### 一、引言 在Java编程中,反射是一个非常强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够创建和操作对象。本文将详细介绍如何使用...
与普通内部类相比,静态内部类具有以下显著特点: 1. **创建对象无需依赖外部类**:这是静态内部类最为关键的一个特征。也就是说,我们可以在不创建外部类对象的情况下,直接创建静态内部类的对象。 ```java ...
Java ---- 局部内部类 静态内部类 普通内部类
静态内部类的实例创建与普通内部类不同,可以直接使用 `new 外部类.静态内部类()` 的形式创建实例,而无需先创建外部类的实例。例如: ```java public class CreateStaticInnerInstance { public static void main...
这种类的声明前面带有`static`关键字,与普通的内部类(非静态内部类)有所不同,它们在使用和行为上存在显著的差异。 首先,让我们来探讨一下静态内部类与非静态内部类的主要区别: 1. **引用关系**: - 静态...
内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像普通的类成员,可以有自己的访问修饰符;局部内部类只存在于方法或块的范围内;匿名内部类通常用于快速创建一个简单的类实例,...
对于内部接口,它与普通接口并无太大区别,但当接口定义在类内部时,它可以访问外部类的私有成员。这使得接口成为连接内部类和外部类的桥梁,帮助实现特定的交互逻辑。 总结一下,内部类、匿名内部类和内部接口在...
内部类可以分为四种:成员内部类、静态嵌套类、方法内部类和匿名内部类。 成员内部类 成员内部类是定义在外部类的成员变量中的一种内部类。它可以访问外部类的所有成员变量和方法,包括私有的变量和方法。成员内部...
非静态内部类拥有对外部类的引用,可以直接访问外部类的所有成员,包括私有成员。而静态内部类不持有对外部类的引用,因此只能访问外部类的静态成员。 2. **内部匿名类**:内部匿名类没有名字,通常用于创建一次性...
静态内部类与其它内部类的区别在于非静态内部类在编译完成之后会隐含地保存一个引用,该引用是指向创建它的外部类,但是静态内部类却没有。静态内部类只是嵌套在外部类中,因此也被称为嵌套内部类。 静态内部类的...
- 静态内部类和成员内部类在内存管理上有差异,静态内部类不会引起外部类的实例化,而成员内部类会。 - 匿名内部类不能包含任何静态声明,因为它们没有名称。 总的来说,Java 内部类是强大且灵活的工具,有助于构建...
Java SE中的静态内部类是一种特殊的内部类,它与非静态内部类(也称为成员内部类)有着显著的区别。静态内部类并不需要外部类的实例来创建它的对象,而是可以直接通过类名进行实例化,就像普通的类一样。在给定的...
3. 静态内部类:即使用 static 修饰的内部类,静态内部类可以独立于外部类的实例化。 4. 匿名内部类:即没有名字的内部类,匿名内部类用于实现回调函数或其他临时性的类。 三、为什么需要内部类? 1. 内部类方法...
静态内部类则与普通的静态成员类似,不依赖于外部类的实例,可以独立存在。 内部类的一个重要应用场景是在事件处理中,例如Swing或Android开发,它们经常用内部类来实现事件监听器。内部类可以轻松地访问外部类的...
静态内部类与普通的静态成员类似,不依赖于外部类的实例,而非静态内部类则需要一个外部类的实例才能创建。 2. **局部内部类**: - 局部内部类是在方法、构造器或初始化块内部定义的类。它们的作用域仅限于该方法...
首先,非静态内部类会隐式持有对外部类的引用,这可能导致内存泄漏,特别是在长期运行的程序中。其次,如果内部类需要被其他类访问,应将其声明为静态,这样就不需要外部类的实例就能创建内部类的实例。最后,内部类...