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

Java内部类应用

    博客分类:
  • java
阅读更多

一内部类的基本概念

1 把一个类放在另一类的内部定义,这个定义在其它类内部的类就被称为内部类,也叫嵌套类,包含内部类的类也被称为外部类,也叫宿主类。

2 内部类提供更好的封装,内部类成员可以直接访问外部类的私有数据。因为内部类是外部类的成员。

3 匿名内部类适用于创建那些仅需一次使用的类。

 

二非静态内部类基本概念

1 当在非静态内部类的方法内访问某个变量时,系统优先在该方法内查找是否存在该名字的局部变量,如果存在该名字的局部变量,就使用该变量,如果不存在,则到内部类中查找是否存在该名字变量,如果存在则使用该变量,总之,第一步,先找局部变量,第二步,内部类变量,第三步,外部类变量。

2 内部类分两种:使用static修饰的内部类是静态内部类,没有使用static修饰的内部类称为非静态内部类。

 

三 非静态内部类应用

1代码示例

 

public class Cow
{
	private double weight;
	// 外部类的两个重载的构造器
	public Cow(){}
	public Cow(double weight)
	{
		this.weight = weight;
	}
	// 定义一个非静态内部类
	private class CowLeg
	{
		// 非静态内部类的两个实例变量
		private double length;
		private String color;
		// 非静态内部类的两个重载的构造器
		public CowLeg(){}
		public CowLeg(double length , String color)
		{
			this.length = length;
			this.color = color;
		}
		// 下面省略length、color的setter和getter方法
		public void setLength(double length)
		{
			this.length = length;
		}
		public double getLength()
		{
			return this.length;
		}
		public void setColor(String color)
		{
			this.color = color;
		}
		public String getColor()
		{
			return this.color;
		}
		// 非静态内部类的实例方法
		public void info()
		{
			System.out.println("当前牛腿颜色是:"
				+ color + ", 高:" + length);
			// 直接访问外部类的private修饰的成员变量
			System.out.println("本牛腿所在奶牛重:" + weight);   //①
		}
	}
	public void test()
	{
		CowLeg cl = new CowLeg(1.2 , "黑白相间");
		cl.info();
	}
	public static void main(String[] args)
	{
		Cow cow = new Cow(400);
		cow.test();
	}
}

 

2运行结果

当前牛腿颜色是:黑白相间, 高:1.2

本牛腿所在奶牛重:400.0

3结果分析

3.1 Cowleg类定义放在另一类的内部,所以它就成了一个内部类。

3.2 外部类里包含了一个test方法,该方法里创建了一个Cowleg对象,并调用该对象的info方法,不难发现,在外部类使用非静态内部类时,与普通类并没太大区别。

 

四同名变量内部类访问应用

1代码示例

public class DiscernVariable
{
	private String prop = "我是外部类的实例变量";
	private class InClass
	{
		private String prop = "我是内部类的实例变量";
		public void info()
		{
			String prop = "我是局部变量";
			// 通过 外部类类名.this.varName 访问外部类实例变量
			System.out.println("外部类的实例变量值:"
				+ DiscernVariable.this.prop);
			// 通过 this.varName 访问内部类实例的变量
			System.out.println("内部类的实例变量值:" + this.prop);
			// 直接访问局部变量
			System.out.println("局部变量的值:" + prop);
		}
	}
	public void test()
	{
		InClass in = new InClass();
		in.info();
	}
	public static void main(String[] args)
	{
		new DiscernVariable().test();
	}
}

2运行结果

外部类的实例变量值:我是外部类的实例变量

内部类的实例变量值:我是内部类的实例变量

 

局部变量的值:我是局部变量

3结果分析

程序中通过OutterClass.this.propName的形式访问外部类的实例变量,通过this.propName的形式访问非静态内部类的实例变量。

 

五外部类不能直接访问内部类变量举例

1代码示例

public class Outer
{
	private int outProp = 9;
	class Inner
	{
		private int inProp = 5;
		public void acessOuterProp()
		{
			// 非静态内部类可以直接访问外部类的private成员变量
			System.out.println("外部类的outProp值:"
				+ outProp);
		}
	}
	public void accessInnerProp()
	{
		// 外部类不能直接访问非静态内部类的实例变量,
		// 下面代码出现编译错误
		// System.out.println("内部类的inProp值:" + inProp);
		// 如需访问内部类的实例变量,必须显式创建内部类对象
		System.out.println("内部类的inProp值:"
			+ new Inner().inProp);
	}
	public static void main(String[] args)
	{
		// 执行下面代码,只创建了外部类对象,还未创建内部类对象
		Outer out = new Outer();      //①
		out.accessInnerProp();
	}
}

2运行结果

内部类的inProp值:5

3结果分析

在外部类里访问非静态内部入厂尖的实例变量,会引起编译错误。

 

六非静态内部类错误用法一

1代码示例

