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
