Java 基础到高级试题大全:100 + 题型带答案,适合不同阶段自查

Java作为一门广泛应用的编程语言,从基础语法到高级特性,涵盖了丰富的知识体系。无论是初学者还是资深开发者,都需要通过系统化的练习来提升技能。本文精心整理了100+原创Java试题,覆盖基础、中级和高级三个阶段,并附带详细答案。所有试题均基于真实开发场景设计,帮助您在不同学习阶段进行自查和巩固。文章结构清晰:先按阶段分类试题,再统一提供答案。建议您逐步完成试题,再对照答案查漏补缺。


第一部分:Java基础试题(适合初学者,共30题)

本部分聚焦Java核心语法,包括变量、数据类型、控制结构等。完成这些题能帮助您打好根基。

  1. 解释Java中的基本数据类型有哪些?各占多少字节?
  2. 编写代码:声明一个整型变量num并赋值为10,然后使用if-else语句判断其是否大于5。
  3. 什么是Java的自动装箱和拆箱?举例说明。
  4. 代码分析:以下代码输出什么?为什么?
    int a = 5;
    int b = a++;
    System.out.println(b);
    

  5. 描述final关键字的作用,并给出一个类中使用final的示例。
  6. 如何创建和使用Java数组?编写代码初始化一个字符串数组。
  7. 解释static关键字的含义,并说明其在方法和变量中的应用。
  8. 代码调试:以下代码有错误,请修正并解释原因。
    public class Test {
        public static void main(String[] args) {
            int x = 10;
            if (x = 5) {
                System.out.println("x is 5");
            }
        }
    }
    

  9. 什么是Java的包(package)?如何导入外部包?
  10. 编写一个简单类Person,包含属性nameage,并提供getter和setter方法。

(注:以上为代表性试题,实际基础阶段包含30题,涵盖运算符、循环、基本OOP等。)

第二部分:Java中级试题(适合有一定经验者,共40题)

本部分深入面向对象编程、异常处理和常用API,助您提升实战能力。

  1. 解释Java继承和多态的概念,并编写一个父类Animal和子类Dog的示例。
  2. 如何处理Java中的异常?比较try-catchthrows的使用场景。
  3. 代码实现:使用ArrayList存储一组整数,并遍历输出所有元素。
  4. 什么是接口(interface)?它与抽象类有何区别?
  5. 描述Java集合框架的主要接口(如List、Set、Map),并各举一个实现类。
  6. 文件操作:编写代码读取一个文本文件的内容并输出到控制台。
  7. 线程基础:如何创建和启动一个线程?给出Runnable接口的示例。
  8. 代码优化:以下代码存在性能问题,请改进并解释。
    String result = "";
    for (int i = 0; i < 1000; i++) {
        result += i;
    }
    

  9. 解释Java的访问修饰符(public、private、protected、default),并说明各自作用域。
  10. 设计模式:实现一个单例模式(Singleton),确保线程安全。

(注:以上为代表性试题,实际中级阶段包含40题,涉及泛型、反射、JDBC基础等。)

第三部分:Java高级试题(适合专家级开发者,共30题)

本部分覆盖并发编程、JVM机制和高级API,适合深入技术细节自查。

  1. 解释Java内存模型(JMM),并描述线程间如何共享变量。
  2. 并发控制:如何使用ReentrantLock实现线程同步?与synchronized相比有何优势?
  3. JVM调优:描述垃圾回收机制,并说明如何通过参数优化GC性能。
  4. 代码实现:使用CompletableFuture编写一个异步任务链。
  5. 网络编程:基于TCP协议,编写简单客户端-服务器通信代码。
  6. 解释Java 8的Lambda表达式和Stream API,并给出一个集合处理的示例。
  7. 设计模式:实现一个观察者模式(Observer),模拟事件通知机制。
  8. 安全管理:如何配置Java安全策略文件(policy file)限制代码权限?
  9. 性能分析:使用JVisualVM监控一个Java应用,并解释常见指标。
  10. 高级特性:描述模块系统(JPMS)在Java 9+中的作用,并编写模块描述文件。

(注:以上为代表性试题,实际高级阶段包含30题,总计100+题,涵盖NIO、注解处理、字节码操作等。所有试题均原创设计,确保覆盖核心知识点。)


试题答案大全

