JAVA基础知识整理----反射、代理、接口或lambda表达式

反射;代理;接口 ;lambda表达式

反射

Class类 管理和表示类的信息

获取类的信息

    类名.class 对象.getclass(); class.forName(“java.lang.String”);包名加类名 常用 前两种都会固定到程序中,第三种只需要传入任意的字符串

创建类的的对象

    获取到的类信息.newInstance(); 上面的newInstance调用的是一个空的构造函数 如果重载构造函数注意参数

Class三种的方法

    都有getName方法获取项目的名称 Filed getType方法 Method 返回类型参数 返回修饰符 Constructor 返回类型参数 返回修饰符

通过反射设置域中的值

getDeclaredFileds()获取所有的域

getDeclaredMethods()获取所有的方法

强制读写某个属性值:

setAccessible(true);设置属性可以访问,private 性质的

框架中的使用

spring项目

spring ioc

    由反射实现的

sevlert项目

    没有new去创建对象,都是通过反射创建的 启动流程 tomcat 只能执行sevlert程序 加入最顶部的标签注解 原理是一样 启动之后扫描所有的文件 有注解则创建对象 会定位到对应的 请求打入 分发不同的sevlert 根据地址查看对应的方法 web.xml配置项目 根据配置的文件去加载对应的sevlert 使用select name 别名 class 对应的类

接口(区别和相同点)

抽象类

接口

    相同点 都不能被实例化 不同点 抽象类可以有构造方法,接口不能有 抽象类可有普通成员变量,接口没有普通成员变量 接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final 抽象类中可以包含静态方法,接口中不能包含静态方法 一个类可以实现多个接口,但只能继承一个抽象类。 接口可以被多重实现,抽象类只能被单一继承 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法 接口定义的关键字interface;抽象类定义的关键字abstract 抽象类继承的关键字extends,接口的实现关键字implements 抽象类可以提供成员方法的实现细节,可以用public 、protected、default这些修饰符;接口只能是public abstract方法

二维数组排序

    Comparator 方法 设置排序规则可以自动排序 使用方法:

对象克隆

    深拷贝 完全相同 完全独立的两份 重新构建一个新的对象 浅拷贝 指向同一个位置

Lambda表达式(总结pdf中的条目,从匿名内部类和接口学习)

内部类

在类内声明 通过外围类加.内部类名 创建 new waiwei().new neibu(); 可以读取外围类的私有属性 方法内的内部类 只能作用在方法内部 方法内部的变量。传入参数必须是最终变量 匿名内部类 new Thead(new Runnable(){ }) 静态内部类属于所有的对象所有 声明的所有的静态域都是final的

代理(及在原有的功能上添加功能,不修改原有代码)

静态代理

    不足:所有的静态代理都需要手动去写。如果接口增加方法 实现类和代理类都需要添加新的方法 代码实现

动态代理

    代码实现 不足:需要实现接口方法

应用代理的地方

    spring aop jdk的动态代理 必须实现接口 cglib的动态代理 不用实现接口 mybatis dao层和xml 对接 xml中sql语句是自己写的 其他都是直接提供的 RPC/double
经验分享 程序员 微信小程序 职场和发展