基础语法
Byte
java.lang.Byte
byte
类型占 1 个字节(8 位),取值范围从-128
(0b10000000
)到 127
(0b01111111
),它在内存中以补码的形式存储整数。
new
1 | Byte byteObj1 = new Byte((byte) 10); |
byteValue()
用于将一个 Byte
对象中封装的值转换成基本数据类型 byte
。
1 | byte byteValue() |
Boolean
java.lang.Boolean
Integer
parseInt()
用于将一个字符串转换成基本数据类型 int
。
1 | static int parseInt(String s) |
Long
java.lang.long
new
1 | long num = 123456789L |
String
java.lang.String
new
1 | String str = new String("Hello"); // 存在堆中,非字符串池 |
1 | byte[] byteArray = {72, 101, 108, 108, 111}; |
getBytes()
getBytes()
方法用于将字符串转换为一个字节数组。
它将字符串的每个字符按照指定的编码格式转换为字节。
1 | byte[] getBytes() |
replaceAll()
允许使用正则表达式替换字符串中的所有匹配项。
1 | String replaceAll(String regex, String replacement) |
substring()
1 | String substring(int beginIndex) |
split()
根据指定的分隔符将字符串分成数组。
1 | String[] split(String regex) |
format()
用于创建格式化的字符串。
1 | static String format(String format, Object... args) |
compareToIgnoreCase()
按字典顺序比较两个字符串,忽略大小写,并返回比较结果的整数值。
1 | int compareToIgnoreCase(String anotherString) |
lastIndexOf()
返回指定字符(Unicode代码点)在字符串中最后一次出现的索引位置。
1 | int lastIndexOf(int ch) |
equalsIgnoreCase()
比较当前字符串与目标字符串的内容是否相同(不区分大小写)。
1 | boolean equalsIgnoreCase(String anotherString) |
true
:两个字符串内容相同(忽略大小写)。false
:内容不同或anotherString
为null
。
StringBuilder
java.lang.StringBuilder
StringBuilder
允许对字符串进行修改。
new
1 | StringBuilder sb = new StringBuilder("Hello"); |
append()
用于在 StringBuilder
末尾追加内容。
StringBuilder
提供了多个重载的 append()
方法,可以接收不同的数据类型。
1 | public StringBuilder append(String str) |
insert()
toString()
用于将 StringBuilder
对象转换为 String
对象。
1 | String toString() |
Arrays
java.util.Arrays
,Java的数组类
asList()
1 | <T> List<T> asList(T... a) |
copyOf()
用于创建并返回指定数组的一个新数组,新数组包含了原数组的部分或全部元素。
1 | <T> T[] copyOf(T[] original, int newLength) |
toString(array)
将数组转换为字符串表示形式。
1 | int[] arr = {1, 2, 3}; |
Collection
java.util.Collection
Collection
接口是所有集合类的根接口,它定义了一组通用的方法,如添加、删除、遍历元素等。
size()
1 | int size(); // 获取集合中元素的个数 |
isEmpty()
1 | boolean isEmpty(); // 判断集合是否为空 |
contains()
1 | boolean contains(Object o); // 判断集合中是否包含指定元素 |
iterator();
返回一个迭代器对象,允许对集合进行遍历。
1 | Iterator<E> iterator(); |
add()
1 | boolean add(E e); // 如果集合中不存在该元素,则添加,返回 true;如果元素已存在,则不添加,返回 false |
remove()
1 | boolean remove(Object o); // 移除指定的元素,成功返回 true,失败返回 false |
clear()
1 | void clear(); // 移除所有元素 |
List
java.util.List
List
是 Collection
的子接口,表示有序的元素集合,允许重复元素。
ArrayList
java.util.ArrayList
ArrayList
是List
的实现类,基于动态数组实现
new
1 |
Set
java.util.Set
Set
是 Collection
的子接口,存储的元素无序且不重复。
HashSet
java.util.HashSet
HashSet
是 Set
接口的实现类。
HashSet
使用 哈希表(HashMap
)来存储元素,存储的元素无序且不重复。
Iterator
java.util.Iterator
Iterator
提供了一种统一的方法来遍历集合中的元素
1 | public interface Iterator<E> { |
Map
java.util.Map
Map
是一个用于存储键值对(Key-Value)的集合接口,每个Map
中的键是唯一的,值可以重复。
size()
1 | int size(); |
isEmpty()
1 | boolean isEmpty(); |
containsKey()
1 | boolean containsKey(Object key); |
containsValue
1 | boolean containsValue(Object value); |
get()
1 | V get(Object key); |
put()
1 | V put(K key, V value); |
remove()
1 | V remove(Object key); |
clear()
1 | void clear(); |
keySet()
返回 Map
中所有键的集合
1 | Set<K> keySet(); |
values()
返回 Map
中所有值的集合。
1 | Collection<V> values(); |
entrySet()
1 | Set<Map.Entry<K, V>> entrySet(); |
Map.Entry
Map.Entry
是 Map
接口中的一个内部接口,此接口为泛型,定义为Entry<K,V>,表示Map中的一个键值对。
Map.Entry
定义了方法来访问和操作键值对中的键和对应的值。
getKey()
返回 Map.Entry
对象中存储的键。
1 | K getKey(); |
getValue()
返回 Map.Entry
对象中存储的值。
1 | V getValue(); |
setValue(V value)
设置 Map.Entry
对象中存储的值。
1 | V setValue(V value); |
HashMap
java.util.HashMap
HashMap 实现了 Map 接口,继承于AbstractMap。
new
1 | // 构造一个空的 HashMap,具有默认初始容量(16)和默认负载因子(0.75)。 |
SortedMap
java.util.SortedMap
,SortedMap
是Map
的子接口。
TreeMap
java.util.TreeMap
,TreeMap
是SortedMap
的实现类。
new
1 | // 构造一个空的 TreeMap,使用键的自然顺序进行排序。 |
File
java.io.File
exists()
1 | boolean exists() |
检查 File
对象表示的路径(文件或目录)在文件系统中是否存在。
存在则返回 true
,否则返回 false
。
System
java.lang.System
getenv()
获取操作系统的环境变量。
currentTimeMillis()
1 | long currentTimeMillis(); |
调用示例
1 | System.out.println(System.currentTimeMillis()); |
Random
java.util.Random
nextInt()
生成随机整数
1 | int nextInt(); // 生成任意整数(int 的完整范围) |
nextFloat()
生成随机单精度浮点数
1 | float nextFloat(); |
nextDouble()
生成随机双精度浮点数
1 | double nextDouble(); |
nextBoolean()
生成随机布尔值
1 | boolean nextBoolean(); |
nextBytes()
生成随机字节数组
1 | void nextBytes(byte[] bytes); |
面向对象
Interface(接口)
定义接口
接口的定义使用interface
关键字。接口中的方法默认是public
和abstract
,不需要显式声明。
1 | public interface Animal { |
接口的实现
通过implements
关键字实现接口。实现接口的类必须提供接口中所有方法的具体实现。
1 | public class Dog implements Animal { |
接口的继承
接口也可以继承其他接口。一个接口可以扩展多个接口,这意味着一个类可以实现多个接口,从而实现多继承。
1 | public interface Mammal extends Animal { |
InnerClass(内部类)
成员内部类
成员内部类是定义在外部类内部、方法外部的类。
成员内部类可以直接访问外部类的所有成员(包括私有成员)。
必须通过外部类对象来创建内部类对象。
内部类会隐式持有一个外部类对象的引用。
1 | class Outer { |
静态内部类
使用 static
修饰的内部类称为静态内部类。
静态内部类不依赖于外部类的实例,因此无法访问外部类的非静态成员。
不需要外部类的实例即可创建静态内部类对象。
只能访问外部类的静态成员。
1 | class Outer { |
局部内部类
局部内部类是在外部类的方法或作用域内定义的类。
它的作用范围仅限于定义它的方法或代码块中。
局部内部类可以访问所在方法的局部变量,但这些变量必须是 final
或 effectively final
。
通常用于封装方法的实现细节。
1 | class Outer { |
匿名内部类
匿名内部类是没有名字的类,通常用于简化代码实现。
常见于接口或抽象类的快速实现。
匿名内部类必须继承一个类或实现一个接口。
用于简化代码实现,无需单独定义类。
匿名内部类实现接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15interface Greeting {
void sayHello();
}
public class Main {
public static void main(String[] args) {
Greeting greeting = new Greeting() { // 创建匿名内部类
public void sayHello() {
System.out.println("Hello from Anonymous Inner Class");
}
};
greeting.sayHello();
}
}匿名内部类继承类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class Animal {
void makeSound() {
System.out.println("Animal makes a sound.");
}
}
public class Main {
public static void main(String[] args) {
// 使用匿名内部类继承 Animal 类
Animal dog = new Animal() {
void makeSound() {
System.out.println("Dog barks: Woof Woof!");
}
};
dog.makeSound(); // 调用匿名内部类的重写方法
}
}
Java反射
示例类
1 | public class Student { |
Class对象
获取Class对象
通过对象获取
Class<?> clazz = object.getClass();
1
2
3
4
5public static void main(String[] args) {
Student stu = new Student("Bileton",21);
Class stuClass = stu.getClass();
System.out.println(stuClass.getName()); // Student
}通过类获取
Class<?> clazz = ClassName.class;
1
2
3
4public static void main(String[] args) {
Class stuClass = Student.class;
System.out.println(stuClass.getName()); // Student
}通过全类名获取
Class<?> clazz = Class.forName(String className);
1
2
3
4public static void main(String[] args) throws ClassNotFoundException {
Class strClass = Class.forName("java.lang.String");
System.out.println(strClass.getName()); // java.lang.String
}Class.forName()
会在加载类的同时对类进行初始化。
构造方法对象
获取构造方法对象
获取公有构造方法对象的数组
Constructor<?>[] getConstructors()
1
2
3
4
5
6
7public static void main(String[] args) {
Class stuClass = Student.class;
Constructor[] constructors = stuClass.getConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
}获取所有构造方法对象的数组
Constructor<?>[] getDeclaredConstructors()
1
2
3
4
5
6
7public static void main(String[] args) {
Class stuClass = Student.class;
Constructor[] constructors = stuClass.getDeclaredConstructors();
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
}获取单个公有构造方法对象
Constructor<?> getConstructor()
1
2
3
4
5
6
7public static void main(String[] args) throws NoSuchMethodException {
Class stuClass = Student.class;
Constructor constructor1 = stuClass.getConstructor();
Constructor constructor2 = stuClass.getConstructor(String.class,int.class);
System.out.println(constructor1);
System.out.println(constructor2);
}获取单个构造方法对象
Constructor<?> getDeclaredConstructor()
1
2
3
4
5public static void main(String[] args) throws NoSuchMethodException {
Class stuClass = Student.class;
Constructor constructor = stuClass.getDeclaredConstructor(String.class);
System.out.println(constructor);
}
调用构造方法
newInstance()
1 | Object obj = constructor.getDeclaredConstructor().newInstance(Object... initargs); |
调用公有构造方法
1
2
3
4
5
6public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class stuClass = Student.class;
Constructor constructor = stuClass.getConstructor(String.class,int.class);
Student stu = (Student) constructor.newInstance("Bileton",21);
System.out.println(stu.getName()+" "+stu.getAge()); // Bileton 21
}调用私有构造方法
使用setAccessible(true)
突破 Java 的访问控制限制,使得私有成员(字段、方法或构造方法)可以被访问。1
2
3
4
5
6
7public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class stuClass = Student.class;
Constructor constructor = stuClass.getDeclaredConstructor(String.class);
constructor.setAccessible(true);
Student stu = (Student) constructor.newInstance("Bileton");
System.out.println(stu.getName()+" "+stu.getAge()); // Bileton 18
}
Field属性对象
获取成员属性对象
获取公有成员属性对象的数组
Field[] getFields()
1
2
3
4
5
6
7public static void main(String[] args) {
Class stuClass = Student.class;
Field[] fields = stuClass.getFields();
for (Field field : fields) {
System.out.println(field.getName()); // school
}
}获取所有成员属性对象的数组
Field[] getDeclaredFields()
1
2
3
4
5
6
7public static void main(String[] args) {
Class stuClass = Student.class;
Field[] fields = stuClass.getDeclaredFields();
for (Field field : fields) {
System.out.println(field);
}
}获取单个公有成员属性对象
Field[] getField(String name)
1
2
3
4
5
6public static void main(String[] args) throws NoSuchFieldException {
Class stuClass = Student.class;
Field fields = stuClass.getField("school");
System.out.println(fields);
// public static java.lang.String Student.school
}获取单个成员属性对象
Field[] getDeclaredField(String name)
1
2
3
4
5
6public static void main(String[] args) throws NoSuchFieldException {
Class stuClass = Student.class;
Field fields = stuClass.getDeclaredField("name");
System.out.println(fields);
// private java.lang.String Student.name
}
获取和设置属性的值
get(Object obj)
1
2Object value = field.get(Object obj);
Object value = field.get(null); // 静态字段,obj 为 nullset(Object obj, Object value)
1
2field.set(Object obj, Object value);
field.set(null, newValue); // 静态字段,obj 为 null
1 | public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException { |
Method方法对象
获取方法对象
获取公有成员方法对象的数组,包括继承的
Method[] getMethods()
1
2
3
4
5
6
7public static void main(String[] args) throws NoSuchFieldException {
Class stuClass = Student.class;
Method[] methods = stuClass.getMethods();
for (Method method : methods) {
System.out.println(method);
}
}获取所有成员方法对象的数组,不包括继承的
Method[] getDeclaredMethods()
1
2
3
4
5
6
7public static void main(String[] args) throws NoSuchFieldException {
Class stuClass = Student.class;
Method[] methods = stuClass.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method);
}
}获取单个公有成员方法对象
Method getMethod(String name,Class<?>…parameterTypes)
1
2
3
4
5public static void main(String[] args) throws NoSuchMethodException {
Class stuClass = Student.class;
Method method = stuClass.getMethod("introduce");
System.out.println(method);
}获取单个成员方法对象
Method getDeclaredMethod(String name,Class<?>…parameterTypes)
1
2
3
4
5public static void main(String[] args) throws NoSuchMethodException {
Class stuClass = Student.class;
Method method = stuClass.getDeclaredMethod("printSecret");
System.out.println(method);
}
调用方法
Method.invoke()
1 | Object returnValue = method.invoke(Object obj, Object... args); |
调用公有方法和私有方法
1 | public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException { |
获取方法参数信息
1 | public Parameter[] getParameters(); |
ClassLoader类加载器对象
获取类加载器对象
getClassLoader()
1 | public ClassLoader getClassLoader(); |
通过Class
对象获取ClassLoader
ClassLoader classLoader = clazz.getClassLoader();
1 | public static void main(String[] args) throws ClassNotFoundException { |
通过类加载器对象加载类
loadClass(String name)
1 | public Class<?> loadClass(String name) throws ClassNotFoundException; |
通过ClassLoader
对象加载类
1 | Class<?> clazz = classLoader.loadClass(String className); |
loadClass()
用于加载类,但不会初始化类。
其他常用方法
getName()
用于获取类、构造方法、方法或字段的名称。
1
public String getName();
getModifiers()
获取类、方法、字段或构造方法的访问修饰符。
1
public int getModifiers();
getModifiers()
返回一个int
类型的值,这个整数值表示多个修饰符的位运算组合。setAccessible(true)
用于修改类、方法、字段等成员的访问权限,以便访问被
private
、protected
或default
(包内访问权限)修饰的成员。
HttpClient
简单同步get请求
1 | public static void sync_http_get(){ |
简单异步get请求
1 | // 推荐使用共享的 HttpClient 实例 |
简单同步post请求
JSON
1 | public static void sync_http_post(){ |
FORM
1 | public static void sync_http_post(){ |