`
jie_bosshr
  • 浏览: 139905 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java内部类用法解析

阅读更多
定义:一个类的定义放在另一个类的内部,这个类就叫做内部类。
java内部类分为:成员内部类、方法内部类、静态内部类、嵌套类。
package com.hmkcode;

/**
 * 成员内部类用法
 * 1链接到外部类: 创建了内部类对象时,它会与创造它的外围对象有了某种联系,于是能访问外围类的所有成员,不需任何特殊条件。
 * 2内部类可以使用外部类的成员实现:用外部类创建内部类对象时,此内部类对象会秘密的捕获一个指向外围类的引用.于是,可以通过这个引用来访问外部类的成员。
 * 3创建内部类对象时,必须与外围类对象相关联。(嵌套类除外)
 */
public class MemberInnerClass 
{	
	//定义外部类成员变量outerNum
	private int outerNum;
	
	//外部类无参构造器
	public MemberInnerClass(){}
	
	//外部类有参构造器
	public MemberInnerClass(int outerNum)
	{
		this.outerNum = outerNum;
	}
	
	//声明一个外部类方法
	public void outerFunction(){
		System.out.println("outerNum:"+outerNum);
	}
	
	//得到内部类的实例
	public Inner getInner(int innerNum){
		return new Inner(innerNum);
	}
	
	public class Inner
	{
		//定义内部类成员变量innerNum
		private int innerNum;
		
		//内部类无参构造器
		public Inner(){}
		
		//内部类有参构造器
		public Inner(int innerNum)
		{
			this.innerNum = innerNum;
		}
		
		//使用.this得到外部类对象的引用
		public MemberInnerClass getThisMemberInsideClass()
		{
			return MemberInnerClass.this;
		}
		
		//使用.new得到外部类对象的引用
		public MemberInnerClass getNewMemberInsideClass()
		{
			return new MemberInnerClass();
		}
		
		//调用外部类MemberInsideClass的方法outerFunction
		public void getOuterNum()
		{
			outerFunction();
		}
		
		//调用外部类MemberInsideClass的成员变量outerNum
		public void getOuterNum1(){
			System.out.println("outerNum:"+MemberInnerClass.this.outerNum);
		}
		
		//输出内部类的成员变量innerNum
		public void getInnerNum(){
			System.out.println("innerNum:"+innerNum);
		}
	}
	
	
	public static void main(String[] args) 
	{
		//实例化一个外部类
		MemberInnerClass outer = new MemberInnerClass(5);
		//通过外部类的对象来创建一个内部类的对象
		MemberInnerClass.Inner inner = outer.new Inner(6);
		//通过调用外部类的方法outerFunction输出成员变量outerNum
		inner.getOuterNum();
		//直接调用外部类MemberInsideClass的成员变量outerNum
		inner.getOuterNum1();
		//获取指向内部类的一个引用,调用内部类的方法getInnerNum()输出内部类的成员变量innerNum
		outer.getInner(6).getInnerNum();
	}

}

方法内部类用法解析
package com.hmkcode;

/**
 * 方法内部类调用解析
 * 1:方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
 * 2:方法内部类对象不能使用该内部类所在方法的非final局部变量。
 * 3:方法内部类不能定义修饰符。
 * 因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。
 * 但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,
 * 并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。
 */
public class MethodInnerClass {
	//定义一个final的成员常量str
	private final String str = "test";
	
	//定义外部类方法doSomeing,在此方法中定义内部类Inner
	public void doSomeing(){
		//定义一个final的成员常量num
		final int num = 10;
		//定义一个成员变量count
		int count;
		class Inner
		{
			//输出外部类的成员常量num
			public void getOuterField()
			{
				System.out.println(num);
			}
			
			//调用外部类的成员方法getStr
			public void getOuterMethod(){
				getStr();
			}
			
			//内部类不能使用方法的变量count
			public void getOuterCount(){
				//System.out.println(count);
			}
		}
		//创建内部类的一个实例
		Inner inner = new Inner();
		inner.getOuterField();
		inner.getOuterMethod();
	}
	
	//定义外部类方法getStr
	public void getStr(){
		System.out.println("str:"+str);
	}
	
	public static void main(String[] args) {
		//创建外部类MethodInnerClass的实例
		MethodInnerClass outer = new MethodInnerClass();
		//调用自己的成员方法
		outer.doSomeing();
	}

}
分享到:
评论

相关推荐

    java 内部类(匿名类,匿名对象,静态内部类)详解及实例

    主要介绍了java 内部类详解及实例代码的相关资料,需要的朋友可以参考下

    Java内部类原理、概述与用法实例详解

    主要介绍了Java内部类原理、概述与用法,结合实例形式详细分析了Java内部类的相关概念、原理、访问、调用方法等操作技巧与注意事项,需要的朋友可以参考下

    java 内部类的实例详解

    主要介绍了java 内部类的实例详解的相关资料,希望通过本文大家能够理解掌握java内部类的使用,需要的朋友可以参考下

    java内部类原理与用法详解

    主要介绍了java内部类原理与用法,结合实例形式分析了Java内部类的概念、原理、分类及相关使用技巧,需要的朋友可以参考下

    java 内部类的详解及实例

    主要介绍了 java 内部类的详解及实例的相关资料,这里提供了两种内部类的实现方法,并给出实例,需要的朋友可以参考下

    详解Java 中的嵌套类与内部类

    主要介绍了详解Java 中的嵌套类与内部类的相关资料,希望通过本文大家能掌握Java 嵌套类与内部类的使用方法,需要的朋友可以参考下

    Java匿名内部类原理与用法详解

    主要介绍了Java匿名内部类原理与用法,结合实例形式分析了Java匿名内部类的概念、原理、应用与相关操作注意事项,需要的朋友可以参考下

    Java抽象类高难度面试题及解析

    此外,我们还讨论了抽象类与接口的结合应用、抽象类的静态方法和内部类、抽象类的多态性等重要概念和技术。 通过研究和解答这些高难度问题,您将提升自己的编程水平,展现出对Java抽象类的深刻理解和掌握。不仅可以...

    Java开发详解.zip

    031311_【第13章:Java类集】_Map接口使用的注意事项笔记.pdf 031312_【第13章:Java类集】_IdentityHashMap类笔记.pdf 031313_【第13章:Java类集】_SortedMap类笔记.pdf 031314_【第13章:Java类集】_集合工具类:...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java集合详解5:深入...

    Java开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    (超赞)JAVA精华之--深入JAVA API

    3.1 Log4j基本使用方法 3.2 Dom4j 使用简介 3.3 Java 语言的 XML 验证 API 3.4 hibernate的hello word 3.5 JavaMail(JAVA邮件服务)API详解 3.6 jxl.jar 包简介 3.7 Java与XML联合编程之SAX篇 3.8 Java与XML联合...

    JAVA_API1.6文档(中文)

    java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中...

    Java提高篇之详解匿名内部类

    在java提高篇—–详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以衍生出这篇博客。在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始化匿名内部类...

    java线程池ThreadPoolExecutor类使用详解.docx

    在《阿里巴巴java开发手册》中...另外由于前面几种方法内部也是通过ThreadPoolExecutor方式实现,使用ThreadPoolExecutor有助于大家明确线程池的运行规则,创建符合自己的业务场景需要的线程池,避免资源耗尽的风险。

    java 中内部类的实例详解

    主要介绍了java 中内部类的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

    Java工程师面试复习指南

    Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器 Java集合详解:HashMap和HashTable Java集合详解:深入理解...

    java基础案例与开发详解案例源码全

    12.5.2 使用集合工具类同步化集合类对象324 12.5.3 使用JDK5.0后提供的并发集合类324 12.6 用Timer类调度任务325 12.7 本章练习326 第13章 13.1 java.io.File类328 13.1.1 文件和目录是什么?328 13.1.2 Java对文件...

    java源码包---java 源码 大量 实例

     Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法:  可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,...

    Java 1.6 API 中文 New

    里面列出了,Java的所有类及其使用方法! Java SE Platform 软件包: java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 ...

Global site tag (gtag.js) - Google Analytics