反射;代理;接口 ;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的动态代理
- 不用实现接口
- jdk的动态代理
-
mybatis
- dao层和xml 对接 xml中sql语句是自己写的 其他都是直接提供的
-
RPC/double
转载:https://blog.csdn.net/qq_43248585/article/details/115677581
查看评论