`
longgangbai
  • 浏览: 7332486 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 实例内部类的学习

阅读更多
package com.easyway.commons.ispace.dev.oop.innerclasses;

/**
 * 实例内部类的学习:
 *  外部类实例与内部类的实例的之间为一对多关系。一个内部类实例只会引用一个外部类实例。
 *  而一个外部类实例对应零个或者多个内部类的实例。在外部类中不能直接访问内部类成员,
 *  必须通过内部类的实例访问。
 * @author Administrator
 * @date 2010-5-11
 * @version 1.0
 * @since JDK6.0
 */
public class JavaClassType {
	
	private int a1;
	public int a2;
	static int a3;
	int v=1;
	
	static int  bs=9;
	
	
	public JavaClassType(int a1,int a2 )
	{
		this.a1=a1;
		this.a2=a2;
	}
	
	protected  int methodA(){
		System.out.println("A:methodA");
		 return a1*a2;
	}
	/**
	 *  (4)一般的内部类(非static类)的内部没有静态属性。在实例内部类中不能定
	 *  义静态成员,而只能定义实例成员。
	 * @author longgangbai
	 * @date 2010-5-10
	 * @version 1.0
	 * @since JDK6.0
	 */
	class B{
	  public	int b1=a1;
	  
	  //  public static int b=9;   编译错误
	  
		int b2=a2;
		int b3=a3;
		int v=2;
		
		/**
		 * (2) 实例内部类的实例自动持有外部类的实例的引用。
		 * 在内部类中,可以直接访问外部类的所有成员。包括成员变狼和成员方法。
		 */
		int b4=new JavaClassType(3,5).a1;  
		
		int b5=methodA();
		/**
		 * (5) 在内部类中不同的地方this的含义不同 
		 */
		private   void methodB(){
			System.out.println("B:methodB");
			System.out.println("v="+v);
			System.out.println("this.v="+this.v);
			System.out.println("A.this.v="+JavaClassType.this.v);
		}
		/**
		 * 在多层嵌套中,内部类可以访问所有外部类的成员。内层内部类可以访问外层内部类。
		 * @date 2010-5-11
		 * @version 1.0
		 * @since JDK6.0
		 */
		class C{
			public	int b1=a1;
			public void methodC(){
				System.out.println("C:methodC");
				methodA();
				methodB();
			} 
		 }
		
		
		/**
		 * 
		 * 局部内部类(在一个方法中定义的内部类,他的可见范围是当前的方法,局部内部类不能访问修饰符及修饰):
		 * (1)局部内部类和实例内部类一样,可以访问外部类的所有成员
		 * 此外,局部内部类还可以访问所在方法中的final类型的参数和变量。
		 * (2)在局部内部类和实例内部类一样,不能包含静态成员
		 */
		public void methodBC(){
			 final int abc=0;
			  int def=8;
			  class G{
				  
			     // public static int a=9;  局部内部类和实例内部类一样,不能包含静态成员
				  
				 public   int g0=1;
				 protected  int g1=b1;
				 
				 private M m=new M();
				 //  static int g5; 编译错误 
				 
				  private int g2=a1;
				  int g3=abc;
			      // int g4=def; 编译错误
			      
				  
				  class M{
					  private int m0=0;
					  protected int m1=1;
					  public int m2=4;
				  }
			  }
			  G g=new G();
			  //注意下面的代码访问的私有变量
			  int qq= g.g2;
			  System.out.println("g.m.m0 ="+g.m.m0);
		}
		
		/**
		 * 内部类的继承:内部类的子类(F)的构造中必须创建继承内部类(C)的父类(B)的实例:
		 * 
		 * @author longgangbai
		 * @date 2010-5-10
		 * @version 1.0
		 * @since JDK6.0
		 */
		 class F extends B.C{
			 
			 public F(B b){
				 b.super();
			 }
		 }
		
	}
	
	
	
	
	public static class D{
		int d1=bs;
		int d2=new JavaClassType(7,8).a1;
		
		
		public void methodD(){
			System.out.println("d2="+d2);
		}
		
		public static class E{
			 static int e1=3;
		}
		
	}
	
	public static void main(String[] args) {
		JavaClassType.B b=new JavaClassType(1,2).new B();
		System.out.println("b.b1="+b.b1);
		System.out.println("b.b2="+b.b2);
		System.out.println("b.b3="+b.b3);
		
		//System.out.println("b.b4="+b.b4);
		
		System.out.println("b.b5="+b.b5);
		
		JavaClassType jcy=new JavaClassType(1,2);
		
		JavaClassType.B bb=new JavaClassType(3,6).new B();
		//在直接实例内部类的实例的时候,java虚拟机自动使内部类shilling引用它的外部类的实例。
		
		bb.methodB();
		bb.methodBC();
		
		B.C c=b.new C();
		c.methodC();
		
		D d=new D();
		d.methodD();
		
	}

}

 

 

 

 

package com;

/**
 * 那么对于静态变量和静态初始化块之间、变量和初始化块之间的先后顺序又是怎样呢?
 * 是否静态变量总是先于静态初始化块,变量总是先于初始化块就被初始化了呢?
 * 实际上这取决于它们在类中出现的先后顺序。我们以静态变量和静态初始化块为
 * 例来进行说明。 运行上面的代码,会得到如下的结果:
 * 
 * 1、Test--A 
 * 2、静态初始化块 
 * 3、Test--B
 * 
 * 大家可以随意改变变量a、变量b以及静态初始化块的前后位置,就会发现输出结果随着
 * 它们在类中出现的前后顺序而改变,
 * 这就说明静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化的。同样,
 * 变量和初始化块也遵循这个规律。
 * 
 * 
 * 
 * @author Administrator
 * 
 */
public class TestOrder {
	// 静态变量
	public static TestA a = new TestA();

	// 静态初始化块
	static {
		System.out.println("静态初始化块");
	}

	// 静态变量
	public static TestB b = new TestB();

	public static void main(String[] args) {
		new TestOrder();
	}
}

class TestA {
	public TestA() {
		System.out.println("Test--A");
	}
}

class TestB {
	public TestB() {
		System.out.println("Test--B");
	}
}

 

分享到:
评论

相关推荐

    java内部类详解

    Java 内部类详解 Java 内部类是一种高级特性,允许在一个类的定义内部创建另一个类。这种设计模式提供了更灵活的代码组织方式,同时还可以实现特定的封装和访问控制。内部类主要分为四种类型:静态内部类、成员内部...

    java 匿名内部类的使用规范

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

    Java内部类总结

    - **静态内部类**:也称为静态嵌套类,这种内部类通过`static`关键字修饰,不能直接访问外部类的实例成员,只能访问外部类的静态成员。 - **局部内部类**:是在一个方法或构造器内部定义的类,可以访问该方法或构造...

    java方面内部类学习

    Java 内部类是 Java 语言提供的一种独特特性,它允许在一个类的内部定义另一个类。内部类可以作为外部类的成员,具有访问外部类所有成员的权限,包括私有成员。这种设计允许开发者实现更复杂的封装和抽象,特别是在...

    java内部类学习资料

    10. **内部类与序列化**:Java序列化过程中,非静态内部类的实例会自动包含外部类的实例。如果不需要这种行为,可以通过实现Serializable接口并声明一个`private static final long serialVersionUID`字段来避免。 ...

    Java入门(实例学习)

    在这个压缩包中,包含了一系列精心设计的Java实例,每一个都经过了编译验证,确保可以运行并展示特定的编程概念。 1. **基本语法**:Java的基本语法包括变量声明、数据类型(如整型、浮点型、字符型和布尔型)、...

    java内部类使用例子

    Java内部类是Java语言提供的一种独特特性,它允许我们在一个类的定义内部定义另一个类。这种内部类可以是成员内部类、局部内部类、匿名内部类或...学习并熟练掌握内部类的使用,能帮助你编写更加灵活和高效的Java代码。

    java中内部类与外部类的学习资料.docx

    - **实例内部类**:定义在外部类的成员位置,但不在方法内,与外部类的实例关联。 - **静态内部类**:同样定义在外部类的成员位置,但可以用static修饰,不依赖外部类的实例。 2. **类访问修饰符**: - 外部类...

    Java 干货之深入理解Java内部类(学习资料)

    Java 内部类是 Java 语言的一个重要特性,允许在一个类的定义内嵌套其他类。这使得 Java 能够实现一些特殊的编程模式,比如模拟多重继承和解决多次实现问题。内部类根据其定义的位置和用途,可以分为四种类型:成员...

    java类与对象实例

    "java类与对象实例" 在 Java 中,类和对象是两个紧密相连的概念。类是一种蓝图,用于创建对象,而对象是类的一个实例。类描述了对象的基本结构,包括属性、方法和事件等。类设计的关键概念包括封装、继承和多态。 ...

    Java 内部类学习

    `Java study.doc`文件可能是包含上述知识点详细讲解的学习文档,可能涵盖了内部类的使用示例、多线程的实现方式和同步策略的解释,以及实践中的应用案例。通过深入阅读和理解这份文档,开发者可以进一步掌握Java内部...

    java实例化对象的过程

    在Java编程语言中,实例化对象是创建类的实例,使其具有...总的来说,Java实例化对象是编程中的基本操作,它涉及到类的构造,内存分配,方法调用等多个核心概念。理解这一过程对于深入学习Java和面向对象编程至关重要。

    java 集合和内部类资料

    Java集合框架是Java编程...总之,这个资料包涵盖了Java集合框架和内部类的基础知识,对于想要深入理解Java编程的开发者来说,是一份宝贵的学习资源。通过学习,你可以提升在处理数据集合和实现复杂设计模式上的能力。

    java入门实例 java入门实例

    【Java 入门实例:classpath 和 package 详解】 学习Java对于初学者来说,尤其是在尝试编译和运行简单程序时,可能会遇到很多困扰。错误信息往往令人困惑,导致一些初学者失去学习信心。实际上,很多问题源于对...

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

    "明明内部类"可能是指“匿名内部类”,它没有名字,通常用于简化代码和快速实现接口或抽象类的一个具体实例。当只需要一次性使用一个类,并且这个类只需要实现一两个方法时,匿名内部类是一个很好的选择。它可以...

    java实例源码百例(经典)

    对于每一个标签,例如"java实例","源码",都可以找到对应的实例来学习和研究。"JAVA实用程序源码百例"这个压缩包,无疑是一个宝贵的自学资源,涵盖了广泛的Java编程技术,对于渴望提高Java技能的人来说极具价值。

    java 利用反射获取内部类静态成员变量的值操作.docx

    通过本文的学习,我们了解了如何使用Java反射技术来获取内部类中的静态成员变量的值。反射技术虽然强大,但也需要注意其使用场景和可能带来的负面影响。希望本文能帮助大家更好地理解和掌握Java反射技术的应用。

    java单例模式实例

    单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们...

    java学习笔记(内部类)汇集

    ### Java学习笔记——内部类详解 #### 一、引言 Java中的内部类是一个非常有用但又容易让人感到困惑的概念。内部类本质上是在另一个类的内部定义的类,它可以访问外部类的所有成员变量和方法,甚至是私有成员。...

    100Java经典实例源码

    函数对象,也称为闭包或匿名内部类,在Java中可以通过实现接口或继承抽象类来创建。函数对象可以作为参数传递给其他方法,增强了代码的灵活性。通过这些实例,你可以学习到如何使用函数对象来处理复杂逻辑。 网络...

Global site tag (gtag.js) - Google Analytics