Java基础之内部类与代理知识总结

 更新时间:2021年06月04日 15:15:06   作者:GDUT_Ember  
今天带大家复习Java的基础知识,文中有非常详细的介绍及图文示例,对正在学习Java的小伙伴们很有帮助,需要的朋友可以参考下

一、内部类

内部类是指在另一个类中的类

  • 内部类可以对同一个包中的所有类隐藏(权限改为private)
  • 内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据

注意:内部类位于类的内部,并不意味着类的实例都必须要有内部类的实例

内部类是可以访问定义这个类的属性的,因为内部类的对象总有一个隐式引用,指向创建它的外部类对象

对于一般的类,只有包可见性和公共可见性(一个是缺省,另一个是public,没有protected和private,protected一般对于外部类权限是没多大用处的)

但对于内部类,可以是所有类型,public、protected、default、private(因为是内部类,外面还套着一个类,所以protected是有意义的)

1.1 创建内部类

内部类的new比较特殊,是建立在以实例化的外部类去执行的(而且前提内部类不为private)

在这里插入图片描述

如果内部类为private的话,对于外部是根本找不到这个类的,不可以去调用,而且只有外部类可以构造内部类的实例对象

1.2 内部类调用外部类的变量

也是使用this关键字,不过为了区分this(区分是外部类还是内部类),使用外部类的属性时,需要用:外部类名.this来操作

在这里插入图片描述

二、局部内部类

如果一个类只要使用一次,可以直接在一个方法中局部地去定义这个类,更好地节约了空间

注意:局部内部类声明时是不可以有访问说明符的(public或者private),局部类的作用域被限定在声明这个局部类的方法块中,局部类最大的优势就是,对外部世界是完全隐藏的,甚至在本类也不可以访问,也就是除了声明局部类的方法块中,没有任何其他类或方法可以访问局部类,知道其存在

在这里插入图片描述

2.1 外部方法访问变量

局部类的一个优点就是局部类不仅可以访问外部类的字段,还可以访问方法里面的局部变量

在这里插入图片描述

访问的方法与内部类是一致的

三、匿名内部类

如果对于局部内部类使用时,甚至不需要去定义匿名内部类的名字,只是想单独去创建对象,那么可以不用给其设置名字,称为匿名内部类

比如说,想要一个临时的接口实现类

在这里插入图片描述

当然不一定是一个接口,也可以是一个类,如果是接口就要去实现里面的抽象方法,如果是类的话,就可以自定义去进行拓展

在这里插入图片描述

四、lambda表达式结合局部内部类

前面说过lambda表达式适用于函数式接口,所以我们也可以使用lambda表达式来实现局部内部类

当然,lambda表达式生成的相当于是一个参数,所以要使用方法入参来调用

在这里插入图片描述

lambda表达式使用一个空括号代表无参,所以建议,即使只有一个参数,也放在括号里面

五、静态内部类

或许有的时候,只是想将内部类隐藏起来,并不需要内部类拥有外部类的一个引用指针(即this),那么可以将内部类用static关键字去修饰,这样内部类就不会有外部类的引用了(无法使用到外部类的方法和变量了),称为静态内部类

六、代理

代理(proxy)是一种比较高级的计技术

利用代理可以在运行时创建实现了一组给定接口的新类(在不知道要实现哪些接口时)

到此这篇关于Java基础之内部类与代理知识总结的文章就介绍到这了,更多相关Java内部类与代理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决java.util.zip.ZipException: Not in GZIP format报错问题

    解决java.util.zip.ZipException: Not in GZIP&nbs

    这篇文章主要介绍了解决java.util.zip.ZipException: Not in GZIP format报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 浅谈一下JVM垃圾回收算法

    浅谈一下JVM垃圾回收算法

    这篇文章主要介绍了一下JVM垃圾回收算法,Java有着自己一套的内存管理机制,不需要开发者去手动释放内存,开发者只需要写好代码即可,运行过程中产生的垃圾都由JVM回收,需要的朋友可以参考下
    2023-04-04
  • js判断是否含有GBK以外的字符的函数

    js判断是否含有GBK以外的字符的函数

    判断是否含有GBK以外的特殊字符
    2008-10-10
  • SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库密码加密的方法

    SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库

    这篇文章主要介绍了SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库密码加密的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • SpringBoot上传和下载文件的原理解析

    SpringBoot上传和下载文件的原理解析

    文件上传的功能很常见,但是很多人并不清楚文件上传后的具体原理,接下来通过本文给大家分享SpringBoot上传和下载文件的原理解析,感兴趣的朋友一起看看吧
    2021-07-07
  • Spring Boot整合RabbitMQ开发实战详解

    Spring Boot整合RabbitMQ开发实战详解

    这篇文章主要介绍了Spring Boot整合RabbitMQ开发实战,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • SpringCloud Gateway HttpWebHandlerAdapter链路调用请求流程介绍

    SpringCloud Gateway HttpWebHandlerAdapter链路调用请求流程介

    Spring Cloud Gateway旨在为微服务架构提供一种简单有效的、统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,它不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等
    2022-10-10
  • ChatGPT-4.0未来已来 你来不来

    ChatGPT-4.0未来已来 你来不来

    最近听说了一个非常火的技术ChatGPT4.0,今天这篇文章就给大家介绍一下ChatGPT究竟是什么东东,不得不说ChatGPT是真的强,下面就让我们一起了解究竟什么是ChatGPT吧
    2023-03-03
  • Java超详细分析讲解哈希表

    Java超详细分析讲解哈希表

    哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我想我举个例子你就会明白了,最典型的的例子就是字典
    2022-06-06
  • 详解Java中CountDownLatch异步转同步工具类

    详解Java中CountDownLatch异步转同步工具类

    今天给大家带来的是关于Java的相关知识,文章围绕着CountDownLatch异步转同步工具类展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06

最新评论