21xrx.com
2024-12-22 22:34:38 Sunday
登录
文章检索 我的文章 写文章
Java面试常见问题及答案解析
2023-06-15 18:47:30 深夜i     --     --
Java面试 反射 枚举类 hashCode equals

随着Java的广泛应用,Java程序员的需求日益增长,对于招聘方而言,如何筛选到合适的Java程序员至关重要。因此,在Java面试中,通常会问及一些常见的问题,本文将带领读者了解这些问题和答案解析。

1. Java中的反射是什么?有哪些应用场景?

反射是指在程序运行期间获取任意一个类的信息以及调用它的方法的能力。Java中的反射技术可以让程序员通过一个字符串来获取并操纵一个类的属性、方法、构造器等。在开发中,反射技术可以被用来实现设计模式中的工厂模式、代理模式、装饰器模式等。

示例代码:


Class clazz = Class.forName("com.example.demo.Person");

Constructor constructor = clazz.getConstructor(String.class);

Object obj = constructor.newInstance("小明");

Method method = clazz.getDeclaredMethod("sayHello");

method.invoke(obj);

2. 枚举类有什么特点?举个例子说明其使用方法。

枚举类是一种特殊的类,它列出了所有可能的取值。Java中的枚举类可以像一个普通的类一样添加变量、方法和构造器。Java中的枚举类型是一个集合,程序员可以像操作其他集合一样,遍历、排序、查找等。

示例代码:


public enum Season SUMMER

public class Test {

  public static void main(String[] args) {

    for (Season s : Season.values()) {

      System.out.println(s);

    }

  }

}

3. 请解释hashCode和equals的区别。

hashCode是用来提高查找效率的,而equals则代表两个对象在值上是否相等。hashCode和equals方法是用来实现HashMap、HashSet等容器的,它可以让容器中的数据查找速度更快。如果在一个容器中存储的是不同的对象,但这些对象的hashCode相同,那么会导致哈希冲突,影响查找效率。

示例代码:


public class Person {

  private int id;

  private String name;

  //省略构造器和其他方法

  //重写hashCode和equals方法

  @Override

  public int hashCode() {

    final int prime = 31;

    int result = 1;

    result = prime * result + id;

    result = prime * result + ((name == null) ? 0 : name.hashCode());

    return result;

  }

  @Override

  public boolean equals(Object obj) {

    if (this == obj) return true;

    if (obj == null) return false;

    if (getClass() != obj.getClass()) return false;

    Person other = (Person) obj;

    if (id != other.id) return false;

    if (name == null) {

      if (other.name != null) return false;

    } else if (!name.equals(other.name)) return false;

    return true;

  }

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复