`

java_内部类

    博客分类:
  • java
阅读更多
package com.diaodiao.inner;

class Outer {
	private String name = "Hello";
	class Inner {
		public void print() {
			System.out.println(Outer.this.name);
		}
	}
	public void fun() {
		new Inner().print();
	}
}

public class OODemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Outer().fun();
	}

}
输出:Hello
如果单独从语法上来讲,内部类的定义操作并不麻烦,但是使用内部类有一个优点和一个缺点:
[b]缺点:[/b]从java的定义结构来讲,一个类中只能有属性和方法所组成,此时又增加了一个类,这样的做法会破坏程序的结构;
[b]优点:[/b]可以方便的访问外部类的私有操作.


既然是类,那么肯定会产生字节码文件,所以下面观察一下内部类的字节码文件:Outer$Inner.class,可以发现现在在内部类的字节码文件中存在了一个“$”符号,
而此符号在程序之中会被自动的替换为:".",那么通过这样的替换也就发现,内部类的完整名称应该是“外部类.内部类”,所以此时,如果要想在外部进行内部类的对象实例化操作,则格式如下:外部类.内部类 内部类对象 = new 外部类().new 内部类();
内部类有可能操作外部类中的普通属性,而普通属性是在对象实例化之后才会被分配空间的,所以就证明在实例化内部类的对象之前,必须先有外部类的实例化对象.

package com.diaodiao.inner;

class Outer {
	private String name = "Hello";
	class Inner {
		public void print() {
			System.out.println(Outer.this.name);
		}
	}
}

public class OODemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Outer.Inner inner = new Outer().new Inner();
		inner.print();
	}

}
[b]说明一:[/b] 如果现在一个内部类只希望被外部类所操作,则可以在类的定义上使用private声明.


[b][size=large]使用static定义内部类[/size][/b]
内部类也可以使用static关键字进行定义,但是一旦使用了static定义内部类的话,则表示这个内部类就变成了外部类,而内部类的完整名称也就变为"外部类.内部类",而且此时也只能访问外部类中的static操作了.

package com.diaodiao.inner;

class Outer {
	private static String name = "Hello";
	static class Inner {
		public void print() {
			System.out.println(Outer.name);
		}
	}
}

public class OODemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Outer.Inner inner = new Outer.Inner();
		inner.print();
	}

}
但是特别需要注意到是,使用static定义类的形式,只适合出现在定义内部类上,外部类是无法使用的.


[size=large][b]在方法中定义内部类[/b][/size]
package com.diaodiao.inner;

class Outer {
	private String name = "Hello";
	public void fun() {
		class Inner {
			public void print() {
				System.out.println(Outer.this.name);
			}
		}
		new Inner().print();
	}

}

public class OODemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Outer().fun();
	}

}
另外,如果在一个方法中定义的内部类,要想访问方法中的参数或者是变量,则参数或变量前必须使用"final"关键字定义。

package com.diaodiao.inner;

class Outer {
	private String name = "Hello";
	public void fun(final int x) {
		final String str = "MLDN";
		class Inner {
			public void print() {
				System.out.println(Outer.this.name);
				System.out.println(x);
				System.out.println(str);
			}
		}
		new Inner().print();
	}

}

public class OODemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Outer().fun(10);
	}

}
[b]说明二:[/b]内部类除了可以方便的访问外部类的私有操作外,外部类也可以方便的访问内部类的私有操作.

分享到:
评论

相关推荐

    JAVA_内部类_反射机制

    Java中的内部类是一种特殊类型的类,它被定义在另一个类的内部。内部类有四种主要类型:成员内部类、静态嵌套类、方法内部类和匿名内部类。 1. 成员内部类:这类内部类就像外部类的成员,可以访问外部类的所有成员...

    Java__内部类.mp4

    Java__内部类.mp4

    Java__接口、内部类和Java_API基础

    Java内部类是指在外层类中的嵌套类,可以作为成员变量、方法或局部变量使用。内部类可以继承父类或实现接口,内部接口总是静态的。例如,声明一个直线类,包括一个内嵌的点类: ``` public class Line { class ...

    Java4Android 35_内部类和匿名内部类

    在Java编程语言中,内部类和匿名内部类是两种特殊类型的类,它们为代码的组织和功能实现提供了独特的灵活性。本教程"Java4Android 35_内部类和匿名内部类"深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们...

    JAVA_12内部类

    Java内部类是Java编程语言中的一个独特特性,它允许在一个类的定义内部定义另一个类。这种设计模式在处理复杂的对象关系、实现匿名类以及提供更好的封装性时非常有用。在这个"JAVA_12内部类"的学习资料中,我们将会...

    从零开始学JAVA第12章_内部类.ppt

    Java内部类 Java内部类是Java编程语言中的一种特殊的类,它定义在另一个类的内部。内部类可以访问外部类的成员变量和成员方法,同时也可以被外部类访问。内部类可以分为非静态内部类、局部内部类、静态内部类和匿名...

    MLDN魔乐JAVA_12内部类.rar

    Java内部类是Java编程语言中一个独特且强大的特性,它允许我们在一个类的定义内部创建另一个类。这个特性使得代码更加模块化,并且可以更好地封装和管理类的使用。"MLDN魔乐JAVA_12内部类.rar"压缩包文件很显然是...

    JAVA_匿名内部类

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不定义完整类的情况下创建对象。这种类没有名字,通常用作一次性实现某个接口或继承某个类的情况,尤其是在需要简洁代码的地方。以下是对Java匿名内部...

    java 匿名内部类的使用规范

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不需要定义一个单独的类的情况下创建类的实例。这在处理回调、事件监听、单例模式以及其他需要短时间内定义一个简单类的情况时非常有用。本篇文章将...

    Java面向对象程序设计第6章_内部类与异常类

    Java面向对象程序设计第6章_内部类与异常类

    JAVA_clockDisplay.rar_ClockDisplay ja_JAVA_clockDisplay_java clo

    由于包含了源码,开发者可以深入学习其内部机制,理解如何在Java中处理日期和时间的显示,以及如何利用SWT库创建原生界面。对于学习Java GUI编程或者需要定制时间显示功能的开发者来说,这是一个非常有价值的资源。

    Java_SRC_7-9.rar_java s_java 文本编辑器_java_src_javasrc_jdk src

    Java源代码(.java文件)是用Java语言编写的程序,它们是人类可读的文本文件,包含类、方法和变量定义等。这些源代码在经过Java编译器(javac)处理后,会被转化为字节码(.class文件),字节码可以在Java虚拟机...

    java静态内部类(嵌套类)

    ### Java静态内部类(嵌套类)详解 #### 一、静态内部类概念与特性 在Java编程语言中,静态内部类(也被称为嵌套类)是一种特殊的内部类形式,它通过`static`关键字来定义。与普通内部类相比,静态内部类具有以下...

    Java_swing_api_中文

    通过实现EventListener接口或使用匿名内部类,开发者可以添加ActionListener、MouseListener、KeyListener等来响应用户操作,如点击按钮、移动鼠标或按键。 3. **布局管理器**:Swing提供了多种布局管理器,如...

    jibu_java_1.0.0.zip_Parallel Java Code_java1.0.0_jibu_java_1.0.0

    在Java中,这一概念主要通过`java.util.concurrent`包中的类和接口实现,如`ExecutorService`、`Future`、`Thread`等。"jibu_java_1.0.0"库可能包含了这些核心类的实现或扩展,以适应更复杂的并行场景。 1. **线程...

    JAVA_API1.6文档(中文)

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

    java_game_10.rar_java_java 开发_java 游戏 源码_游戏开发

    "java_游戏_源码"明确了这些游戏是用Java编写,并且提供源代码,意味着我们可以直接查看并理解游戏的内部工作机制。最后,“游戏开发”涵盖了从设计概念到实现游戏逻辑的整个过程。 在"www.pudn.com.txt"这个文件中...

    16.java匿名内部类.zip

    16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名...

    java内部类的讲解

    ### Java内部类详解 #### 一、内部类的分类与概念 Java的内部类机制是其强大特性之一,它允许类作为另一个类的成员存在,从而增强了代码的封装性和复用性。根据定义和作用域的不同,Java内部类主要分为四类: 1. ...

    Java虚拟机规范(Java_SE_7).pdf

    10. **性能优化**:通过理解和分析JVM的内部工作原理,开发者可以进行诸如内存调优、线程优化、JIT编译策略调整等操作,提升Java应用程序的性能。 《Java虚拟机规范(Java_SE_7)》不仅是一份技术文档,也是Java...

Global site tag (gtag.js) - Google Analytics