21xrx.com
2025-03-31 05:11:39 Monday
文章检索 我的文章 写文章
Java面试中常问的问题及示例代码
2023-06-16 15:01:52 深夜i     8     0
Java面试 多态性 线程同步 垃圾回收机制

近年来,随着Java的广泛应用,Java程序员也越来越受到关注,因此Java面试已经成为了一个非常重要的话题。Java面试是测试面试者Java编程语言及Web开发基础知识的过程。以下是一些Java面试中常问的问题及相应的代码案例。

1. 说一下Java中的多态性是什么?

Java中的多态性是指同一个接口可以有不同的实现方式。即相同的方法或类可以具有不同的行为。多态性可以通过继承和实现接口来实现。下面是一个关于多态性的代码示例:

// 定义一个Shape类
abstract class Shape {
  public abstract void draw();
}
// 定义一个Rectangle类
class Rectangle extends Shape {
  public void draw() {
    System.out.println("Draw a rectangle.");
  }
}
// 定义一个Circle类
class Circle extends Shape {
  public void draw() {
    System.out.println("Draw a circle.");
  }
}
// 测试代码
public class Test {
  public static void main(String[] args) {
    Shape shape = new Rectangle();
    shape.draw();
    shape = new Circle();
    shape.draw();
  }
}

2. 请谈一谈Java中的线程同步?

Java中的线程同步机制是用于防止多个线程对共享资源进行并发访问。Java中的线程同步可以通过synchronized关键字和Lock接口来实现。下面是一个线程同步的代码示例:

// 定义一个Counter类
class Counter {
  private int count = 0;
  
  // 通过synchronized关键字实现线程同步
  public synchronized void increment() {
    count++;
  }
  
  public int getCount()
    return count;
  
}
// 定义一个Worker类
class Worker extends Thread {
  private Counter counter;
  
  public Worker(Counter counter)
    this.counter = counter;
  
  
  public void run() {
    for (int i = 0; i < 1000; i++) {
      counter.increment();
    }
  }
}
// 测试代码
public class Test {
  public static void main(String[] args) {
    Counter counter = new Counter();
    Worker worker1 = new Worker(counter);
    Worker worker2 = new Worker(counter);
    worker1.start();
    worker2.start();
    try {
      worker1.join();
      worker2.join();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println(counter.getCount());
  }
}

3. 说一下Java中的垃圾回收机制?

Java中的垃圾回收机制是一种自动的资源管理机制,它可以自动地释放不再被引用的对象所占用的内存空间。Java的垃圾回收机制通过垃圾回收器来实现。下面是一个关于垃圾回收机制的代码示例:

public class Test {
  public static void main(String[] args) {
    Object obj1 = new Object();
    Object obj2 = new Object();
    Object obj3 = obj1;
    obj1 = null;
    obj2 = null;
    
    System.gc(); // 显示地调用垃圾回收器
    
    if (obj3 == null) {
      System.out.println("obj3 is null.");
    } else {
      System.out.println("obj3 is not null.");
    }
  }
}

  
  

评论区

请求出错了