JavaSEJava内部类深剖析及常见使用陷阱.docx_第1页
JavaSEJava内部类深剖析及常见使用陷阱.docx_第2页
JavaSEJava内部类深剖析及常见使用陷阱.docx_第3页
JavaSEJava内部类深剖析及常见使用陷阱.docx_第4页
JavaSEJava内部类深剖析及常见使用陷阱.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java SE 085 Java内部类深度剖析及常见使用陷阱一、内部类(Inner Class)内部类共分为4种解说:1、内部类的作用是将相关的类组织在一起,然后降低了命名空间的混乱,它是定义在一个小于package的范围内。即内部类定义最大的范围是一个类的里面。2、内部类可以定义在另外一个类里面,可以定义在一个方法里面,甚至可以作为一个表达式的一部分。3、java里面一共有4种内部类。(1)静态的内部类(又叫做嵌套类)(2)二、静态内部类1、 不能与外部类有相同的名字。2、 它是被编译成一个完全独立的class文件,与它的外部类是独立开来的3、 它只能访问外部类静态的成员方法与属性,也包括private 的静态成员变量。package com.javase.innerclass;class StaticInnerprivate static int a = 4;/* * 静态内部类的语法 * author x_xiongjie * */public static class Innerpublic void test()System.out.println(a);public class StaticInnerClassTest public static void main(String args) StaticInner.Inner inner = new StaticInner.Inner();inner.test(); 小结:静态内部类:(Static inner class):只能访问外部类的静态成员变量与静态方法,生成静态内部类的方式为:OuterClass.InnerClass inner = new OuterClass.InnerClass();三、成员内部类(member inner lass)解说:1、 也是定义在一个类的里面,没有使用static关键字来修饰2、 相当于一个实例变量3、 可以访问外部类的所有成员 package com.javase.innerclass;class MemberInnerprivate int a = 4;/* * 成员内部类 * author x_xiongjie * */public class Inner2public void doSomething()System.out.println(hello world);public class MemberInnerClass public static void main(String args) MemberInner.Inner2 inner = new MemberInner().new Inner2();inner.doSomething();1、成员内部类先new 外部类().new 类部类()的原因:我们定义一个静态方法,推荐的方式,类的名字.静态方法,方法不属于任何一个对象,包括成员变量,也是类的名字.成员变量,这个变量不属于任何一个对象,它属于类本身所有对象共享的那么一份儿,对于静态内部类来说,与它也是一个道理。如果一个类定义成静态内部类,它也不属于外部类的任何一个对象,它属于外部类本身的。外部类本身,可以通过.的方式进行访问。对于一个非静态的成员变量来说,我想要去访问他,需要生成一个类的实例,通过实例来去访问成员变量,因为这个成员变量不属于类的,属于每一个对象的,new出来一个对象,对象里面就具备了一个成员变量,再new 一个又具备了一个。本质原因就是一个是静态的,一个是非静态的,非静态的是属于对象的,而静态的是属于类本身的。2、使用外部类成员变量package com.javase.innerclass;class MemberInnerprivate int a = 4;/* * 成员内部类 * author x_xiongjie * */public class Inner2private int a = 5;public void doSomething()/* * 使用外部类的成员变量 */System.out.println(MemberInner.this.a);System.out.println(hello world);public class MemberInnerClass public static void main(String args) MemberInner.Inner2 inner = new MemberInner().new Inner2();inner.doSomething();package com.javase.innerclass;class MemberInnerprivate int a = 4;/* * 成员内部类 * author x_xiongjie * */public class Inner2private int a = 5;public void doSomething()/* * 使用外部类的成员变量 */System.out.println(MemberInner.this.a);System.out.println(hello world);public void method()Inner2 inner = this.new Inner2();inner.doSomething();public class MemberInnerClass public static void main(String args) MemberInner.Inner2 inner = new MemberInner().new Inner2();inner.doSomething();小结:可以访问外部类的静态与非静态的方法与成员变量。生成成员内部类对象的方式为:OuterClass.InnerClass inner = new OuterClass().new InnerClass();若想在局部内部类中访问外部类的成员变量,语法为:OuterClass.this.a。四、局部内部类(定义在方法里面的)1、局部内部类的特点:package com.javase.innerclass;class LocalInnerpublic void doSomething()final int a = 4;/局部的内部类class Inner3public void test()/访问final类型的局部变量System.out.println(a);System.out.println(hello word!);new Inner3().test();public class LocalInnerClassTest public static void main(String args) /外部访问LocalInner localInner = new LocalInner();localInner.doSomething();小结:定义在方法当中,只能访问方法中声明的final类型的变量。五、匿名内部类(Anonymous Inner Class)匿名内部类会隐式的继承一个父类或者实现一个接口。package com.javase.innerclass;import java.util.Date;public class AnonymousInnerClassTest SuppressWarnings(deprecation)public String get(Date date) return date.toLocaleString();public static void main(String args) AnonymousInnerClassTest test = new AnonymousInnerClassTest();/ String str = test.get(new Date();/ System.out.println(str);/匿名内部类到底实现了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论