- 博客(70)
- 收藏
- 关注
原创 java反射
Java 反射是 Java 提供的一种强大特性,它允许程序在运行时动态地获取类的信息,并操作类的属性和方法。这为编写灵活、可扩展的 Java 应用程序提供了强有力的支持。
2024-12-02 17:16:06
319
原创 Collections
在 Java 中,可变参数(Varargs)允许方法接受可变数量的参数。使用可变参数时,可以传递任意数量的参数给方法,包括不传递参数。:将源列表中的所有元素复制到目标列表中。:在有序(升序)列表中进行二分查找。查找相同元素时,返回的索引可能是任何一个相同元素的索引。可变参数必须是方法的最后一个参数。:用指定元素替换列表中的所有元素。:交换列表中两个指定位置的元素。:返回元素在集合中出现的次数。:返回集合中的最大元素。:返回集合中的最小元素。:反转列表中元素的顺序。:随机打乱列表中的元素。
2024-09-07 15:49:23
475
原创 LinkedList
peekFirst():返回队列的第一个元素,不移除,若为空返回 null。peekLast():返回队列的最后一个元素,不移除,若为空返回 null。pollFirst():移除并返回队列的第一个元素,若为空返回 null。pollLast():移除并返回队列的最后一个元素,若为空返回 null。offerFirst(E e):在队列的开头插入元素,返回是否成功。getFirst():返回队列的第一个元素,不移除。getLast():返回队列的最后一个元素,不移除。
2024-09-05 15:38:42
295
原创 ArrayList底层原理
ArrayList 是 Java 集合框架中的一个类,实现了 List 接口。它基于动态数组,提供了可变大小的数组功能。如果数组已满,会创建一个更大的新数组(通常是原来大小的 1.5 倍),然后复制旧数组的内容到新数组。数组实现:ArrayList 使用一个数组来存储元素。性能:在尾部插入和访问元素速度快,但在中间插入或删除元素时,性能可能较低。线程安全:ArrayList 不是线程安全的,如果多线程访问需要手动同步。插入时,需要移动插入位置后的所有元素。删除时,需要移动删除位置后的所有元素。
2024-09-05 15:16:14
207
原创 List
在 Java 中,List 是 Collection 接口的子接口,表示一个有序的元素集合。它允许重复元素,并为元素的插入和访问提供了精确的控制。set(int index, E element):修改指定索引处的元素,修改成功后会返回原来的元素。add(int index, E element):在指定位置插入元素。remove(int index):移除指定索引处的元素,并返回。indexOf(Object o):返回元素第一次出现的索引。get(int index):获取指定索引处的元素。
2024-09-05 15:01:19
223
原创 单列集合-Collection
在 Java 中,Collection 是集合框架的根接口,定义了一组对象的基本操作。contains(Object o):判断集合是否包含指定元素,含有返回true,反之返回false;remove(Object o):从集合中移除指定元素,若该元素存在多个则删去第一个。Collection是接口,不能直接实现,但它内部定义的方法是其子类所公用的。isEmpty():检查集合是否为空,空则返回true,反之false。add(E e):添加元素到集合中。size():返回集合中元素的个数。
2024-09-05 12:01:06
277
原创 java异常
catch 块:用于捕获和处理异常。可以有多个 catch 块,处理不同类型的异常。Java的异常处理机制提供了一种结构化的方法应对程序中的错误和异常情况。finally 块:无论是否发生异常,始终执行。另外还有Error即系统级异常,这并不需要我们开发人员关心。2.编译时检查,必须处理或声明,throw 或 try。编译时异常(Checked Exceptions)例如:数组越界访问异常,文件未查找到异常。2.编译时不强制处理,可以选择处理。try 块:放置可能抛出异常的代码。
2024-09-04 22:39:13
351
原创 java 日期
LocalTime 是 Java 8 中的一个类,用于表示没有日期和时区的时间(即时 分 秒 纳秒)。它是不可变且线程安全的。不想写了,区别不大。是 Java 8 中的一个类,用于表示没有时间和时区的日期。它是不可变且线程安全的,专注于年 月 日的处理。jdk8以后新增的API,鉴于jdk8之前的API有很多问题,例如线程不安全,现在大都使用新的API。年 月 日 时 分 秒 纳 秒。不写啦不写啦,随用随查即可。
2024-08-18 17:16:36
249
原创 BigDecimal
Java 的BigDecimal类用于高精度的算术运算,特别适用于财务计算。以下是一些常用的方法和示例:关于double出现的精度丢失问题。
2024-08-15 06:46:51
399
原创 Arrays
java.util.Arrays 类是 Java 标准库中用于操作数组的实用工具类。它提供了多种静态方法,用于对数组进行排序、搜索、比较、填充、转换等操作。
2024-07-29 00:18:44
160
原创 jdk8——lambda表达式
在 Java 8 中引入了 Lambda 表达式,使得代码更加简洁和易读。Lambda 表达式是一种匿名函数,可以作为参数传递给方法或者存储在变量中。它主要用于简化函数式编程。3.如果Lambda表达式中方法体代码只有一行代码,可以省略大括号不写,同时要省略分号。此时如果这行代码是return语句,也必须去掉return。函数式接口是只包含一个抽象方法的接口,可以使用 @FunctionalInterface 注解进行标识,但这不是必须的。2.如果只有一个参数,参数类型可以省略,同时()也可以省略。
2024-07-27 22:36:17
346
原创 接口
接口使用interface关键字定义。接口中的方法默认是public和abstract的。void eat();接口是一种引用类型,用于定义一组抽象方法和常量。实现接口的类必须提供接口中所有方法的具体实现。接口可以包含默认方法和静态方法,从而提供默认实现和工具方法。接口支持多重继承,一个类可以实现多个接口。接口用于定义行为契约、实现多重继承和提高代码的松耦合性。通过使用接口,可以更好地设计和组织代码,提高代码的可维护性和可扩展性。
2024-07-27 20:43:05
274
原创 抽象类
使用abstract关键字来声明一个类为抽象类。抽象类可以包含抽象方法和具体方法。// 抽象方法,不带实现// 具体方法,带实现抽象类是一种不能被实例化的类,通常用来定义通用的行为和属性。抽象方法是没有实现的方法,必须由子类实现。抽象类可以包含抽象方法和具体方法,以及成员变量和构造函数。抽象类提供了一种模板模式,让子类继承并实现具体功能。通过使用抽象类,可以更好地组织代码、提高代码的复用性和可维护性。
2024-07-27 20:39:22
382
原创 final和常量
常量通常是静态的(使用 static 关键字),以便它们可以在类的上下文中全局访问。3.当一个变量被声明为 final 时,它的值在初始化之后不能被改变。它们通常是复杂对象或不能在编译时确定的值。2.对象引用:对于 final 引用类型变量,引用本身不能改变,但引用的对象的内容可以改变。在这个例子中,RUNTIME_VALUE 在运行时被初始化,所以它的值在编译时无法确定。1.当一个类被声明为 final 时,它不能被继承。3.构造函数赋值:final 成员变量可以在声明时赋值,也可以在构造函数中赋值。
2024-07-26 23:54:30
351
原创 动态多态——java
(Polymorphism)是面向对象编程(OOP)的一个核心概念,它允许一个接口被多个类实现,从而使得一个方法调用可以根据对象的实际类型表现出不同的行为。运行时多态(动态多态):通过方法重写(Method Overriding)和接口实现(Interface Implementation)实现。instanceof 用于检查对象是否是某个类或接口的实例,确保类型的安全性。动态绑定:在运行时根据对象的实际类型调用相应的方法。方法重写:子类重写父类的方法,提供不同的实现。向上转型:使用父类引用指向子类对象。
2024-07-25 23:02:55
304
原创 Object类——java
1.Object类是所有类的根类,提供了一些基础方法,如equalshashCodetoStringclonenotifywait等。2.可以根据需求在子类中重写这些方法,以实现自定义的行为。3.Object类的方法在实现多线程同步、对象比较和对象字符串表示等方面非常重要。
2024-07-25 14:21:07
1453
原创 java之继承
一个类可以继承另一个类的属性和方法(不支持多继承),这个被继承的类称为父类(或超类、基类),继承它的类称为子类(或派生类)。private:私有成员,只有类本身可以访问,子类不能直接访问,但可以通过父类的内置函数间接修改。访问父类成员:子类可以使用 super 关键字来访问父类的成员(属性和方法)。方法重写:子类可以重写父类的方法,使用相同的方法名、参数和返回类型。default(无修饰符):包私有成员,同一个包内的类可以访问。protected:受保护成员,子类和同一个包内的类可以访问。
2024-07-25 14:03:00
271
原创 单例设计模式
以下是单例模式的常见实现方法,包括懒汉式、饿汉式和双重检查锁定。静态内部类在类加载时不会立即实例化,只有在调用 getInstance 方法时才会加载。饿汉式单例在类加载时就创建实例。枚举单例是实现单例模式的最佳方式之一,因为它不仅实现了线程安全,还防止了反序列化和反射攻击。通过在 getInstance 方法上添加同步,可以使懒汉式单例线程安全,但会降低性能。双重检查锁定结合了懒汉式和饿汉式的优点,通过减少同步的开销实现线程安全的懒加载。饿汉式单例:在类加载时即创建实例,线程安全但无延迟加载。
2024-07-24 22:00:44
413
原创 访问修饰限定符
default(不使用任何关键字,即不写修饰符):在同一包中可见,不使用任何修饰符。该访问级别仅适用于同一包内的类。private:在同一个类中可见。私有访问修饰符是最严格的访问级别,在同一类中的成员能够访问。protected:对同一包内的类和所有子类可见。在不同包中的子类也可以访问。public:对所有类可见。该访问级别仅适用于应用程序的外部接口。
2024-07-24 15:55:31
145
原创 java内部类
Java 中的内部类(inner class)是定义在另一个类内部的类。成员内部类是定义在另一个类的内部且不带 static 关键字的类。静态内部类不能直接访问外部类的非静态成员,但可以通过创建外部类实例来访问。匿名内部类是没有名字的内部类,通常在需要快速定义和使用一次性类时使用。局部内部类是在方法或代码块中定义的类。局部内部类:定义在方法或代码块内部,仅在其所在的方法或代码块中可见。成员内部类:定义在类内部,非静态,可以访问外部类的所有成员。匿名内部类:没有名字的内部类,通常用于快速实现接口或继承类。
2024-07-24 15:47:54
268
原创 java关键字static
静态方法(类方法)可以直接通过类名调用(建议直接用类名直接访问),而不需要创建类的实例。注意:静态方法中不可以使用this关键字,this代指的是调用该方法的实例对象,而静态方法是可以通过类名直接调用的。静态变量(类变量)是属于类的,而不是某个特定的实例。特点:类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次。静态方法:可以直接通过类名调用,不能访问非静态成员。静态代码块:在类加载时执行一次性的初始化代码。作用:完成类的初始化,即对静态变量的初始化。静态变量:类的所有实例共享同一个变量。
2024-07-24 11:28:08
335
原创 StringBuilder, Stringbuffer,StringJoiner
StringBuilder:适用于单线程环境中需要频繁修改字符串的场景,具有高效的性能。StringBuffer:适用于多线程环境中需要频繁修改字符串的场景,线程安全但性能稍逊于 StringBuilder。StringJoiner:适用于需要构建带定界符的字符串序列的场景,提供了简洁的 API 来处理前缀、后缀和分隔符。
2024-07-21 23:11:26
331
原创 String
在 Java 中,String 是一种特殊的类,用于表示和操作字符串。String 对象在内存中的存储方式有其独特之处。,一旦创建,字符串内容。它主要用于表示不可变的字符序列。
2024-07-21 18:30:23
369
原创 java相对于c++的改进
Java 的自动内存管理、丰富的标准库、强类型系统和跨平台能力,使其成为企业级应用开发的首选语言。:Java 通过 JVM 实现了“一次编写,到处运行”,Java 字节码可以在任何安装了 JVM 的平台上运行。:Java 只支持类的单继承,但通过接口(interface)实现多继承的功能。:Java 程序运行在 JVM 上,JVM 屏蔽了底层操作系统和硬件的差异。:Java 消除了指针的概念,避免了直接内存操作带来的安全隐患。:Java 是强类型语言,编译时和运行时都有严格的类型检查。
2024-07-21 16:09:24
183
原创 c++STLstack和queue容器
queue容器中有默认构造函数和拷贝构造函数,以及重载等号操作符,用于queue的初始化。stack容器中有默认构造函数和拷贝构造函数,以及重载等号操作符,用于stack的初始化。pop(),从对头移除第一个元素,并返回移除的元素。push(elem),向栈顶添加元素。push(elem),向队尾添加元素。pop(),从栈顶移除第一个元素。back()返回最后一个元素。front()返回第一个元素。先进后出,不允许有遍历行为。size(),返回栈的大小。size(),返回队的大小。top()返回栈顶元素。
2023-04-29 15:24:11
130
原创 c++STLmap/multimap容器
map和multimap区别(和set容器相似):map不允许有重复的key值元素,而multimap可以。count(key)统计key的元素个数,map中为1或0,multimap可以为多个。pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)map/multimap属于关联式容器,底层结构是用二叉树实现的。优点:可以根据key值快速找到value值。成对出现的数据,利用对组可以返回两个数据。两个对组相等key和value均相等。map中所有的元素都是pair。
2023-04-28 21:31:45
148
原创 c++STL set/multiset容器
set默认升序排列,想要改变需要仿函数,cmp类的成员函数bool operator()(int a, int b)const,其中const是VS中要求的,在devc++运行不需要。set容器使用insert函数插入重复数据时,会插入失败,但不会报错,不过insert函数会返回bool类型false;find(key)查找key是否存在,若存在,返回该元素的迭代器,若不存在返回set.end();cout(key)统计key元素的个数在set容器中为1或0,multiset容器中答案不确定。
2023-03-28 18:54:51
185
原创 C++STL list容器
list有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector,deque等都是都是不成立的。由于链表的储存方式并不是连续的内存空间,因此链表中的迭代器只能支持前移和后移,属于双向迭代器。链表:是一种物理储存单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。节点的组成:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。2.链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素。back():返回容器最后一个元素。
2023-03-27 22:34:57
60
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人