/*内部类是一个编译时的概念,*/

常规内部类、静态内部类、局部内部类、匿名内部类
1.常规内部类(常规内部类没有static修饰且定义在外部类类体中)
  1.常规内部类中的方法可以直接使用外部类的实例对象和实例方法
  2.在常规内部类中可以直接用内部类创建对象

2.静态内部类(与类的其他成员相似,可以用static修饰内部类,这样的类称为静态内部类。)
  1.静态内部类与静态内部方法相似,只能访问外部类的static成员,不能直接访问外部类的实例变量,与实例方法,只有通过对象引用才能访问
  2.由于static内部类不具有任何对外部类实例的引用,因此static内部类中不能使用this关键字来访问外部类中的实例成员,

3.局部内部类 (在方法体或语句块)内部定义的类成为局部内部类
  1.局部内部类只在方法体中有效,就像定义局部变量一样,在定义的方法外不能创建局部内部类的对象
  2.不能使用private protected public 等修饰符,也不能使用static修饰 ,但可以使用final和 abstract修饰
  3.方法中的内部类可以访问外部类成员。对于方法的参数和局部变量,必须有final修饰才可以访问

  4.static 方法中定义的内部类可以访问外部类定义的static成员

4.匿名内部类(定义类的最终目的是创建一个类的实例,但是如果某个类的实例只是用一次,则可以将类的定义与类的创建,放到一起完成,或者说定义类的同时,就创建一个类)
  1.匿名内部类可以继承一个类或实现一个接口,但是匿名内部类不能同时实现一个接口和继承一个类,也不能实现多个接口。
  2.由于匿名内部类没有名称,所以在类体中不能定义构造方法,也不能使用关键字来创建该类的实例,一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类

为什么要使用内部类:
  1.内部类提供接入其外围类的绿色通道
  2.一般来说,内部类继承自某个类或实现某个接口,和接口一起实现java中的多重继承
  3.private 内部类给类的设计者提供了一种途径,通过这种方式可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节
  4.匿名内部类可以使得代码更加灵活

/*代理*/:
  静态代理:只服务于一种类型的对象,如果要为多类型的对象服务,就要为每一种对象进行代理

  动态代理:假如想干三件事(相当于三段代码)安排好后以后你如果想调换顺序,换做以前,你必须去代码里进行改动,
  改动代码意味着你要重新测试,而如果你用动态代理就不会,把每件事看做一个方面,每个方面是织入的,改变顺序不影响整体

/*桥方法*/
  Java中的桥方法 是 合成方法,合成方法对于实现Java语言特征是必需的。
  最广为人知的例子就是协变返回类型和泛型中的案例,在泛型中案例基方法的方法的参数被擦除后与实际被调用的方法不同是会用到桥方法

Java基础加强-内部类及代理的更多相关文章

  1. 学习Spring必学的Java基础知识(2)----动态代理

    Spring AOP使用动态代理技术在运行期织入增强的代码,为了揭示Spring AOP底层的工作机理,有必要对涉及到的Java知识进行学习.Spring AOP使用了两种代理机制:一种是基于JDK的 ...

  2. java基础之 内部类

    Java中的内部类共分为四种: 静态内部类static inner class (also called nested class) 成员内部类member inner class 局部内部类loca ...

  3. Java基础(53):内部类(转)

    java中的内部类总结 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行 ...

  4. Java基础(五)--内部类

    内部类简单来说就是把一个类的定义放到另一个类的定义内部 内部类分为:成员内部类.局部内部类.匿名内部类.静态内部类 成员内部类:最常见的内部类 public class Outter { privat ...

  5. java基础之 内部类 & 嵌套类

    参考文档: 内部类的应用场景 http://blog.csdn.net/hivon/article/details/606312 http://wwty.iteye.com/blog/338628 定 ...

  6. Java 基础【19】代理

    Java 代理(Proxy)模式与现实中的代理含义一致,如旅游代理.明星的经纪人. 在目标对象实现基础上,增加额外的功能操作,由此来扩展目标对象的功能. JavaWeb 中最常见的过滤器.Struts ...

  7. Java基础加强总结(三)——代理(Proxy)

    一.代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习java框架的基础,不会动态代理技术,那么在学习Spring这些框架时是学不明白的. 动态代理技术就是用来产生一个对象的代理对 ...

  8. java基础篇6之代理

    代理的概念与应用 Class clazzProxy = Proxy.getProxyClass(Collection.class.getClassLoader,Collection.class); c ...

  9. JAVA基础知识之JVM-——动态代理(AOP)

    代理模式简介 在很多场景下,我们想使用一个类(通常是接口)A时,并不是直接使用这个类,而是通过另外一个类B去调用A的方法,这里的类B就是一个代理类. 有很多场景都会用到这种方法,例如假如创建类A需要很 ...

随机推荐

  1. 用VLC读取摄像头产生RTSP流,DSS侦听并转发(二)

    用VLC读取摄像头产生RTSP流,DSS侦听并转发(二) 之前介绍过<用VLC读取摄像头产生RTSP流,DSS主动取流转发(一)>本文介绍另一种方法. 摄像机地址是192.1.101.51 ...

  2. PAT 甲级1025 PAT Ranking (25 分)(结构体排序,第一次超时了,一次sort即可小技巧优化)

    题意: 给定一次PAT测试的成绩,要求输出考生的编号,总排名,考场编号以及考场排名. 分析: 题意很简单嘛,一开始上来就,一组组输入,一组组排序并记录组内排名,然后再来个总排序并算总排名,结果发现最后 ...

  3. 移植Fatfs文件系统到工程中

    下载Fatfs文件管理系统:http://elm-chan.org/fsw/ff/archives.html 下载最新版本 在工程中新建Fatfs文件夹,把fatfs文件中的全部复制过来 由于Fatf ...

  4. Anaconda中安装Cascade RCNN(Detectron)的若干问题

    安装参考https://github.com/zhaoweicai/Detectron-Cascade-RCNN/blob/master/INSTALL.md 1.对于在 python detectr ...

  5. java面试考点-HashTable/HashMap/ConcurrentHashMap

    HashTable 内部数据结构是数组+链表,键值对不允许为null,线程安全,但是锁是整表锁,性能较差/效率低 HashMap 结构同HashTable,键值对允许为null,线程不安全, 默认初始 ...

  6. Github搭建个人博客的总结

    1.  参考 这个 博客 : https://blog.csdn.net/xudailong_blog/article/details/78762262 2. 把上面按照的就安装,并把git 仓库克隆 ...

  7. ffmpeg学习笔记-Linux下编译Android动态库

    Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可 ...

  8. 基于mxgraph.js开发的流程图组件

    1.fabric.js 在决定使用mxgraph.js开发流程图之前,尝试过用fabric.js来开发,结果发现并没有想象中的那么简单,而且用户体验非常差,下面是体验地址:workFlow直到遇到一个 ...

  9. odoo12安装指南

    声明:本指南默认已安装好Python3和pycharm及postgresql,odoo12的源码包 一. 1.在pycharm创建一个新的项目 建议创建在虚拟环境中 2.在pycharm的控制台下检验 ...

  10. poj1947(树上分组背包)

    题目链接:https://vjudge.net/problem/POJ-1947 题意:给定一棵树,求得到一个结点数为p最少删多少条边. 思路: 明显的树形dp,分组背包.用dp[u][j]表示在结点 ...