21xrx.com
2024-11-05 19:28:22 Tuesday
登录
文章检索 我的文章 写文章
Java面试题及答案——详解常见问题与自测代码
2023-06-19 07:58:19 深夜i     --     --
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);

  }

}

  
  

评论区

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