`
longgangbai
  • 浏览: 7252362 次
  • 性别: 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上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

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

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    Java经典编程源码基础例程300.zip

    Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 实例001 输出“Hello World” 2 实例002 输出控制台传递的参数 2 实例003 输出由“*”组成的三角形 3 实例004 输出符号表情 5 第2章 ...

    通过实例学习Java对象的构造过程

    通过实例学习Java对象的构造过程

    java日常词汇学习

    Abstract class 抽象类:抽象类是不允许实例化的类,因此一般它需要被进行扩展继承。  Abstract method 抽象方法:抽象方法即不包含任何功能代码的方法。  Access modifier 访问控制修饰符:访问控制修饰符用来...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java初级实例练习

    该本件中概括了java很多知识的实例,eg:数组、常用类、多态性、内部类、枚举、控制台输入Scanner类、JDBC编程、泛型、Collections容器、net网络编程、io流、图形图像GUI、线程等。代码简短易读、并有较为详细的注释和...

    深入理解内部类具体实例

    4种类型的内部类的实例,每一种类型内部类的定义,实例化,引用等,是学习内部类的好的实例资料!

    java内部培训资料 struts专题,大量文档,基础实例,快速直接入门,快速步入JAVA EE开发!很值得学习。

    java内部培训资料 struts专题,大量文档,基础实例,快速直接入门,快速步入JAVA EE开发!很值得学习。

    Java入门1·2·3:一个老鸟的Java学习心得.rar 超清

    包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、Java集合类、线程同步、...

    java 中匿名内部类的实例详解

    主要介绍了java 中匿名内部类的实例详解的相关资料,这里提供实例来帮助大家学习理解这部分内容,需要的朋友可以参考下

    java学习之Java 对象和类

      类可以看成是创建 Java 对象的模板。   例如,在真实世界的学校里,会有学生和老师等实体,学生有学号、姓名、所在班级等属性(数据),学生还有学习、提问、吃饭和走路等操作。学生只是抽象的描述,这个抽象...

    java匿名内部类实例代码详解

    主要介绍了java匿名内部类实例代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

    anonymousInner.java 匿名内部类 base.java 定义一个基类 BaseColors.java 一个简单的接口 basePoint.java 一个测试用的基类 Colorable.java 一个子接口 ColoredPoint.java 一个测试用子类 common.java 一个...

    Java入门1·2·3——一个老鸟的Java学习心得 高清pdf

    包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、Java集合类、线程同步、...

    java源码包4

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

Global site tag (gtag.js) - Google Analytics