前言
记录自己看的面试题,算是个笔记吧
一、面向对象和面向过程的区别
面向过程的性能高,因为类的调用需要实例化,这就比较消耗资源。面向对象有封装,继承,多态的特性,所以更易维护,易拓展,易复用。
二、Java语言特点
老生常谈,面向对象,平台无关,安全可靠,支持多线程(C++就没有内置多线程),支持网络编程,编译和解释并存。
三、jvm,jre和jdk
jvm:Java虚拟机,是运行java字节码的虚拟机,也是实现平台无关性的方式,即jvm有针对不同系统的实现,针对不同系统使用相同字节码给出相同的结果。
字节码:JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文 件),不面向任何特定的处理器,只面向虚拟机,因此,Java 程序无须重新编译便可在多种不同的计 算机上运行。
JIT 编译器:属于运行时编译,当 JIT 编译器完成第 一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什 么经常会说 Java 是编译与解释共存的语言。
jdk:Java development kit 它拥有 JRE 所拥有 的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编 译程序。
jre:JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合, 包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但 是,它不能用于创建新程序。
一般jre只用来运行java程序,开发的话就需要jdk了,并不绝对,比如部署web程序就要jdk。
四、java和c++区别
都是面向对象的语言,都支持封装、继承和多态 ,Java 不提供指针来直接访问内存,程序内存更加安全 , Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多 继承,但是接口可以多继承。 Java 有自动内存管理机制,不需要程序员手动释放无用内存。
五、字符型常量和字符串常量的区别
1.形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的 若干个字符
2. 含义上: 字符常量相当于一个整形值( ASCII 值),可以参加表达式运算 字 符串常量代表一个地址值(该字符串在内存中存放位置)
3. 占内存大小 字符常量只占 2 个字节 字符串常量占若干个字节(至少一个 字符结束标志) (注意: char 在 Java 中占两个字节)
六、基本类型大小
byte :8bit
char:16bit
short:16bit
int : 32bit
float:32bit
long:64bit
double:64bit
七、构造器 Constructor 是否可被 override
父类私有属性和构造方法不可以被继承,所以构造器不能被重写,但可以重写overload,所以一个类有多个构造函数。
八、重载和重写的区别
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序 不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父 类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类 方法访问修饰符为 private 则子类就不能重写该方法。
九、Java 面向对象编程三大特性: 封装 继承 多态
封装: 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法, 如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个 类没有提供给外界访问的方法,那么这个类也没有什么意义了。
继承: 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加 新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过 使用继承我们能够非