public class StaticTest
{
	// 定义一个非静态的内部类,是一个空类
	private class In{}
	// 外部类的静态方法
	public static void main(String[] args)
	{
		// 下面代码引发编译异常,因为静态成员(main()方法)
		// 无法访问非静态成员(In类)
		new In();
	}
}

2结果分析

不允许外部静态成员直接使用非静态内部类。

 

七非静态内部类错误用法二

1 代码示例

public class InnerNoStatic
{
	private class InnerClass
	{
		/*
		下面三个静态声明都将引发如下编译错误:
		非静态内部类不能有静态声明
		*/
		static
		{
			System.out.println("==========");
		}
		private static int inProp;
		private static void test(){}
	}
}

2 结果分析

在Java中不允许在非静态内部类里包含静态成员,否则会引发编译错误。

1
4
分享到:
评论

相关推荐

    java 内部类应用

    本篇文章将深入探讨Java内部类的应用,包括其分类、用法以及优缺点。 一、内部类的分类 Java内部类主要分为以下四种类型: 1. 成员内部类:这是最常见的内部类形式,它作为外部类的一个成员,可以在外部类的任何...

    java内部类应用详解

    Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以作为外部类的成员,具有访问外部类的所有域的权限,无论是public、protected还是private。这种访问能力使得内部类能...

    Java内部类应用之静态内部类应用示例

    Java内部类应用之静态内部类应用示例主要介绍了Java内部类应用之静态内部类应用,结合实例形式分析了Java静态内部类的原理、功能、用法及相关操作注意事项。 一、静态内部类的定义和特点 静态内部类是使用static...

    java内部类详解

    Java 内部类详解 Java 内部类是一种高级特性,允许在一个类的定义内部创建另...总的来说,Java 内部类是强大且灵活的工具,有助于构建复杂和高度模块化的应用程序。合理利用内部类,可以提高代码的可读性和可维护性。

    Java内部类总结

    ### Java内部类总结 在Java编程语言中,内部类是一个重要的概念,它允许开发者在一个类的内部定义另一个类。这种特性极大地增强了代码的封装性和复用性,同时也为解决特定问题提供了灵活的方法。本文将围绕Java内部...

    java内部类的讲解

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

    浅谈Java内部类的四个应用场景

    ### Java内部类的应用场景 #### 场景一:当某个类除了它的外部类,不再被其他的类使用时 内部类的使用场景之一是当某个类仅需被其外部类使用时。这种情况下,将此类定义为内部类可以提高代码的封装性和可维护性。 ...

    Java内部类的四个应用场景

    谈Java内部类的四个应用场景

    JAVA 内部类 PPT

    Java内部类是Java语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织...通过理解和应用这些知识点,开发者能够更有效地利用Java内部类来编写结构清晰、功能丰富的代码。

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

    Java内部类是Java语言特性中一个独特而强大的部分,它允许在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java中的...

    Java中的内部类应用举例

    #### 一、Java内部类概览 在Java编程语言中,内部类(Inner Classes)是一种独特的概念,它允许开发者在类的内部定义另一个类。这种设计模式增强了代码的封装性和模块化,同时也提供了更灵活的编程方式。根据其定义...

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

    在实际开发中,Java内部类的应用广泛,比如在Swing组件事件处理、线程编程(Thread或Runnable实现)、设计模式(如策略模式、装饰器模式)等场景都有涉及。理解并熟练掌握内部类的使用,能够帮助开发者编写更加灵活...

    JAVA内部类总结

    根据描述,本文将对Java内部类进行深入总结,包括内部类的不同类型、特点及其应用场景。 #### 一、内部类的基本概念 内部类分为四类:非静态成员内部类、静态成员内部类、局部内部类和匿名内部类。接下来将逐一...

    Java内部类在JDBC中的应用研究.pdf

    Java内部类在JDBC中的应用研究 Java内部类在JDBC中的应用研究是指在Java编程中使用内部类来优化JDBC编程的技术。内部类是指在一个类内部定义的类,它可以帮助开发者更好地设计程序结构,提高代码的重用性和可维护性...

    java 匿名内部类的使用规范

    本篇文章将深入探讨Java匿名内部类的使用规范,帮助你更好地理解和应用这一特性。 首先,理解匿名内部类的基本概念。匿名内部类没有名字,它不能被其他类直接引用,但可以作为局部变量、成员变量或者方法参数。它...

    java基础java内部类

    内部类的概念在 Java 中有着广泛的应用,特别是在处理复杂的继承问题和实现特定设计模式时。以下将详细介绍 Java 内部类的基本概念、分类、特点以及使用场景。 1. 为什么使用内部类? 内部类的最大优点在于它可以...

    Java接口和内部类教程

    ### Java接口和内部类教程 ...总结来说,接口和内部类都是Java编程中的重要概念,它们各自有着独特的作用和应用场景。理解接口和内部类的使用可以帮助开发者更好地组织代码结构,提高代码的可重用性和可维护性。

Global site tag (gtag.js) - Google Analytics