尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Java通关秘籍

Java通关秘籍 一、集合框架Collections文字解析Java集合主要分为Collection单列和Map双列两大接口族。List有序、可重复。ArrayList基于动态数组随机访问快增删慢LinkedList基于双向链表增删快随机访问慢。Set无序、不可重复。HashSet基于哈希表O(1)访问TreeSet基于红黑树可排序。Map键值对。HashMap允许一个null键和多个null值非线程安全ConcurrentHashMap采用分段锁/CAS线程安全且高并发。代码示例java// List ListString arrayList new ArrayList(); arrayList.add(Java); arrayList.add(Python); System.out.println(arrayList.get(0)); // Java // Set SetInteger hashSet new HashSet(); hashSet.add(10); hashSet.add(20); hashSet.add(10); // 重复元素不会被添加 System.out.println(hashSet.size()); // 2 // Map MapString, Integer hashMap new HashMap(); hashMap.put(A, 1); hashMap.put(B, 2); hashMap.put(null, 0); // 允许null键 System.out.println(hashMap.get(A)); // 1 // 遍历Map for (Map.EntryString, Integer entry : hashMap.entrySet()) { System.out.println(entry.getKey() entry.getValue()); }二、并发编程Concurrency文字解析线程创建继承Thread或实现Runnable、Callable有返回值。同步机制synchronized内置锁和ReentrantLock显式锁。synchronized自动释放锁ReentrantLock需手动unlock()但支持尝试锁、公平锁等高级功能。线程池推荐使用ExecutorService避免手动创建线程。Executors提供工厂方法但FixedThreadPool和CachedThreadPool队列过长易OOM实际生产多用ThreadPoolExecutor自定义参数。原子类AtomicInteger等通过CAS保证线程安全无锁高效。代码示例java// 1. 实现Runnable class MyTask implements Runnable { Override public void run() { System.out.println(Thread.currentThread().getName() running); } } // 2. synchronized 同步方法 public synchronized void syncMethod() { /* 临界区 */ } // 3. ReentrantLock 示例 ReentrantLock lock new ReentrantLock(); lock.lock(); try { // 临界区 } finally { lock.unlock(); } // 4. 自定义线程池 ThreadPoolExecutor executor new ThreadPoolExecutor( 2, 4, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue(100), new ThreadPoolExecutor.CallerRunsPolicy() ); executor.execute(() - System.out.println(Task executed)); // 5. AtomicInteger AtomicInteger ai new AtomicInteger(0); ai.incrementAndGet(); // 原子1 System.out.println(ai.get()); // 1 executor.shutdown();三、JVM内存模型与垃圾回收文字解析运行时数据区堆所有对象实例、栈局部变量、方法调用、方法区类信息、常量、静态变量、程序计数器线程私有、本地方法栈。垃圾回收判断存活——引用计数法循环引用问题和可达性分析法GC Roots。GC算法标记-清除有碎片、标记-复制新生代无碎片、标记-整理老年代无碎片。常用收集器G1分代区域化可预测停顿、ZGC超低延迟TB级堆。类加载机制加载→验证→准备→解析→初始化双亲委派模型BootStrap→Extension→Application→自定义保证核心类安全性。代码示例演示内存与GCjava// 可通过 -Xms10m -Xmx10m 运行观察GC public class JvmDemo { public static void main(String[] args) { Listbyte[] list new ArrayList(); for (int i 0; i 100; i) { // 不断创建大对象触发GC byte[] arr new byte[1024 * 1024]; // 1MB list.add(arr); } System.out.println(Done); } }四、IO与NIO文字解析BIOBlocking IO面向流同步阻塞每个连接一个线程适合连接数少且固定的场景。NIONon-blocking IO面向缓冲区Buffer、通道Channel、选择器Selector支持多路复用一个线程可管理多个连接。AIOAsynchronous IO基于事件和回调异步非阻塞但实际应用较少。代码示例NIO读取文件javatry (FileChannel channel FileChannel.open(Paths.get(data.txt), StandardOpenOption.READ)) { ByteBuffer buffer ByteBuffer.allocate(1024); while (channel.read(buffer) ! -1) { buffer.flip(); // 切换为读模式 while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } buffer.clear(); // 清空缓冲区 } } catch (IOException e) { e.printStackTrace(); }五、Java 8 新特性文字解析Lambda表达式简化匿名内部类实现函数式接口如Runnable、Comparator。Stream API支持链式操作filter、map、reduce对集合进行声明式处理支持并行流。Optional优雅解决空指针异常。新的日期时间APILocalDate、LocalTime、LocalDateTime线程安全且不可变。代码示例java// Lambda Stream ListInteger numbers Arrays.asList(1, 2, 3, 4, 5); int sum numbers.stream() .filter(n - n % 2 0) // 过滤偶数 .mapToInt(n - n * n) // 求平方 .sum(); // 求和 System.out.println(sum); // 41620 // Optional 使用 OptionalString opt Optional.ofNullable(null); String result opt.orElse(默认值); System.out.println(result); // 默认值 // 新日期API LocalDate today LocalDate.now(); LocalDate future today.plusDays(7); System.out.println(7天后: future);六、异常处理文字解析检查型异常Checked继承Exception必须try-catch或throws如IOException。非检查型异常Unchecked继承RuntimeException不强制处理如NullPointerException。最佳实践捕获具体异常而非Exception使用finally释放资源或try-with-resources。代码示例java// try-with-resources 自动关闭资源 try (BufferedReader br new BufferedReader(new FileReader(file.txt))) { String line br.readLine(); System.out.println(line); } catch (IOException e) { System.err.println(读取文件失败: e.getMessage()); }七、反射与注解文字解析反射运行时获取类、方法、字段信息用于框架Spring和动态代理。注解元数据分为源码级Override、编译时Lombok、运行时SpringAutowired。可通过反射读取运行时注解。代码示例反射java// 通过反射调用方法 Class? clazz Class.forName(java.util.ArrayList); Object list clazz.getDeclaredConstructor().newInstance(); Method addMethod clazz.getMethod(add, Object.class); addMethod.invoke(list, Reflection); System.out.println(list); // [Reflection]
返回列表