`

内部类:非静态内部类

 
阅读更多
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内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...

    java静态内部类(嵌套类)

    java静态内部类(嵌套类)的实例 。嵌套类意味着: 1. 要创建嵌套类的对象,并不需要其外围类的对象。 2. 不能从嵌套类的对象中访问非静态的外围类对象。

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

    上次有朋友问我,java中的类可以是static吗?我给他肯定的回答是可以的,在java中我们可以有静态实例变量、...当然类也可以是静态的,下面小编整理了些关于java中的static class相关资料分享在脚本之家平台供大家参考

    几行代码带你彻底搞懂Java内部类

    内部类基本概述语法格式成员内部类局部内部类匿名内部类静态嵌套类静态嵌套类和非静态嵌套类的区别 内部类 基本概述 当一个类的定义放在另一个类的实体时,则该类叫做内部类,该类所在的类叫做外部类 在一个类体中...

    C#静态static的用法实例分析

    静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次,...

    Java的内部类和匿名类剖析

    Java 1.1通过对Java语言规范进行修改,显着简化了...为实现这一行为,非静态内部类存储着对外部类的实例的一个隐式引用。所以,对一个非静态内部类进行实例化需要采用不同语法的new语句:  2、引用内部类  内部类

    java中的内部类内部接口详解

    文章目录简介内部类静态内部类非静态内部类静态方法内部类非静态方法的内部类匿名类内部接口总结 简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因...

    正儿八经的详细讲java内部类

    咳咳咳!!!!! 博主真的是正儿八经的...定义在类的内部,成员位置上的非静态类 例子: package untl1; public class outer { private static int a = 1; private int b = 2; class inner { public int c=3; pu

    java内部类1

    内部类一般情况下, 类与类之间是相互独立的,内部类的意思是打破这样的独立,让一个类成为另一个类的内部信息,和成员变量,成员方法同等级别。非静态内部类的使用就是将

    zhuhuan0122#SiberiaDanteLib#常见内存泄露解决办法1

    1.非静态内部类,匿名内部类:内部类静态化,内部类里面的资源及时关闭不要静态化 2.Android WebView常见问题及解决方案汇总:http://www.

    C#静态方法与非静态方法实例分析

    通常来说,C#的类中可以包含两种方法:静态方法和非静态方法。 使用了static 修饰符的方法为静态方法,反之则是非静态方法。 静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身。所以对...

    c#静态方法和非静态方法详细介绍

    C#的类中可以包含两种方法:静态方法和非静态方法。 使用了static 修饰符的方法为静态方法,反之则是非静态方法。 静态方法是一种 特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不...

    Java static关键字解析

    非静态内部类(默认public),称为实例内部类,使用时需要先实例化外部类 NonStaticNestedNClass nonStaticNestedClass = new OuterClass().new NonStaticNestedClass(); 静态内部类,使用: 引入所在外部类 import ...

    理解C#编程中的静态类和静态成员以及密封类

    静态类与非静态类基本相同,但存在一个区别:静态类不能实例化。也就是说,不能使用 new 关键字创建静态类类型的变量。因为没有实例变量,所以要使用类名本身访问静态类的成员。例如,如果名为 UtilityClass 的静态...

    【05-面向对象(下)】

    •当在非静态内部类的方法内访问某个变量时,系统优先在该方法内查找是否存在该名字的局部变量,如果存在该 名字的局部变量,就使用该变量,如果不存在,则到该方法所在的内部类中查找是否存在该名字的属性,如果...

    1-this.docx

    this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它...

    利用反射生成泛型类对象

    对于框架设计者来说,便捷的代码,是很重要的一部分。 反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。...希望能帮助那些为查找泛型构造器、非静态内部泛型类的对象生成而烦恼的童鞋。

    安卓java读取网页源码-android:安卓开发相关

    静态内部类只能访问外部类的静态成员,非静态内部类可以访问外部类所有成员 静态内部类可由外部类进行创建,非静态内部类依赖于实例创建, 如何使一个类不被继承 构造函数带private属性 加final关键字 设计为匿名类 ...

    android内存泄露:1、LeakCanarys内存泄漏检测库、非静态的内部类错误使用

    一、前言 今天来复习一下有关内存泄露的知识,一个是把之前笔记整理一下,如有一些工具版本更新会写一些当下的使用介绍。另外会参考网上比较好的博文进行修正改进一些知识点 二、内存泄露、内存溢出、内存抖动 ...

    reflect.rar

    Java反射详解——一篇文章读懂java反射机制(源码) 包含内容: 1. 非静态成员和非静态方法的访问和调用 1.1 关于构造方法 1.2 关于成员变量 ...3. 静态内部类、非静态内部类、匿名类 4. 关于注解Annotation

Global site tag (gtag.js) - Google Analytics