Java简答面试题(一)

1.问题:介绍一下 finalize 方法 答案: final: 常量声明。 finally: 处理异常。 finalize: 帮助进行垃圾回收。接口里声明的变量默认是 final 的。 final 类无法继承,也就是没有子类。这么做是出于基础类型的安全考虑, 比如 String 和 Integer 。 这样也使得编译器进行一些优化, 更容易保证线程的安全性。 final 方法无法重写。 final 变量的值不能改变。 finalize() 方法在一个对象被销毁和回收前会被调用。 finally, 通常用于异常处理,不管有没有异常被抛出都会执行到。比如,关闭连接通常放到 finally 块中完成。

2.问题:为什么 Java 里没有全局变量 ? 答案:Global variables(全局变量) 是指可以全局访问的变量, Java不支持全局变量,原因如下: :全局变量破坏了引用透明性原则。全局变量导致了命名空间的冲突。

3.问题:如何将 String 类型转化成 Number 类型? 答案: Integer 类的 valueOf 方法可以将 String 转成 Number 。

public class Test4 {
    public static void main(String[] args) {
        String s1 = "1000";
        int s2 = Integer.valueOf(s1).intValue();
        System.out.println(s2);
    }
}

4.问题:什么是隐式的类型转化 ? 答案:隐式的类型转化就是简单的一个类型赋值给另一个类型, 没有显式的告诉编译器发生了转化。并不是所有的类型都支持隐式的类型转化。

5.问题:你怎么理解变量? 答案: 变量是一块命名的内存区域, 以便程序进行访问。 变量用来存储数据,随着程序的执行,存储的数据也可能跟着改变。

6.问题:数值提升是什么 ? 答案: 数值提升是指数据从一个较小的数据类型转换成为一个更大的数据类型, 以便进行整型或者浮点型运算。在数值提升的过程中, byte,char,short 值会被转化成 int 类型。需要的时候 int 类型也可能被提升成 long 。 long 和 float 则有可能会被转换成 double 类型。

7.问题: main 方法的参数里面,字符串数组的第一个参数是什么 ? 答案:数组是空的,没有任何元素。不像 C 或者 C++ ,第一个元素默认是程序名。如果命令行没有提供任何参数的话, main 方法中的 String 数组为空 ,但不是 null 。

8.问题:什么是数据的封装 ? 答案: 数据封装的一种方式是在类中创建 set 和 get 方法来访问对象的数据变量。 一般来说变量是 private 的,而 get 和 set 方法是 public 的。封装还可以用来在存储数据时进行数据验证,或者对数据进行计算,或者用作自省(比如在 struts 中使用 javabean )。把数据和功能封装到一个独立的结构中称为数据封装。 封装其实就是把数据和关联的操作方法封装到一个独立的单元中, 这样使用关联的这些方法才能对数据进行访问操作。 封装提供的是数据安全性 ,它其实就是一种隐藏数据的方式。

9.问题:什么是反射 API ?它是如何实现的? 答案: 反射是指在运行时能查看一个类的状态及特征, 并能进行动态管理的功能。 这些功能是通过一些内建类的反射 API 提供的,比如 Class,Method,Field, Constructors 等。使用的例子:使用 Java 反射 API 的 getName 方法可以获取到类名。

10.问题: JVM 自身会维护缓存吗, 是不是在堆中进行对象分配, 操作系统的堆还是 JVM自己管理的堆?为什么? 答案:是的, JVM 自身会管理缓存,它在堆中创建对象,然后在栈中引用这些对象。

11.问题:怎么理解什么是同步 ? 答案: 同步用来控制共享资源在多个线程间的访问, 以保证同一时间内只有一个线程能访问到这个资源。 在非同步保护的多线程程序里面, 一个线程正在修改一个共享变量的时候, 可能有另一个线程也在使用或者更新它的值。同步避免了脏数据的产生。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券