`

内部类:非静态内部类

 
阅读更多
package org.lgy.study.innerclass;

/*
非静态内部类是属于外部类对象的,而不是属于外部类。
如果想要使用非静态内部类,必须先创建一个外部类对象。
非静态内部类对象必须寄存在外部类对象里;而外部类对象不一定有内部类对象寄存其中。
如果存在一个非静态内部类对象,则一定存在一个被他寄存的外部类对象;但外部类对象存在时,它里面不一定寄存了内部类对象。
*/
public class NonStaticInnerClass{
	private String str1 = "non static str in outer";
	private int sameField = 1;
	private static String str2 = "static str in outer";
	
	//外部类的非静态成员可以使用非静态内部类
	public void method1(){
		System.out.println("non static method in outer");
		//外部类必须显式创建非静态内部类对象来访问其实例成员,即使是内部类的似有成员也可以直接访问。
		InnerClass in = new InnerClass();
		System.out.println("in.str1 = " + in.str1);
		in.method1();
	}
	
	//不允许在外部类的静态成员(静态方法、静态初始化块)中使用非静态内部类(定义变量、创建实例)
	public static void method2(){
		System.out.println("static method in outer");
		//new InnerClass().method1();
	}
	
	//因为内部类作为外部类的成员,所以可以使用任意的访问控制符(private、default、protected、public)
	private class InnerClass{
		//非静态内部类里可以定义非静态成员(成员变量、成员方法、普通初始化块)
		private String str1 = "non static str in inner";
		
		private int sameField = 2;
		//非静态内部类里不可以定义静态成员(成员变量、成员方法、静态初始化块)
		//private static String str2 = "static str in inner";
		
		public void method1(){
			System.out.println("non static method in inner");
			//非静态内部类可以自由访问外部类的成员(成员变量、成员方法、实例成员、静态成员)
			System.out.println("str1 in outer: " + str1);
			System.out.println("str2 in outer: " + str2);
			method2();
			
			//外部类、非静态内部类、内部类方法中都有名为sameField的变量,
			//可以按如下方式来访问各个作用域里的同名变量
			int sameField = 3;
			System.out.println(sameField);
			System.out.println(this.sameField);
			System.out.println(NonStaticInnerClass.this.sameField);
		}
		/*
		public static void method2(){
			System.out.println("static method in inner");
		}*/
	}
}

 

分享到:
评论

相关推荐

    Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存

    然而,不当使用Handler,尤其是结合匿名内部类或非静态内部类,可能导致内存泄漏和Native内存增加,这对应用性能和稳定性造成负面影响。 首先,我们要理解内存泄漏的概念。内存泄漏是指程序中已分配的内存没有被...

    深入解析Java中的内部类

    本文将深入探讨Java中的四种内部类:非静态内部类、静态内部类、局部内部类和匿名内部类。 1. 非静态内部类(也称为成员内部类) 非静态内部类是定义在外部类的成员位置的类,它可以访问外部类的所有成员,包括私有...

    深入浅析Java中Static Class及静态内部类和非静态内部类的不同

    这种类的声明前面带有`static`关键字,与普通的内部类(非静态内部类)有所不同,它们在使用和行为上存在显著的差异。 首先,让我们来探讨一下静态内部类与非静态内部类的主要区别: 1. **引用关系**: - 静态...

    静态内部类

    根据内部类是否声明为static,它们被分为非静态内部类(也称为成员内部类)和静态内部类。 #### 二、静态内部类的特点 静态内部类具有以下特点: 1. **独立性**:静态内部类与外部类之间没有依赖关系,即使外部类...

    java代码笔记2010-06-01:Java内部类 静态内部类 局部内部类 明明内部类;StringBuffer reverse的使用;

    内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...

    浅谈内部类与静态内部类的应用

    与普通成员内部类不同,静态内部类不持有对外部类的引用,因此不能直接访问外部类的非静态成员。静态内部类需要通过外部类名.静态内部类名的方式来创建对象,这与访问任何其他静态成员的方式相同。这种特性使得静态...

    java静态内部类(嵌套类)

    2. **不能访问外部类的非静态成员**:由于静态内部类与外部类的静态属性和方法处于相同的静态上下文中,因此静态内部类无法访问外部类的非静态成员变量或方法。 3. **命名空间独立**:静态内部类有自己的命名空间,...

    java内部类总结(含概念和实例)

    * 静态内部类不能访问外部类的非静态成员 匿名内部类的特点: * 匿名内部类是指没有名字的内部类 * 匿名内部类通常用在创建实例时使用 * 匿名内部类可以访问外部类的所有成员 在 Java 中,内部类是一种非常重要的...

    java 静态内部类的使用规范

    Java语言中的静态内部类,也称为嵌套类,是内部类的一种特殊形式,它与非静态内部类(也称为成员内部类)相比有着独特的特点和使用场景。在深入探讨其使用规范之前,我们先理解静态内部类的基本概念。 静态内部类不...

    内部类的相关知识-静态内部类,匿名内部类……

    本文详细介绍了 Java 中内部类的各种类型及其使用场景,包括静态内部类、非静态内部类、局部内部类以及匿名内部类。每种类型的内部类都有其独特的特性和应用场景,理解这些差异对于更高效地利用 Java 语言特性至关...

    JAVA内部类总结

    3. **外部类访问静态内部类**:静态内部类可以通过“外部类.静态内部类”的方式创建对象实例。 4. **静态内部类成员**:静态成员内部类的成员变量和方法都是静态的。 #### 四、局部内部类 局部内部类是在方法或...

    Java 深入理解嵌套类和内部类

    非静态嵌套类也即内部类,是指在一个类的内部定义的非静态嵌套类。非静态嵌套类可以访问外部类的所有成员变量和方法,包括私有成员变量和方法。例如,在上面的代码中,非静态嵌套类 Inner 可以访问外部类的成员变量 ...

    java语言--内部类总结

    - 静态内部类可以拥有静态成员和静态方法,但不能直接访问外部类的非静态成员。 - 匿名内部类的使用: - 匿名内部类通常用于简洁地实现一个接口或继承一个类,常用于事件监听器或回调函数的定义。 内部类的应用...

    编程语言Java内部类.pdf

    - 非静态内部类:需要外部类的实例才能被创建,并且可以直接访问外部类的所有成员,包括私有成员。 3. 内部类的实例化: - 非静态内部类的实例化通常需要一个外部类的实例。通过外部类实例创建内部类实例的语法是...

    关于内部类的整理 内部类.xmind

    局部内部类不能访问外部类的非静态成员,除非通过对象实例。 3. 匿名内部类: 匿名内部类没有名字,通常用于创建一次性使用的简洁实现,如接口的匿名实现或继承自现有类的子类。它们常用于事件处理和回调机制。 4...

    java中的内部类

    4. 静态内部类:静态内部类与普通成员内部类的区别在于,静态内部类可以不依赖于外部类的实例就能创建对象。它们不持有对外部类的引用,所以可以声明静态成员。此外,静态内部类可以被其他类直接引用,而无需先创建...

    java面试宝典3,java面试宝典

    Java中定义了两种内部类:非静态内部类和静态内部类(也称为静态嵌套类)。 - **非静态内部类**: - 非静态内部类(通常简称内部类)具有指向包含类的隐式引用。 - 创建非静态内部类的对象时,必须先有一个外部类...

    java 内部类 局部内部类 匿名类 实例代码

    静态内部类不能直接访问外部类的非静态成员,但可以通过外部类的实例来访问。以下是一个静态内部类的例子: ```java public class Outer { private static int outerStaticValue = 200; static class Static...

    内部类分类及应用

    静态嵌套类可以访问外部类的静态成员变量,但不能访问非静态成员变量。静态嵌套类可以独立于外部类实例化,可以使用外部类的名称和$符号来访问静态嵌套类。 三、方法内部类 方法内部类是指定义在方法中的内部类。...

    java 内部类使用(内部匿名类)

    非静态内部类拥有对外部类的引用,可以直接访问外部类的所有成员,包括私有成员。而静态内部类不持有对外部类的引用,因此只能访问外部类的静态成员。 2. **内部匿名类**:内部匿名类没有名字,通常用于创建一次性...

Global site tag (gtag.js) - Google Analytics