面试之Java基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq3399013670/article/details/87346127

1、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

  • 在switch(expr1)中,expr1只能是一个整数表达式(int基本类型或Integer包装类型)或枚举常量。由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。在JDK7.0中引入了新特性,witch语句可以接收一个String类型的值,String可以作用在switch语句上。然而long是不能作用于swtich语句中。

2、数组有没有length()方法? 字符串有没有length()方法? 集合有没有length()方法?

  • 数组求长度用length属性;字符串求长度用length()方法;集合求长度用size()方法。

3、构造器(constructor)是否可被重写(override)?

  • Constructor不能被继承,所以Constructor也就不能被override。每一个类必须有自己的构造函数,负责构造自己这部分的构造。子类不会覆盖父类的构造函数,相反必须负责在一开始调用父类的构造函数。

4、描述一下JVM加载class文件的原理机制?

  • JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。
  • 由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。

5、Java中,char型变量中能不能存储一个中文汉字,为什么?

  • char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。

6、Java 中会存在内存泄漏吗,请简单描述。

  • 理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题;然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄露的发生
    。如Hibernate的Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象,如果不及时关闭或清空一级缓存就可能导致内存泄露。

参考:
https://blog.csdn.net/jackfrued/article/details/44921941
https://blog.csdn.net/jackfrued/article/details/44931137
https://blog.csdn.net/jackfrued/article/details/44931161

猜你喜欢

转载自blog.csdn.net/qq3399013670/article/details/87346127