21xrx.com
2025-04-09 21:43:26 Wednesday
文章检索 我的文章 写文章
Java面试题及答案——详解常见问题与自测代码
2023-06-19 07:58:19 深夜i     10     0
Java面试题 Java基础知识 静态方法 实例方法 反射机制 自测代码

在Java开发中,常见的面试问题涉及语言特点、基础知识和常用工具等内容。在进入面试前,我们需要了解这些问题并能够给出清晰的答案。下面,我们将针对常见问题进行讲解,并提供自测代码供读者参考。

问题一:Java和C++有哪些区别?

Java语言相较于C++语言的区别主要有以下几点:

1. Java是一种解释型语言,而C++是一种编译型语言;

2. Java具有自动内存管理机制,而C++需要手动进行内存管理;

3. Java语言支持垃圾回收机制,而C++没有这个功能;

4. Java运行时环境具有跨平台性,而C++编写的程序需要针对不同操作系统编译;

自测代码一:

public class CppAndJavaDifference {
  public static void main(String[] args) {
    // Java为解释型语言
    System.out.println("Java是一种解释型语言,而C++是一种编译型语言");
    // Java具有自动内存管理机制
    String str = new String("Java具有自动内存管理机制");
    System.out.println(str);
    // Java语言支持垃圾回收机制
    System.out.println("Java语言支持垃圾回收机制,而C++没有这个功能");
    // Java运行时环境具有跨平台性
    System.out.println("Java运行时环境具有跨平台性,而C++编写的程序需要针对不同操作系统编译");
  }
}

问题二:Java中的静态方法和实例方法有什么区别?

静态方法和实例方法有以下三个不同点:

1. 拥有者不同:静态方法属于类,在类加载时就已经存在,而实例方法属于具体的实例化对象,在对象创建时才会存在。

2. 参数不同:静态方法的参数只有在方法的入口处传入,而实例方法的参数可以在任何时候传入,并且传的参数可以是对象。

3. 访问方式不同:类可以直接访问静态方法并调用,而调用实例方法需要先创建对象,然后通过对象来访问。

自测代码二:

public class MethodDifference {
  static int num1 = 10;
  int num2 = 20;
  // 静态方法
  public static void staticMethod() {
    // 静态方法只能调用静态变量
    System.out.println("num1 = " + num1);
    // 不能调用非静态变量
    // System.out.println("num2 = " + num2);
  }
  // 实例方法
  public void instanceMethod() {
    // 可以调用静态变量和非静态变量
    System.out.println("num1 = " + num1);
    System.out.println("num2 = " + num2);
  }
  public static void main(String[] args) {
    // 静态方法可以直接用类名调用
    MethodDifference.staticMethod();
    // 实例方法需要先创建对象再调用
    MethodDifference obj = new MethodDifference();
    obj.instanceMethod();
  }
}

问题三:Java中的反射机制是什么?

Java反射机制指的是在程序运行时动态地获取类的信息,包括成员变量、方法、构造器等信息,并能够在运行时调用。通过反射机制,我们可以在不知道具体类的情况下创建对象,或者在运行时动态地改变类的属性或者方法行为。

自测代码三:

public class ReflectionDemo {
  public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
    String className = "java.util.ArrayList";
    Class clazz = Class.forName(className);
    // 获取构造器
    Constructor constructor = clazz.getConstructor();
    System.out.println("构造器名称:" + constructor.getName());
    Object obj = constructor.newInstance();
    // 获取成员变量
    Field field = clazz.getDeclaredField("size");
    field.setAccessible(true);
    System.out.println("成员变量名称:" + field.getName());
    field.set(obj, 10);
    System.out.println("修改后的成员变量值:" + field.get(obj));
    // 获取方法
    Method method = clazz.getMethod("add", Object.class);
    method.invoke(obj, "test");
    System.out.println(obj);
  }
}

  
  

评论区

请求出错了