Java编程模型

面向对象编程(OOP)
首先Java面向对象编程有三大特性为封装性、继承、多态

  • 封装:决定数据访问的限制
  • 继承:决定上下游的关系
  • 多态:一种接口多种实现

面向切面编程(AOP)
面向切面编程分为三种种,一种静态、一种动态、字节码提升

  • 静态接口:使用java.util.logging.Filter、java.util.EventListener,当我执行代码的时候会进行拦截通过规定拦截方法、注解、参数、异常的方式,会有事件进行回调的过程可以在前置、后置、返回、异常中进行执行
  • 动态代理:也是从字节码提升中来,通过java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler中来实现动态代理
  • 字节码提升:使用ASM(ObjectWeb)、CGLIB、Javassist(JBoss)、BCEL(Apache)

面向元信息编程(MDOP)
元数据编程分为:泛型、反射、注解

  • 泛型:
public interface List<E> extends Collection<E>
  • 注解:使用@Annotation
  • 反射:Relection 通过反射可以获取运行时的信息
    • java.lang.reflect.Member
    • java.lang.reflect.AnnotateElement
    • java.lang.reflect.Executable
    • java.lang.reflect.Field
    • java.lang.reflect.Method
    • java.lang.reflect.Constructor

面向函数编程(FOP)

函数式接口:一般可以使用函数式编程的接口上都会有@FunctionalInterface

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface{

}


@FunctionalInterface
public interface Consumer<T>{
	...
	void accept(T t);
	...
}

默认方法:在接口上提供一个 default 的方法

public interface Function<T,R>{
	...
	default <V> Function<V,R> compose(Function<? super V,? extends T> before){
		Objects.requireNonNull(before);
		return (V v) -> apply(before.apply(v));
	}
}

方法引用

public final class Collectors{
	...
	public static <T> Collector<T, ?, Long> counting(){
		return reducting(0L,e ->1L,Long::sum);
	}
}

面向模块编程(MOP):将最小粒度设定为模块,在使用的时候可以导入具体的模块进行使用,主要提高可靠性和封装性,提高系统同的健壮性

module com.foo.bar { 
	 requires org.baz.qux;//一个或更多个requires项可以被添加到其中,它通过名字声明了这个模块依赖的一些其他模块,在编译期和运行期都依赖的。

	 exports com.foo.bar.alpha;//exports项可以被添加,它可以仅仅使指定包(package)中的公共类型可以被其他的模块使用。
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值