-
java桥接模式的优缺点
752 1、优点为抽象与分离,扩展能力强。符合开闭原则、合成复用原则。实现对客户的透明细节。 2、缺点是增加了系统理解和设计的难度。 由于聚合关系建立在抽象层,要求开发者设计和编程抽象化,正确识别系统中两个独立变化的维度。 实例 publicclassClient{ publicstaticvoidmain(String[]args){ OperatingSystemVersionos=newMa…- 1.8k
- 0
-
java桥接模式是什么
749 说明 1、桥接模式将抽象部分与实现部分分离,使其独立变化。 它用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 2、桥接模式将继承关系转化为关联关系,降低了类与类之间的耦合度、系统中类的数量和代码量。 使用场景 不希望或不适用于继承场景。 接口或抽象场景不稳定。 重用性要求高的场景。 实例 publicclassBridgeTest{ publicstaticvo…- 1.8k
- 0
-
java中CompletableFuture方式是什么
说明1、JDK 8中引入了 CompletableFuture 类,实现了Future和CompletionStage接口.为异步编程提供了一些列方法,如supplyAsync、runAsync和thenApplyAsync等。2、功能是可以让两个或者多个进行运算来产生结果。实例/***@authormghio*@since2021-08-01*/publicclassCompletableFut…- 3k
- 0
-
java异常编程FutureTask的介绍
743 说明 1、FutureTask类不仅实现了Future接口还实现了Runnable接口,表示一种可生成结果的Runnable。 2、FutureTask类实现了Future接口的开启和取消任务、查询任务是否完成、获取计算结果方法。 要获取FutureTask任务的结果,我们只能通过调用getXXX()系列方法才能获取,当结果还没出来时候这些方法会被阻塞,同时这了任务可以是Callable类…- 1.7k
- 0
-
java中Cglib代理的使用
740 说明 1、Cglib代理可以称为子类代理,是在内存中构建子类对象,从而扩展目标对象的功能。 静态代理和JDK代理都需要一个对象来实现一个接口。有时候代理对象只是一个单独的对象,Cglib代理可以在这个时候使用。 2、Cglib通过Enhancer生成代理类,通过实现MethodInterceptor接口,实现intercept方法。 可以在该方法中添加增强方法,并可以使用反射Method或…- 1.5k
- 0
-
java动态代理的特点
737 说明 1、JDK动态代理不需要实现界面,只有目标对象需要实现界面。 2、基于接口的动态代理需要使用JDK中的API,在JVM内存中动态构建Proxy对象。 3、需要使用java.lang.reflect.Proxy和newProxyInstance方法,但该方法需要接收三个参数。 实例 publicclassBusinessAgentimplementsSell{ privateVendo…- 1.7k
- 0
-
java通配符的使用规则
734 说明 1、定义in变量,使用上限通配符。 使用extends关键字。 2、用super关键字用下限通配符来定义out变量。 3、如果In变量可以使用Object类中定义的方法访问,则用无界的通配符。 4、当代码需要访问In和out变量时,不要使用通配符。 实例 //自然数 classNaturalNumber{ privateinti; publicNaturalNumber(inti){…- 1.6k
- 0
-
java下界通配符的用法
731 说明 1、下限通配符将未知类型限制为特定类型或超类型。 2、下界通配符使用通配符('?')。 表示后面是super关键词,然后是它的下限< ?super A > 。 3、下通配符实例化的类必须是当前类或当前类的超类。 存储数据时,数据类型只能是当前类或当前类的超类。 实例 publicstaticvoidaddNumbers(List<?superIn…- 2k
- 0
-
java上界通配符如何使用
728 说明 1、上限通配符可用于放松对变量的限制。 举例来说,假设你想写一个处理List、List和List的方法,那么你可以通过使用上限通配符来实现这一点。 2、上界通配符实例化的类必须是当前类,或是当前类的子类。 3、如果要声明上界通配符,请使用通配符值。 然后是extends关键词,最后是它的上界。请注意,在上下文中,extends一般用于表示extends(如类)或implements(…- 1.8k
- 0
-
java无界通配符的使用场景
725 说明 1、如果正在编写一种可以使用Object类中提供的功能来实现的方法。无界通配符类型是使用通配符指定的。 例如列表 < ? > .这被称为未知类型的列表。 2、当代码在泛型中使用不依赖类型参数的方法。 例如,List.size 或 List.clear。事实上,很多使用 Class<T>的方法不依赖于 T,所以 Class<?> 经常被使用(Clas…- 1.5k
- 0
-
java泛型算法如何实现
722 说明 1、有界类型参数是实现泛型算法的关键。 2、这个方法实现简单但无法编译,因为大于号的操作符(>)只适用于基本类型。 例如short、int、double、long、float、byte和char。无法使用>比较对象。要解决此问题,可以使用Comparable接口限定的类型参数。 实例 publicinterfaceComparable<T>{ publicin…- 765
- 0
-
java泛型方法的语法使用
719 说明 1、泛型方法的语法包括类型参数列表(在尖括号中),它出现在方法返回类型之前。 对于静态泛型方法,类型参数必须出现在返回类型之前。 2、泛型方法是引入自己类型参数的方法。 这类似于声明的泛型类型,但类型参数的作用域仅限于声明的方法。允许使用静态和非静态泛型方法以及泛型数。 实例 publicclassUtil{ publicstatic<K,V>booleancompare…- 631
- 0
-
java泛型类型的调用和实例化
716 1、泛型调用类似于普通方法调用,但你不是把参数传递给方法,而是把类型参数传递给Box类本身。 Box<Integer>integerBox; 类型参数和类型变量术语: 许多开发人员可以混淆地使用术语“类型参数”和“类型变量”,但这两个术语并不相同。编码时,提供类型参数以创建参数化类型。所以 T 在Foo<T> 食物 < t > 是一个类型参数,而 Str…- 786
- 0
-
java使用泛型的优势
713 说明 1、编译时进行更强的类型检查。 2、Java编译器检查泛型代码的强类型,如果代码违反类型安全。 会出错。修正编译时的错误比修正运行时的错误容易,后者可能难以找到。 3、消除显示类型转换。 4、编码采用泛型重构后,可以看到,无需强制转换。 这将给程序员带来极大的方便。 使程序员能够实现通用算法。通过使用泛型,程序员可以实现不同类型集成的泛型算法,可以定制,类型安全易读。 实例 List…- 686
- 0
-
java中ArrayList集合的扩容机制
710 1、扩容要看添加方法,从属性中可以看出有一个DEFAULT_CAPACITY属性值10。 publicbooleanadd(Ee){ //验证是否需要扩容操作 ensureCapacityInternal(size+1);//IncrementsmodCount!! //在对应的下标下添加值 elementData[size++]=e; returntrue; 2、刚刚进入ensureCa…- 909
- 0
-
java泛型的局限探究
707 1、泛型类的静态上下文中类型变量失效。 //静态域或者方法里不能引用类型变量 privatestaticTinstance; //静态方法本身是泛型方法就行 privatestatic<T>TgetInstance(){ 2、不能实例化类型变量。 //publicRestrict(){ //this.data=newT(); // 3、不能用基本类型实例化泛型参数。 //Nor…- 687
- 0
-
java泛型方法是什么
704 说明 1、泛型方法,是在调用方法的时候指明泛型的具体类型。 2、泛型方法可以在任何地方和任何场景中使用,包括普通类和泛型类。 注意泛型类中定义的普通方法和泛型方法的区别。 实例 publicclassGenericMethod{ private<T>Ttest(T...a){ returna[a.length/2]; publicstaticvoidmain(String[]a…- 633
- 0
-
java中有哪些基本注解
701 1、java.lang.Override是一个标记类型注解,它被用作标注方法。说明了该方法是继承了父类的方法,就是重写了父类中同名方法。 @Override publicvoidonCreate(BundlesavedInstanceState) {……. 这种写法是正确的,如果你写成: @Override publicvoidoncreate(BundlesavedInstanceSta…- 600
- 0
-
java中EnumSet的使用
698 说明 1、EnumSet可以存储一个枚举中的元素,它提供了一种通过集合来操作枚举类的方式。 2、EnumSet中的所有元素都必须指定枚举类型的枚举值,这种枚举类型在创建EnumSet时是显性的或隐性的。 实例 /** *EnumSet的设计充分考虑到了速度因素,因为它必须与非常高效的bit标志相竞争(其操作与HashSet相比,非常地快).<br> *就其内部而言,它(可能)就…- 901
- 0
-
java如何指定枚举的行为
695 说明 1、枚举不仅可以用来表示常量,有时还可以在枚举中写一些简单的计算逻辑。 2、可以使用抽象的方法来定义每个枚举所需的行为。 实例 packagecom.tea.modules.java8.enums; importlombok.Getter; /** *com.tea.modules.java8.enums<br> *运算符枚举 * *@authorjaymin *@sin…- 847
- 0
-
java同步的使用条件
692 1、为了保持跨线程的正确可见性,必须使用synchronized或volatile。 2、读取可能是另一个线程最终写入的变量。 3、写一个可能被另一个线程读取的变量。 实例 classSellTicketimplementsRunnable{ privateinttickets=10; publicvoidrun(){ while(true){ if(tickets>0) sell(…- 393
- 0
-
java同步方法的使用
689 1、对于普通的同步方法,该锁将与调用方法的对象相关联。 2、对于静态同步方法,该锁是与声明方法类对象相关的监视器。 3、创建同步块最简单的方法是将方法声明为同步。 这意味着调用者在进入方法体之前必须获得锁。 实例 publicclassPoint{ publicsynchronizedvoidsetXY(intx,inty){ this.x=x; this.y=y; 以上就是java同步方…- 433
- 0
-
java中TimerTask是什么
686 1、JDK1.3将TimerTask工具引入Java语言。这个工具允许你定期或延迟执行任务。 2、Timer的实现非常简单,创建了一个定时器线程,并根据执行时间构建了一个等待事件的队列。 TimerTask线程是一个守护线程,因此它不会阻止程序退出。由于计时事件执行在Timer线程中,您必须确保访问Timer线程中任务中使用的任何数据项的正确同步。 实例 publicstaticvoidm…- 468
- 0