摘要: 注解 注解的生命周期有 3 种策略,定义在 RetentionPolicy 枚举中 1)SOURCE:在源文件中有效,被编译器丢弃。 2)CLASS:在编译器生成的字节码文件中有效,但在运行时会被处理类文件的 JVM 丢弃。 3)RUNTIME:在运行时有效。这也是注解生命周期中最常用的一种策略,它 阅读全文
posted @ 2024-07-13 23:31 _Sylvan 阅读(23) 评论(0) 推荐(0)
摘要: 内部类 一个类定义在另外一个类里面或者一个方法里面,这样的类叫做内部类 成员内部类 package test.InnerClass; class CSer { String weapon; private int hp; static int money = 800; public CSer() { 阅读全文
posted @ 2024-07-13 23:30 _Sylvan 阅读(16) 评论(0) 推荐(0)
摘要: 类和对象 直接通过匿名对象调用方法 // 匿名对象意味着没有引用变量,它只能在创建的时候被使用一次 new Person().initialize("沉默王二", 18, 1); Object类 对象比较 public native int hashCode() public native int 阅读全文
posted @ 2024-07-13 23:29 _Sylvan 阅读(16) 评论(0) 推荐(0)
摘要: 接口 定义接口 public interface Electronic { // 常量 String LED = "LED"; // 抽象方法 int getElectricityUse(); // 静态方法 static boolean isEnergyEfficient(String elect 阅读全文
posted @ 2024-07-13 23:29 _Sylvan 阅读(23) 评论(0) 推荐(0)
摘要: this 调用当前类的方法; this() 可以调用当前类的构造方法,但必须放在构造方法的第一行; this 可以作为参数在方法中传递; this 可以作为参数在构造方法中传递; this 可以作为方法的返回值,返回当前类的对象。 super 指向父类对象; 调用父类的方法; super() 可以调 阅读全文
posted @ 2024-07-13 23:29 _Sylvan 阅读(221) 评论(0) 推荐(0)
摘要: 封装 1、良好的封装能够减少耦合。 2、类内部的结构可以自由修改。 3、可以对成员进行更精确的控制。 4、隐藏信息,实现细节。 继承 Java 有三种实现多继承效果的方式,分别是内部类、多层继承和实现接口。 父类的构造方法不能被继承 子类的构造过程必须调用其父类的构造方法:Java 虚拟机构造子类对 阅读全文
posted @ 2024-07-13 23:28 _Sylvan 阅读(29) 评论(0) 推荐(0)
摘要: 方法 访问权限 public:该方法可以被所有类访问。 private:该方法只能在定义它的类中访问。 protected:该方法可以被同一个包中的类,或者不同包中的子类访问。 default:如果一个方法没有使用任何访问权限修饰符,那么它是 package-private 的,意味着该方法只能被同 阅读全文
posted @ 2024-07-13 23:28 _Sylvan 阅读(21) 评论(0) 推荐(0)
摘要: 代码初始化块 类实例化的时候执行代码初始化块; 实际上,代码初始化块是放在构造方法中执行的,只不过比较靠前; 代码初始化块里的执行顺序是从前到后的。 class A { A () { System.out.println("父类构造方法"); } } public class B extends A 阅读全文
posted @ 2024-07-13 23:28 _Sylvan 阅读(22) 评论(0) 推荐(0)
摘要: 抽象类 抽象类不能被实例化。 抽象类应该至少有一个抽象方法,否则它没有任何意义。 抽象类中的抽象方法没有方法体。 抽象类的子类必须给出父类中的抽象方法的具体实现,除非该子类也是抽象类。 // 命名规范以Abstruct或者Base开头 public abstract class AbstractPl 阅读全文
posted @ 2024-07-13 23:27 _Sylvan 阅读(54) 评论(0) 推荐(0)
摘要: 不可变类 一个类的对象在通过构造方法创建后如果状态不会再被改变,那么它就是一个不可变(immutable)类。它的所有成员变量的赋值仅在构造方法中完成,不会提供任何 setter 方法供外部类去修改。 不可变类String 1)常量池的需要 字符串常量池是 Java 堆内存中一个特殊的存储区域,当创 阅读全文
posted @ 2024-07-13 23:27 _Sylvan 阅读(29) 评论(0) 推荐(0)
摘要: 变量 局部变量 在方法体内声明的变量被称为局部变量,该变量只能在该方法内使用,类中的其他方法并不知道该变量。 局部变量声明在方法、构造方法或者语句块中。 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,将会被销毁。 访问修饰符不能用于局部变量。 局部变量只在声明它的方法、构造 阅读全文
posted @ 2024-07-13 23:27 _Sylvan 阅读(35) 评论(0) 推荐(0)
摘要: 包 Java 定义了一种名字空间,称之为包:package。一个类总是属于某个包,类名(比如Person)只是一个简写,真正的完整类名是包名.类名。使用package来解决名字冲突。 包没有父子关系。java.util和java.util.zip是不同的包,两者没有任何继承关系。 包的作用域 不用p 阅读全文
posted @ 2024-07-13 23:26 _Sylvan 阅读(24) 评论(0) 推荐(0)
摘要: 尽量不要 catch RuntimeException,比如 NullPointerException、IndexOutOfBoundsException 等等,应该用预检查的方式来规避。 尽量使用 try-with-resource 来关闭资源:禁止在 try 块中直接关闭资源,因为一旦 clos 阅读全文
posted @ 2024-07-13 23:26 _Sylvan 阅读(55) 评论(0) 推荐(0)
摘要: checked和unchecked异常 checked 异常(检查型异常)在源代码里必须显式地捕获或者抛出,否则编译器会提示你进行相应的操作;而 unchecked 异常(非检查型异常)就是所谓的运行时异常,通常是可以通过编码进行规避的,并不需要显式地捕获或者抛出。 NoClassDefFoundE 阅读全文
posted @ 2024-07-13 23:25 _Sylvan 阅读(30) 评论(0) 推荐(0)
摘要: TreeMap 由红黑树实现,可以保持元素的自然顺序,或者实现了 Comparator 接口的自定义顺序 红黑树(英语:Red–black tree)是一种自平衡的二叉查找树(Binary Search Tree),结构复杂,但却有着良好的性能,完成查找、插入和删除的时间复杂度均为 log(n)。 阅读全文
posted @ 2024-07-13 23:20 _Sylvan 阅读(31) 评论(0) 推荐(0)
摘要: 继承自 Vector,是线程安全的 在 Java 中,推荐使用 ArrayDeque 来代替 Stack,因为 ArrayDeque 是非线程安全的,性能更好 push public E push(E item) { addElement(item); return item; } 调用了 Vect 阅读全文
posted @ 2024-07-13 23:20 _Sylvan 阅读(16) 评论(0) 推荐(0)
摘要: PriorityQueue 是 Java 中的一个基于优先级堆的优先队列实现,它能够在 O(log n) 的时间复杂度内实现元素的插入和删除操作,并且能够自动维护队列中元素的优先级顺序。 // 传入比较器 PriorityQueue<String> priorityQueue = new Prior 阅读全文
posted @ 2024-07-13 23:19 _Sylvan 阅读(32) 评论(0) 推荐(0)
摘要: ![](https://img2024.cnblogs.com/blog/1900828/202407/1900828-20240713231926347-1764342020.png) 阅读全文
posted @ 2024-07-13 23:19 _Sylvan 阅读(15) 评论(0) 推荐(0)
摘要: 静态内部类Node private static class Node<E> { E item; // 双向链表 Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element 阅读全文
posted @ 2024-07-13 23:19 _Sylvan 阅读(27) 评论(0) 推荐(0)
摘要: HashMap 是无序的,LinkedHashMap 是可以维持插入顺序的 LinkedHashMap 继承了 HashMap,内部追加了双向链表,来维护元素的插入顺序 // LinkedHashMap.Entry 继承了 HashMap.Node static class Entry<K,V> e 阅读全文
posted @ 2024-07-13 23:18 _Sylvan 阅读(31) 评论(0) 推荐(0)
摘要: Java遍历List有三种方式 public static void main(String[] args) { List<String> list = new ArrayList<>(); // for循环 for (int i = 0; i < list.size(); i++) { Syste 阅读全文
posted @ 2024-07-13 23:18 _Sylvan 阅读(22) 评论(0) 推荐(0)
摘要: HashMap 的实现原理是基于哈希表的,它的底层是一个数组,数组的每个位置可能是一个链表或红黑树,也可能只是一个键值对。当添加一个键值对时,HashMap 会根据键的哈希值计算出该键对应的数组下标(索引),然后将键值对插入到对应的位置。 当通过键查找值时,HashMap 也会根据键的哈希值计算出数 阅读全文
posted @ 2024-07-13 23:17 _Sylvan 阅读(71) 评论(0) 推荐(0)
摘要: for-each删除元素报错 public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("haha"); list.add("xixi"); list.add("hehe"); f 阅读全文
posted @ 2024-07-13 23:16 _Sylvan 阅读(25) 评论(0) 推荐(0)
摘要: Comparable 实现了 Comparable 接口,重写 compareTo() 方法,就可以按照自己制定的规则将由它创建的对象进行比较 public interface Comparable<T> { // 返回值可能为负数,零或者正数,代表的意思是该对象按照排序的规则小于、等于或者大于要比 阅读全文
posted @ 2024-07-13 23:16 _Sylvan 阅读(23) 评论(0) 推荐(0)
摘要: 创建ArrayList 不指定初始大小 List<String> list = new ArrayList<>(); 调用无参构造方法,创建一个初始容量为10的空列表 private static final int DEFAULT_CAPACITY = 10; private static fin 阅读全文
posted @ 2024-07-13 23:15 _Sylvan 阅读(36) 评论(0) 推荐(0)
摘要: ArrayDeque 又实现了 Deque 接口(Deque 又实现了 Queue 接口) public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializable {} 阅读全文
posted @ 2024-07-13 23:14 _Sylvan 阅读(28) 评论(0) 推荐(0)
摘要: 自定义泛型 class MyArrayList<E> { private Object[] elementData; private int size = 0; public MyArrayList(int initialCapacity) { this.elementData = new Obje 阅读全文
posted @ 2024-07-13 23:14 _Sylvan 阅读(32) 评论(0) 推荐(0)