抽象类和接口的区别
接口中只能包含抽象方法和静态常量
抽象类中可以有构造方法,成员变量,静态方法,抽象方法和非抽象方法 抽象类中可以没有抽象方法, 但是如果一个类中有抽象方法,那么这个类一定是抽象类 抽象方法不能有方法体 一个类只能继承一个类,但是可以实现多个接口Java 多态
多态是同一个行为具有多个不同表现形式或形态的能力
多态就是同一个接口,使用不同的实例而执行不同操作 示例: 接口:打印机 实现类1:黑白打印机打印黑白效果 实现类2:彩色打印机打印彩色效果 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。 多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。SVN和git的区别
SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员都一起瘫痪
Git每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端。 最核心的区别Git是分布式的,而Svn不是分布的AOP(面向切面编程)
package com.example.demoaspect.dy;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component;import java.util.Arrays;
/**
- AOP:动态代理
- 指定程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式.
- 通知方法:
- 前置通知:在目标方法运行之前运行
- 后置通知:在目标方法运行结束运行(无论方法是正常结束还是异常结束)
- 返回通知:在目标方法运行正常返回通知
- 异常通知:在目标方法运行出现异常通知
- 环绕通知:在目标方法运行执行前、后、异常时,都可以通知
- */
@Aspect
@Component public class LogAspect {/** * 抽取公共的切入点表达式 * 1.本类的引用 * 2.其他的切面引用 */@Pointcut("execution(* com.example.demoaspect.dy.service.AopService.*(..))")public void pointCut() {}/** * 前置通知:在目标方法运行之前运行 * @param joinPoint joinPoint */@Before("pointCut()")public void logStart(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); System.out.println("" + joinPoint.getSignature().getName() + " logStart..." + Arrays.asList(args));}/** * 后置通知:在目标方法运行结束运行(无论方法是正常结束还是异常结束) * * @param joinPoint joinPoint */@After("pointCut()")public void logEnd(JoinPoint joinPoint) { System.out.println("logEnd...");}/** * 返回通知:在目标方法运行正常返回通知 * * @param result result */@AfterReturning(value = "pointCut()", returning = "result")public void logReturn(Object result) { System.out.println("logReturn...");}/** * 异常通知:在目标方法运行出现异常通知 * * @param exception 异常 */@AfterThrowing(value = "pointCut()", throwing = "exception")public void logThrown(Exception exception) { System.out.println("logThrown...");}/** * 环绕通知:手动引导代码执行 * * @param pdj 可执行体 * @return return * @throws Throwable Throwable */@Around(value = "pointCut()")public Object logAround(ProceedingJoinPoint pdj) throws Throwable { Object result = null; try { System.out.println("前置"); result = pdj.proceed(); System.out.println("后置"); } catch (Exception e) { System.out.println("异常"); } System.out.println("后置2"); return result;}
}
什么是反射
Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。
对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。