自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 java中的动态代理

概念:代理类在程序运行时创建的代理方式被称为动态代理。创建对象的方法:newProxyInstance。要求:被代理类至少实现一个接口。要求:被代理类不能是最终类。创建对象的方法:create。涉及类:Enhancer。涉及的类:Proxy。

2024-12-09 12:30:00 305

原创 java泛型原理(泛型擦除)

原始类型就是擦除了泛型信息,最后在字节码中的类型变量的真正类型。无论何时定义一个泛型类型,相应的原始类型都会被自动地提供。类型变量被擦除,并使用其限定类型(无限定的变量用Object替换)。编译器会自动生成桥方法,桥方法的参数类型都是Object,桥方法的内部实现就是调用子类实现的方法。,谁是一个引用,用这个引用调用泛型方法,就会对这个引用调用方法进行类型检查,而无关它真正引用的对象。java的泛型是由编译期这个层次实现的,字节码是不包含泛型中的类型信息的。当一个具有擦除返回类型的泛型方法被调用时会进行。

2024-12-08 18:30:00 250

原创 java中泛型

和T都表示不确定的类型 ,但如果是T的话,函数里面可以对T进行操作,比方 T car = getCar(),而不能用?泛型的本质是**为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限定的类型)。T运行时是一个确定的类型,通常用于泛型类和泛型方法的定义。运行时是一个不确定的类型,通常用于泛型方法的调用代码参数,不能定义泛型方法和泛型类。这种参数类型可以用在类、接口、方法中,分别被称为泛型类、泛型接口、泛型方法。泛型方法,是在调用方法的时候指明泛型的具体类型。

2024-12-08 01:00:00 1503

原创 lambda特性

lambda特性lambda表达式适用于只有一个未实现的抽象方法的接口(函数式接口)。@FunctionalInterface注解 在一个接口上进行注解如果成功就代表是一个函数式接口。lambda表达式基本样式:(参数类型 参数名称…) ->{};还可以进一步省略,规则为小括号内参数的类型可以省略。如果小括号内有且仅有一个参数,则小括号可以省略。如果大括号内有且仅有一个语句,则无论有返回值,都可以省略大括号、return关键字及语句分号。(需一起省略)Lambda表达式

2024-12-07 12:15:00 473

原创 CompareTo和Comparator区别

Compareable位于java.lang, Comparator位于java.util包下。Compareable和Comparator都是接口。

2024-12-07 01:00:00 143

原创 java中的EnumSet

​ EnumSet内部使用位向量实现的。是一个抽象类存在两个子类,RegularEnumSet和JumbpEnumSet。EnumSet是与枚举类型一起使用的专用Set集合,EnumSet的所有元素必须都是枚举类型。创建一个EnumSet不能使用new创建。因为是抽象类,使用提供的工厂方法创建。在RegularEnumSet类和JumboEnumSet类中都存在一个。,long类型的位长度是64,因此可以存储64个枚举实例的标志位。由于直接存储和操作都是bit,时间和空间性能都很可观。

2024-12-06 12:00:00 419

原创 java中的EnumMap

EnumMap会把value为null进行包装成一个唯一标识的对象NULL。加包和解包我觉得是区分是不是存了数据和存了null的数据。NULL起到区分了是默认初始化和存储null两种情况。EnumMap中包含两个数组,一个存放key的数组,数量等于枚举类型枚举常量的长度,顺序按照枚举类型中orindal顺序。一个存放对应位置key的value。由于是通过数组操作,效率高。,内部是通过数组实现的,根据程序局部性原理,效率会非常高。EnumMap要求Key必须为Enum类型,

2024-12-06 01:00:00 234

原创 java中的注解

类型定义为@interface, 所有的Annotation 会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口。参数成员只能使用public或default访问权修饰符。参数成员只能使用八种基本数据类型和String、Enum、Class、annotation等类型,以及这些类型的数组。要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation 对象,因为你除此之外没有别的获取注解对象的方法。自定义注解需要使用元注解。

2024-12-05 11:15:00 321

原创 java中的枚举

在枚举类型的序列化和反序列化上,Java做了特殊的规定:在序列化时Java仅仅是将枚举对象的name属性输出到结果中,反序列化的时候则是通过java.lang.Enum的valueOf方法来根据名字查找枚举对象。子类也是需要定义为枚举类型,由编译器实现初始化,我们也不能定义一个类直接继承java.lang.Enum。它是一种特别的数据类型,特殊是因为它即是一种class类型又比class类型多了些特殊的约束。使用枚举单例的写法,完全不用担心序列化和反射的问题。感觉枚举类中每个枚举常量是枚举类的实现对象。

2024-12-05 04:00:00 376

原创 java反射

这样就不用再经过一系列的检查才能确定具体调用它的对象了。它实际上是调用sun.reflect.Reflection.getCallerClass方法。作用利用双重反射进行权限提升。补充:用@CallerSensitive注解修饰的方法从。invoke实现过程。

2024-12-04 22:48:09 349

原创 StringBuffer和StringBuilder的差别

初始容量都是16和扩容机制都是旧容量*2+2 ,底层都是采用char[]的字符数组。StringBuilder没有任何锁,效率高,适用于单线程场景,但同时也适应于高并发场景,提高相应性能,线程安全可以通过其他手段进行解决。StringBuffer多线程下是安全的,但是synchronized,其效率低。适用于多线程下,并发量不高的情景。区别:StringBuffer是线程安全的,因为它方法中都用synchronized修饰,加锁。实现了 CharSequence 接口,表示是一个有序字符的集合。

2024-12-04 22:47:28 257

原创 java中的TreeMap

删除点p的左右子树都非空。(用p的后继节点s代替p,)然后使用情况1删除s。对于每个节点,从该点至null树尾端的任何路径,都含有相同的黑色节点。删除点p的左右子树都为空,或者只有一根子树非空。只有删除点是BLACK的时候,才会触发调整函数。每个节点要么是红色,要么是黑色。

2024-12-03 18:26:44 756 2

原创 Java中ArrayList

Arrays.copyOf只能用来复制对象类型的数组,返回一个泛型数组。优点易于使用和更加安全,会进行源数组的和目标数组的类型。有序性:list中的元素是按照他们被添加的顺序存储的,可以通过索引来访问list中的元素。数组扩容,会将老数组的元素重新拷贝到一份到新的数组中,数组容量增长到大约原先的1.5倍。System.arrayCopy性能好,可以用来复制任意类型的数组。,用来将一个数组复制到一个新的数组中,并且可以指定新数组的长度。索引访问:可以根据元素的索引值来访问list中的元素。

2024-12-03 18:25:45 852

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除