21xrx.com
2025-04-01 03:12:54 Tuesday
文章检索 我的文章 写文章
Java面试常见问题及解答
2023-06-11 21:32:25 深夜i     13     0
Java面试 访问控制修饰符 Spring依赖注入

在Java面试中,经常会被问到一些基础知识和特定技术领域的问题。本文将为你总结一些常见问题,并提供解答和相关代码案例,帮助你更好地准备面试。

1. Java基础知识

1.1 Java中的四种访问控制修饰符是什么?它们分别有什么作用?

在Java中,访问控制修饰符有四种:public、private、protected和default。它们的作用如下:

- public:可以被任何类访问。

- private:只能被当前类和内部类访问。

- protected:当前类、内部类及其子类都可以访问。

- default:只能被同一个包内的类访问。

例如,以下代码演示了四种访问控制修饰符的使用:

public class Example
  public int num1; // public
  private int num2; // private
  protected int num3; // protected
  int num4; // default
public class Test {
  public static void main(String[] args) {
    Example ex = new Example();
    ex.num1 = 1; // 可以访问
    ex.num2 = 2; // 不可以访问
    ex.num3 = 3; // 不可以访问
    ex.num4 = 4; // 可以访问
  }
}

1.2 Java中的抽象类和接口有什么区别?

抽象类和接口都不能被实例化,但它们有些细微的区别:

- 接口只能定义常量和抽象方法,而抽象类可以定义变量和非抽象方法。

- 类可以实现多个接口,但只能继承一个抽象类。

- 接口中的方法默认为public,而抽象类中的方法可以定义任意访问修饰符。

- 接口中定义的变量默认为public static final,而抽象类中的变量可以定义任意访问修饰符。

例如,以下代码演示了抽象类和接口的使用:

public abstract class Animal {
  String name;
  public abstract void eat();
  public void sleep() {
    System.out.println("睡觉");
  }
}
public interface Pet {
  public static final String OWNER = "Tom";
  void play();
  void beFriendly();
}
public class Dog extends Animal implements Pet {
  @Override
  public void eat() {
    System.out.println("狗吃骨头");
  }
  @Override
  public void play() {
    System.out.println("狗玩游戏");
  }
  @Override
  public void beFriendly() {
    System.out.println("狗友善");
  }
}
public class Test {
  public static void main(String[] args) {
    Dog dog = new Dog();
    dog.eat();
    dog.sleep();
    dog.play();
    dog.beFriendly();
  }
}

2. Spring框架

2.1 什么是Spring框架?它有哪些核心模块?

Spring是一个开源的轻量级Java框架,用于简化Java EE开发,提供集成、测试、依赖注入等功能支持。它的核心模块有:

- Spring Core:提供依赖注入和控制反转的功能。

- Spring Context:提供面向切面编程和声明式事务管理的功能。

- Spring AOP:提供切面编程的支持。

- Spring ORM:提供Hibernate、JPA等ORM框架的集成支持。

例如,以下代码演示了Spring框架的使用:

public class HelloWorld {
  private String message;
  public void setMessage(String message)
    this.message = message;
  
  public void printMessage() {
    System.out.println("Message: " + message);
  }
}
public class SpringDemo {
  public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
    obj.printMessage();
  }
}

2.2 什么是依赖注入?它的优点是什么?

依赖注入是一种实现控制反转的方式,通过将依赖关系交给容器来管理,实现了代码与组件之间的解耦。它的优点有:

- 提高代码的复用性和可维护性。

- 简化了代码的构造,使代码看起来更加简洁。

- 降低了组件与组件之间的耦合度。

- 便于单元测试,可以方便地模拟各种组件。

例如,以下代码演示了依赖注入的使用:

public class Person {
  private String name;
  private int age;
  private Address address;
  public Person(String name, int age, Address address)
    this.name = name;
    this.age = age;
    this.address = address;
  
  // getters and setters
}
public class Address {
  private String city;
  private String street;
  public Address(String city, String street)
    this.city = city;
    this.street = street;
  
  // getters and setters
}

3个

  
  

评论区

    相似文章