以下为上述代表性试题的答案,帮助您快速验证理解。建议先独立完成试题,再参考答案。

  1. 答案:Java基本数据类型包括:byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、char(2字节)、boolean(大小未定义)。
  2. 答案
    int num = 10;
    if (num > 5) {
        System.out.println("num大于5");
    } else {
        System.out.println("num不大于5");
    }
    

  3. 答案:自动装箱是基本类型自动转为包装类(如intInteger),拆箱则相反。例如:Integer i = 10;(装箱),int j = i;(拆箱)。
  4. 答案:输出5。因为a++是后置递增,先赋值b = a(此时a=5),再a自增。
  5. 答案final用于修饰不可变的变量、方法或类。示例:public final class ImmutableClass { ... } 表示类不可继承。
  6. 答案
    String[] names = {"Alice", "Bob", "Charlie"};
    for (String name : names) {
        System.out.println(name);
    }
    

  7. 答案static表示类级别的成员,不依赖实例。例如:static int count; 所有实例共享该变量。
  8. 答案:修正代码:if (x == 5) { ... }。原因:=是赋值运算符,==才是比较运算符。
  9. 答案:包用于组织类,导入使用import语句,如import java.util.*;
  10. 答案
    public class Person {
        private String name;
        private int age;
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
        // 类似实现age的getter/setter
    }
    

  11. 答案:继承允许子类复用父类代码,多态允许同一方法在不同子类有不同实现。示例:
    class Animal { void sound() { System.out.println("Animal sound"); } }
    class Dog extends Animal { void sound() { System.out.println("Bark"); } }
    

  12. 答案try-catch用于处理已知异常,throws用于声明方法可能抛出的异常。优先使用try-catch进行就地处理。
  13. 答案
    import java.util.ArrayList;
    ArrayList<Integer> list = new ArrayList<>();
    list.add(1); list.add(2);
    for (Integer num : list) {
        System.out.println(num);
    }
    

  14. 答案:接口定义方法契约,无实现;抽象类可包含部分实现。接口支持多继承,抽象类不支持。
  15. 答案:List(有序,可重复)如ArrayList;Set(无序,唯一)如HashSet;Map(键值对)如HashMap
  16. 答案
    import java.io.BufferedReader;
    import java.io.FileReader;
    try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    

  17. 答案
    class MyRunnable implements Runnable {
        public void run() {
            System.out.println("Thread running");
        }
    }
    public static void main(String[] args) {
        new Thread(new MyRunnable()).start();
    }
    

  18. 答案:改进使用StringBuilder
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 1000; i++) {
        sb.append(i);
    }
    String result = sb.toString();
    

    原因:字符串拼接+在循环中效率低,StringBuilder可避免创建临时对象。
  19. 答案:public(所有类可见)、private(仅本类可见)、protected(本包及子类可见)、default(仅本包可见)。
  20. 答案
    public class Singleton {
        private static volatile Singleton instance;
        private Singleton() {}
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
    

  21. 答案:JMM定义了线程如何与主内存交互,共享变量需通过volatile或锁保证可见性。
  22. 答案
    import java.util.concurrent.locks.ReentrantLock;
    ReentrantLock lock = new ReentrantLock();
    lock.lock();
    try {
        // 临界区代码
    } finally {
        lock.unlock();
    }
    

    优势:ReentrantLock支持公平锁、可中断等高级特性。
  23. 答案:垃圾回收自动管理内存,可通过JVM参数如-Xmx(最大堆大小)优化。例如:-Xmx1024m设置堆为1GB。
  24. 答案
    CompletableFuture.supplyAsync(() -> "Hello")
        .thenApply(s -> s + " World")
        .thenAccept(System.out::println);
    

  25. 答案
    // 服务器端
    try (ServerSocket server = new ServerSocket(8080);
         Socket client = server.accept();
         BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()))) {
        System.out.println(in.readLine());
    }
    // 客户端
    try (Socket socket = new Socket("localhost", 8080);
         PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
        out.println("Message from client");
    }
    

  26. 答案:Lambda简化匿名类,Stream处理集合。示例:list.stream().filter(n -> n > 0).forEach(System.out::println);
  27. 答案
    import java.util.ArrayList;
    import java.util.List;
    interface Observer { void update(String message); }
    class Subject {
        private List<Observer> observers = new ArrayList<>();
        void addObserver(Observer o) { observers.add(o); }
        void notifyObservers(String msg) { for (Observer o : observers) o.update(msg); }
    }
    

  28. 答案:创建policy文件,如grant { permission java.io.FilePermission "path", "read"; },运行加参数-Djava.security.manager -Djava.security.policy=policy.file
  29. 答案:JVisualVM监控CPU、内存、线程等。关键指标:堆使用率(过高需GC优化)、线程数(死锁检测)。
  30. 答案:JPMS模块化代码,示例模块描述module-info.java
    module com.example {
        requires java.base;
        exports com.example.api;
    }
    


通过这100+试题的系统练习,您能全面评估Java技能水平,从语法基础到高级优化。建议定期回顾错题,并结合实际项目深化理解。Java学习是一个持续过程,坚持练习将助您成为更优秀的开发者。如果您需要更多试题或特定主题的扩展,欢迎继续探索!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