21xrx.com
2024-11-08 21:07:34 Friday
登录
文章检索 我的文章 写文章
Java面试常见问题及解答
2023-06-11 21:32:25 深夜i     --     --
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个

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章