

Java基础知识,类型知识点梳理~
Java的基本数据类型是语言的基础,它们直接存储在栈内存中,具有固定的大小和不变的行为。
八种基本数据类型的具体分析:
byte可以有效节省内存空间。例如,处理大型文件或图像数据。System.currentTimeMillis()返回的值)、大规模数据处理中的ID生成。封装类型为每种基本数据类型提供了一个对应的类,使得基本数据类型具有了对象的特性,可以调用对象方法和利用面向对象的特性。
Java的封装类型包括以下八种:
byteshortintlongfloatdoublecharboolean使用场景:
1.集合类的使用
Java集合框架(如List、Set、Map等)只能存储对象,无法直接存储基本数据类型。因此,在需要将基本数据类型放入集合中时,需要使用对应的封装类型。
import java.util.ArrayList;
import java.util.List;
public class WrapperExample {
public static void main(String[] args) {
List<Integer> intList = new ArrayList<>();
// 自动装箱:int -> Integer
intList.add(10);
intList.add(20);
for (Integer num : intList) {
// 自动拆箱:Integer -> int
// 输出:10 20
System.out.println(num);
}
}
}2.泛型编程
泛型类和方法只能使用引用类型,从而在泛型参数中必须使用封装类型。
public class GenericContainer<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
public static void main(String[] args) {
GenericContainer<Integer> container = new GenericContainer<>();
// 自动装箱:int -> Integer
container.setItem(100);
// 自动拆箱:Integer -> int
// 输出:100
System.out.println(container.getItem());
}
}3.与API交互
一些API或第三方库要求使用对象而不是基本数据类型。封装类型满足这些要求。
import java.util.Optional;
public class ApiExample {
public static void main(String[] args) {
// 自动装箱:int -> Integer
Optional<Integer> optionalInt = Optional.of(30);
// 自动拆箱:Integer -> int
// 输出:30
optionalInt.ifPresent(System.out::println);
}
}4.空值处理
封装类型可以表示null,而基本数据类型不能。有些场景需要处理空值,例如数据库查询结果。
public class NullHandlingExample {
public static void main(String[] args) {
// 封装类型可以为null
Integer possibleNullInt = null;
if (possibleNullInt == null) {
System.out.println("The value is null");
} else {
System.out.println(possibleNullInt);
}
}
}5.反射操作
反射机制通常基于对象,而封装类型使得反射操作更加方便。
import java.lang.reflect.Method;
public class ReflectionExample {
public static void main(String[] args) throws Exception {
Method parseIntMethod = Integer.class.getMethod("parseInt", String.class);
// 使用Integer类的静态方法
Object result = parseIntMethod.invoke(null, "123");
// 输出:123
System.out.println(result);
}
}数据类型转换可以分为隐式转换(也称为自动类型转换)和显式转换(也称为强制类型转换)
1.隐式转换(自动类型转换)
隐式转换是指Java编译器自动完成的类型转换。这种转换通常发生在将一种较小范围的数据类型赋值给较大范围的数据类型时。
例如:将int类型的变量赋值给long类型的变量。隐式转换是安全的,因为不会造成数据丢失。
public class ImplicitConversion {
public static void main(String[] args) {
int intVal = 100;
// 自动将 int 转换为 long
long longVal = intVal;
// 自动将 long 转换为 float
float floatVal = longVal;
System.out.println("intVal: " + intVal);
System.out.println("longVal: " + longVal);
System.out.println("floatVal: " + floatVal);
}
}2.显式转换(强制类型转换)
显式转换需要开发者手动进行类型转换,通过在要转换的值前面加上目标数据类型的括号,这种转换通常用于将较大范围的类型转换为较小范围的类型。
例如:将double类型转换为int类型。显式转换可能会导致数据丢失或精度降低,因此要谨慎使用。
public class ExplicitConversion {
public static void main(String[] args) {
double doubleVal = 100.99;
// 强制将 double 转换为 int
int intVal = (int) doubleVal;
System.out.println("doubleVal: " + doubleVal);
// 可能会丢失小数部分
System.out.println("intVal: " + intVal);
}
}3.字符与数值类型之间的转换
字符类型char可以与数值类型进行相互转换,char实际上是一个无符号的16位Unicode字符,可以存储0到65535之间的整数值。
public class CharConversion {
public static void main(String[] args) {
char charVal = 'A';
// char 自动转换为 int
int intVal = charVal;
System.out.println("charVal: " + charVal);
// 输出65,'A'对应的ASCII码
System.out.println("intVal: " + intVal);
intVal = 66;
// 强制将 int 转换为 char
charVal = (char) intVal;
System.out.println("intVal: " + intVal);
// 输出'B'
System.out.println("charVal: " + charVal);
}
}Java集合框架提供了一系列用来存储和操作数据的类和接口,不同的集合类型适用于不同的场景。
主要集合类型具体分析:
1.ArrayList
List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
// 输出:Banana
System.out.println(arrayList.get(1)); 2.LinkedList
List<String> linkedList = new LinkedList<>();
linkedList.add("Apple");
linkedList.addFirst("Banana");
// 输出:Banana
System.out.println(linkedList.get(0)); 3.HashSet
Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
// 重复元素不会被添加
hashSet.add("Apple");
System.out.println(hashSet.size()); // 输出:24.HashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Apple", 3);
hashMap.put("Banana", 2);
// 输出:3
System.out.println(hashMap.get("Apple")); 5.LinkedHashMap
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("Apple", 3);
linkedHashMap.put("Banana", 2);
for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 输出:
Apple: 3
Banana: 26.TreeMap
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Banana", 2);
treeMap.put("Apple", 3);
for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 输出:
Apple: 3
Banana: 2Java的并发类型提供了一系列用来处理多线程并发操作的类和接口,能够帮助开发者编写线程安全的程序。
并发类型的具体分析:
1.synchronized
synchronized实现同步。public synchronized void synchronizedMethod() {
// 同步的方法体
}2.ReentrantLock
synchronized更灵活的锁机制,支持公平性选择和可中断性。ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
// 需要同步的代码块
} finally {
lock.unlock();
}3.Semaphore
// 允许10个线程同时访问
Semaphore semaphore = new Semaphore(10);
semaphore.acquire();
try {
// 资源访问操作
} finally {
semaphore.release();
}4.CountDownLatch
5.CyclicBarrier
// 等待3个线程到达
CyclicBarrier barrier = new CyclicBarrier(3);
// 线程1
barrier.await();
// 线程2
barrier.await();
// 线程3
barrier.await();
// 所有线程都到达后继续执行6.ConcurrentHashMap
ConcurrentMap<String, Integer> concurrentMap = new ConcurrentHashMap<>();
concurrentMap.put("key", 1);每一天都是起跑线,勇敢迈出第一步
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。