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

目录
  • 一、内部类
    • 1.1 创建内部类
    • 1.2 内部类调用外部类的变量
  • 二、局部内部类
    • 2.1 外部方法访问变量
  • 三、匿名内部类
  • 四、lambda表达式结合局部内部类
  • 五、静态内部类
  • 六、代理

一、内部类

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

  • 内部类可以对同一个包中的所有类隐藏(权限改为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内部类与代理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java算法之静态内部类实现雪花算法

    概述 在生成表主键ID时,我们可以考虑主键自增 或者 UUID,但它们都有很明显的缺点 主键自增:1.自增ID容易被爬虫遍历数据.2.分表分库会有ID冲突. UUID: 1.太长,并且有索引碎片,索引多占用空间的问题 2.无序. 雪花算法就很适合在分布式场景下生成唯一ID,它既可以保证唯一又可以排序.为了提高生产雪花ID的效率, 在这里面数据的运算都采用的是位运算 一.概念 1.原理 SnowFlake算法生成ID的结果是一个64bit大小的整数,它的结构如下图: 算法描述: 1bit 因为二进

  • java中的内部类内部接口用法说明

    简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口. 内部类 先讲内部类,内部类就是在类中定义的类.类中的类可以看做是类的一个属性,一个属性可以是static也可以是非static的.而内部类也可以定义在类的方法中,再加上匿名类,总共有5种内部类. 静态内部类 我们在class内部定义一个static的class,如下所示: @Slf4j publi

  • java 利用反射获取内部类静态成员变量的值操作

    昨晚,一同事问到我,怎么利用java反射解析内部类静态成员变量的值,于是顺手写下了. 废话不多说,直接上代码! 待解析类结构如下: /** * @Author changle * @Time 17/6/13. * @Desc to do */ public class Goods { static class apple{ public static String version = "iphone6s[是手机不是吃的苹果]"; public static String date =

  • 如何用匿名内部类实现 Java 同步回调

    在一个应用系统中,不论使用何种编程语言,模块之间要进行调用,仅存在三种方式:同步调用.异步调用.回调.本文就其中回调方式进行详细解读,并通过匿名内部类的手段,在最后实现一个同步回调的过程. 一.回调的意义 在学习回调之前,我们需要知道使用回调的原因,和回调的应用场景. 不如先思考两个问题: 栈底对栈顶通常是不可见的,但是栈顶有时需要直接调用栈底 上级派下级做事,在此期间,下级可能需要通过上级获取高权限的协助 而在本例中,回调方式被用来处理爬取后的大量返回数据.在业务层面,这些数据被安排在调用方进

  • Java内部类的实现原理与可能的内存泄漏说明

    在使用java内部类的时候要注意可能引起的内存泄漏 代码如下 package com.example; public class MyClass { public static void main(String[] args) throws Throwable { } public class A{ public void methed1(){ } } public static class B{ public void methed1(){ } } 编译生成了如下文件 反编译MyClass 反

  • Java面向对象之内部类案例讲解

    1. 内部类 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了 1.1 内部类概述 内部类就是在一个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了. 内部类不是在一个java源文件中编写俩个平行的俩个类,而是在一个类的内部再定义另外一个类. 我可以把外边的类称为外部类,在其内部编写的类称为内部类. 内部类分为四种: 成员内部类 静态内部类 局部内部类 匿名内部类 1.2 成员内部类(

  • java内部类的定义与分类示例详解

    内部类 基本介绍 一个类的内部又完整的嵌套了另一个类结构.被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class).是我们类的第五大成员,内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系 基本语法: class Outer{ class Inner{ } } 内部类的分类: 1.定义在外部类局部位置上(比如方法内): 1).局部内那类(有类名) 2).匿名内部类(没有类名,重点); 定义在外部类的成员位置上: 1)成员内部类(没

  • Java内部类和异常类的概念以及使用

    1 内部类 Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类. 内部类的类体中不可以声明类变量和类方法.外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员. 内部类的使用规则: (1)声明内部类如同在类中声明方法或变量一样,一个类把内部类看作是自己的成员. (2)外嵌类的类体中可以用内部类声明的对象,作为外嵌类的成员. (3)外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. (4)内部类的类体中不可以声明类变量和方法. (5

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

    目录 一.内部类 1.1 创建内部类 1.2 内部类调用外部类的变量 二.局部内部类 2.1 外部方法访问变量 三.匿名内部类 四.lambda表达式结合局部内部类 五.静态内部类 六.代理 一.内部类 内部类是指在另一个类中的类 内部类可以对同一个包中的所有类隐藏(权限改为private) 内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据 注意:内部类位于类的内部,并不意味着类的实例都必须要有内部类的实例 内部类是可以访问定义这个类的属性的,因为内部类的对象总有一个隐式引用,指

  • Java 基础之内部类详解及实例

     Java 基础之内部类详解及实例 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液.跳动) 显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类 而心脏又在人体当中,正如同是内部类在外部内当中  实例1:内部类的基本结构 //外部类 class Out { private int age = 12; //内部类 class In { public vo

  • Java基础之反射技术相关知识总结

    一.反射概念 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法.这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制.反射被视为动态语言的关键. 二.反射应用场景 1.几乎所有的框架都会用到反射 2.程序解耦合使用 3.代码更加的优雅 三.反射更多细节 1.Jdk中的位置: java.lang.reflect包下 2.获取字节码方式 //

  • Java基础学习之运算符相关知识总结

    1.算术运算符 +表示加法运算符 -表示减法运算符 *表示乘法运算符 /表示除法运算符 %表示取模/取余运算符 package com.lagou.Day03; /** * 算术运算符 */ public class Demo01 { public static void main(String[] args) { //1.声明两个int类型的变量并初始化 //int ia = 6;ib = 2;//表示声明两个int类型的变量ia和ib,不推荐使用 int ia = 6; int ib = 2

  • Java基础之线程锁相关知识总结

    一. synchronized关键字 1.对象锁 a.当使用对象锁的时候,注意要是相同的对象,并且当有线程正在访问对象锁内部的代码的时候,其他线程无法访问.(注意无法访问的范围). b.但是并不影响没有使用对象锁的部分的代码的运行. 对象锁分为两类一个叫做synchronized代码块(圆括号内是普通类的对象),另外一个是sybchronized修饰普通成员方法.它们二者其实可以通过this关键字进项转化. 2.类锁 a. 当使用类锁的时候,只要是同一个类的对象.当有线程正在访问类锁内部的代码的

  • 浅谈Java面向对象之内部类

    目录 内部类 访问外部对象 访问内部对象 局部内部类 匿名内部类 静态内部类 内部类 内部类是定义在另一个类中的类,例如 TalkingClock 类中内嵌了 TimePrinter 类: class TalkingClock{ private int interval; private boolean beep; public TalkingClock(int interval, boolean beep){} public void start(){} public class TimePr

  • Java面向对象之内部类详解

    目录 前言 内部类概述 内部类的分类 成员内部类 局部内部类 前言 在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类.本篇博客将总结内部类的使用. 内部类概述 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类. 在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类. 内部类一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称.

  • Java基础之数组超详细知识总结

    一.一维数组 1.Java语言中的数组是一种 引用数据类型.不属于基本数据类型.数组的父类是 Object. 2.数组实际上是一个容器,可以同时容纳多个元素.(数组是一个数据的集合) 3.数组当中可以存储"基本数据类型"的数据,也可以存储"引用数据类型"的数据. 4.数组因为是引用类型,所以数组对象存储在 堆内存 当中.(数组是存储在堆当中的) 5.数组当中如果存储的是"java对象"的话,实际上存储的是对象的"引用(内存地址)&quo

  • Java开发之内部类对象的创建及hook机制分析

    本文实例讲述了Java内部类对象的创建及hook机制.分享给大家供大家参考,具体如下: Java中的内部类虽然在状态信息上与其外围类在状态信息是完全独立的(可直接通过内部类实例执行其功能),但是外围类对象却是内部类对象得以存在的基础. 内部类对象生成的时候,必须要保证其能够有外围类对象进行挂靠(hook),从而java提供了严格的内部类对象生成的语法. 一般惯用两种方法,生成内部类对象. Method1: 使用  外围类实例.new  内部类名称() 的标准方法. Example 1: publ

随机推荐