`
mifantuanzi27
  • 浏览: 3391 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java内部类学习总结

阅读更多

    Java内部类的意思就是定义在类中的类。一般来说可以分为四种:静态内部类、成员内部类、局部内部类以及匿名内部类。

 

    简单描述一下几种内部类的定义方式,以及访问方式吧,实际开发中自己目前应用到内部类的情况还不多,只在一个tasksend工具类的编写中用过匿名内部类的方式,对于使用的新的慢慢总结吧。

 

一、静态内部类(Static Inner Class

 

static关键字修饰的内部类为静态内部类.

 

定义静态内部类:

 

package com.hdjava.innerclass;

 

public class StaticInnerClass {

 

   

    private static int a = 1;

 

   

    public static void output(){

       System.out.println("这是外部类的静态方法");

    }

   

    @SuppressWarnings("unused")

    public static class StaticInner{

      

      

       public void method(){

           System.out.println("访问外部类的静态变量 a:"+ a);

           output();

       }

    }

   

   

}

 

测试类:

 

 

 

package com.hdjava.innerclass;

 

public class StaticInnerClassTest {

   

    public static void main(String[] args) {

       StaticInnerClass.StaticInner innerClass = new StaticInnerClass.StaticInner();

       innerClass.method();

    }

}

 

运行结果:

 

访问外部类的静态变量 a:1

这是外部类的静态方法

 

分析:

静态内部类只能访问外部类的静态成员变量与静态方法,生成静态内部类对象的方式为:

outerClass.InnerClass inner = new OuterClass.InnerClass()

 

二、成员内部类

 

成员内部类(Member Inner Class: 可以访问外部类的静态与非静态的方法与成员变量。

 

定义成员内部类:

 

package com.hdjava.innerclass;

 

public class MemberInnerClass {

   

    private int a = 1;

   

   

    public  void output(){

       System.out.println("这是外部类的方法");

    }

   

    @SuppressWarnings("unused")

    public  class MemberInner{

      

       private int a = 2;

      

       public void method(){

System.out.println("访问外部类的变量 a:"+ (MemberInnerClass.this).a);

           System.out.println("访问内部类的变量 a:"+ a);

           output();

       }

    }

 

}

 

测试类:

package com.hdjava.innerclass;

 

public class MemberInnerClassTest {

   

    public static void main(String[] args) {

      

       MemberInnerClass.MemberInner  memberInner = (new MemberInnerClass()).new MemberInner();

      

       memberInner.method();

    }

}

 

运行结果:

 

访问外部类的变量 a:1

访问内部类的变量 a:2

这是外部类的方法

 

分析:

1、生成成员内部类对象的方式为:

OuterClass.InnerClass inner = (new OuterClass()).new InnerClass();

若想在局部内部类中访问外部类的与你内部类中成员变量重名成员变量,语法为:

OuterClass.this.a

 

三、局部内部类

局部内部类(Local Inner Class):定义在方法当中的内部类,声明周期随方法而定

 

 

定义局部内部类:

 

package com.hdjava.innerclass;

 

public class LocalInnerClass {

   

    public void output(){

      

       final int var = 1;

      

       System.out.println("this is outClass's method output");

      

        class InnerClass{

          

           public void output(){

              System.out.println("this is innerClass's method output");

              System.out.println("outClass'field var="+var);

           }

       }

      

       InnerClass in = new InnerClass();

       in.output();

    }

}

 

 

测试类:

 

package com.hdjava.innerclass;

 

public class LocalInnerClassTest {

 

    public static void main(String[] args) {

 

       LocalInnerClass test = new LocalInnerClass();

       test.output();

 

    }

 

}

 

运行结果:

this is outClass's method output

this is innerClass's method output

outClass'field var=1

 

分析:只能访问方法中声明的final类型的变量

 

四、匿名内部类

 

匿名内部类(Anonymous Inner Class):匿名内部类会隐式地继承一个父类或实现一个接口。

 

定义任意一个类,供匿名内部类继承用:

package com.hdjava.innerclass;

 

public class AnonymoursClass {

   

   

    public void output(){

       System.out.println("this is method output ");

    }

}

 

测试类:

package com.hdjava.innerclass;

 

public class AnonymoursClassTest {

     

    public static void main(String[] args) {

 

       AnonymoursClass test1 = new AnonymoursClass();

      

       test1.output();

      

       AnonymoursClass test2 =  new AnonymoursClass (){

           public void output(){

             

              System.out.println("this is Anonymours class'method output");

           }

       };

              test2.output();

    }

}

运行结果:

this is method output

this is Anonymours class'method output

 

下面摘录一些在其他文章中看到的关于内部类的观点:

 

A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。
B
、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。

 

C、普通的类可以用this引用当前的对象,内部类也是如此。但是假若内部类想引用外部类当前的对象呢?用外部类名”.this

 

D、方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。

 

以上A-D摘自: http://www.blogjava.net/raylong1982/archive/2007/10/24/155439.html

 

E、在成员内部类中,可以使用外围类的字段成员变量。那么,它是如何实现的呢? 是这样的,用外围类创建内部类对象时,此内部类对象会秘密的捕获一个指向外围类的引用,于是,可以通过这个引用来访问外围类的成员。通常,这些都是编译器来处理,我们看不到,也不用关心这个。 正是因为如此,我们创建内部类对象时,必须与外围类对象相关联。

 

F、 内部类最大好处就是保持跟外部类的生命周期一致,可以通过管理一个类的生命周期来维护俩个类的生命周期在线成池,连接池,通信套接字是必然用到的这些要求内存管理很高的时候,对类的生命是必须负责的,但过多的类不好维护,通常为便于方便维护,就将归纳并放在一起。

 

以上E-F摘自http://www.iteye.com/topic/939534?page=3

 

 

G、如果你声明的成员类不要求访问外围实例,那么请记住把 static 修饰符放到成员类的声明中,使它成为一个静态成员类,而不是一个非静态成员类 。如果你省略了 static 修饰符,则每个实例都将包含一个额外的指向外围对象的引用 。维护这份引用要消耗时间和空间,但又没有相应的好处 。如果在没有外围实例的情况下,你也要分配实例的话,则不能使用非静态成员类,因为非静态成员类的实例必须要有一个外围实例。

以上G摘自http://xutao5641745.iteye.com/blog/939912

 

 

 

分享到:
评论

相关推荐

    infor:数字化转型助力制造企业蜕变.pdf

    infor:数字化转型助力制造企业蜕变.pdf

    毕业论文-电视TV_新增蓝光-整站商业源码.zip

    毕业论文-电视TV_新增蓝光-整站商业源码.zip

    InTouch触摸式考勤终端介绍.PDF

    InTouch触摸式考勤终端介绍.PDF

    毕业论文-日主题子主题-整站商业源码.zip

    毕业论文-日主题子主题-整站商业源码.zip

    毕业论文-彩虹目录列表程序v1.3源码-整站商业源码.zip

    毕业论文-彩虹目录列表程序v1.3源码-整站商业源码.zip

    灭火器识别数据集,识别率99.5%,分别率640x640,127张训练图,支持pasical voc xml格式的标注框

    灭火器识别数据集,识别率99.5%,分别率640x640,127张训练图,支持pasical voc xml格式的标注框

    【Java毕业设计】勤无忧考勤工具 - 论文、源码、PPT,打造毕业作品.zip

    此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 开发语言:Java 框架:SSM(Spring、Spring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批和院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生和审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期和请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课和请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导和学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任和院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况。 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导和学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新和维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名和密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问和操作其权限范围内的功能和数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露和非法访问。

    【电子设计竞赛】具有发电功能的储能小车设计与制作:高职高专组比赛任务及要求详解

    内容概要:本文档为2021年全国大学生电子设计竞赛的试题,针对“具有发电功能的储能小车”这一主题进行了详细的任务描述、要求说明及评分标准设定。任务要求设计并制作一款以超级电容为储能元件的手动发电智能小车,通过在特定区域内往复运动完成充电,之后按照规定执行直线行驶或沿圆形轨迹行驶的动作,并具备LED指示、液晶显示行驶距离等功能。基本要求涵盖小车的充电、启动控制、行驶距离等;发挥部分则增加了循迹行驶、硬币探测等挑战性任务。文档还对竞赛规则、测试条件等做了明确说明; 适合人群:参加全国大学生电子设计竞赛的高职高专组学生; 使用场景及目标:①为参赛队伍提供具体的设计与制作指导;②确保各参赛队伍理解竞赛规则、评分标准,以便准备比赛; 阅读建议:仔细研读任务要求和评分细则,确保设计方案符合所有规定,同时关注发挥部分以争取更高分数。

    汽车BCM程序源代码解析:灯光控制、雨刮洗涤、遥控及通讯功能的实现

    内容概要:本文详细介绍了汽车BCM(车身控制模块)程序源代码的关键功能和技术细节。首先探讨了BCM对外部灯光(如前照灯、转向灯、雾灯等)和内部灯光(如顶灯、门灯等)的精确控制机制,确保驾驶员和乘客的安全与舒适。其次,阐述了BCM对前后雨刮和洗涤系统的智能控制,提升车辆在恶劣天气条件下的能见度。接着,讲解了遥控钥匙(RKE)和门锁系统的运作方式,使车主能够远程操控车辆。最后,深入分析了CAN/LIN通讯和ISO15765诊断协议的应用,确保车辆各模块之间的高效协同和故障诊断。文中还展示了部分伪代码示例,帮助读者更好地理解BCM的具体实现。 适用人群:汽车电子工程师、嵌入式软件开发者、汽车爱好者。 使用场景及目标:适用于希望深入了解汽车BCM工作原理的技术人员,旨在掌握BCM在灯光控制、雨刮洗涤、遥控及通讯等方面的具体实现方法,从而应用于实际项目开发或故障排查。 其他说明:本文不仅提供了理论知识,还附有简单代码示例,便于读者理解和实践。

    毕业论文-深蓝AI智能名片小程序1.7.1-整站商业源码.zip

    毕业论文-深蓝AI智能名片小程序1.7.1-整站商业源码.zip

    基于springboot的“考研资讯平台”的设计与实现(源码+数据库+文档+PPT).zip

    # 基于springboot的“考研资讯平台”的设计与实现(源码+数据库+文档+PPT) - 开发语言:Java - 数据库:MySQL - 技术:springboot - 工具:IDEA/Ecilpse、Navicat、Maven

    VMware 17最新安装包

    VMware 17最新安装包

    电动汽车电机控制器:基于英飞凌TC27xC平台的详细设计方案及其实现

    内容概要:本文详细介绍了一种基于英飞凌TC27xC平台的电动汽车电机控制器设计方案。该方案涵盖了原理图、Bom清单、代码及其分析。文中首先概述了方案的整体架构,接着深入解析了原理图中的关键组件,如PWM信号用于控制电机速度和方向,以及ADC用于实时监控电流和电压。随后,提供了详细的Bom清单,列出了所有必要的电子元件。代码部分则分为初始化代码、电机控制代码和代码分析,展示了模块化的编程思路,确保系统的稳定性和易维护性。最后,介绍了该方案在实际电动汽车中的成功应用,强调了其对提升驾驶体验和安全性的贡献。 适合人群:从事电动汽车研发的技术人员、硬件工程师、嵌入式软件开发人员。 使用场景及目标:适用于正在研究或开发电动汽车电机控制系统的人群,旨在帮助他们理解和实现高效的电机控制解决方案。 其他说明:本文不仅提供了理论和技术细节,还分享了实践经验,有助于读者更好地掌握相关技术和应用场景。

    java必读之代码大全笔记

    java必读之代码大全笔记

    20张人脸面部不同区域分割、有标签

    20张人脸面部不同区域分割、有标签

    Java设计成品】学生考勤监控 - 论文、源码、PPT打包.zip

    此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 开发语言:Java 框架:SSM(Spring、Spring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批和院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生和审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期和请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课和请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导和学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任和院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况。 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导和学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新和维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名和密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问和操作其权限范围内的功能和数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露和非法访问。

    commons-csv-1.8.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    毕业论文- 灵石人才招聘plus商用V1.4.2-整站商业源码.zip

    毕业论文- 灵石人才招聘plus商用V1.4.2-整站商业源码.zip

    sentinel-cluster-common-default-1.8.0.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    【Java设计精品】勤达勤平台 - 论文、源码、PPT一站式.zip

    开发语言:Java 框架:SSM(Spring、Spring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导和学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新和维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名和密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问和操作其权限范围内的功能和数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露和非法访问。 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批和院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生和审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期和请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课和请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导和学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任和院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况

Global site tag (gtag.js) - Google Analytics