1.面向对象和面向过程的区别对比:
面向对象易维护、易扩展、易复用,由于面向对象继承、封装、多态的特性,可以设计低耦合的系统易于维护,但因为类的实例化开销较大,所以面向过程性能更高,一般性能是最主要的因素时采用面向过程开发,它没有面向对象那么易维护易扩展易复用。
2.java语言的特点
跨平台、面向对象,支持多线程、支持网络编程。
3.JVM,JDK,JRE都是什么
jvm是运行java字节码的虚拟机,对不同的系统又不同的实现,让相同的代码在不同的机器上都能出一样的结果。
JRE是java的运行环境,它是运行已编译 Java 程序所需的所有内容的集合,包括 Java虚拟机(JVM),Java类库,java命令和其他的一些基础构件。
JDK是Java Development Kit,它是功能齐全的Java SDK。它拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编译程序。
4.什么是java字节码
jvm可以理解的代码就是字节码,(就是扩展名是.class文件),它不需要任何特定的处理器,只面向虚拟机。jvm和字节码实现一次编译随处运行。
5.从java代码到运行起来又哪些步骤?
java源代码通过jdk中的编译器编译生成jvm理解的lava字节码,然后jvm可以运行字节码。
6.java和c++区别是什么?
都是面向对象语言,都支持封装、继承和多态。c++可以操作指针,Java 不提供指针来直接访问内存。Java 的类是单继承的,C++ 支持多重继承;java的接口可以多继承。Java 有自动内存管理机制,不需要程序员手动释放无用内存。
7.构造器是否可以被重写?
构造器不可以,在继承的时候,子类也无法获得父类的构造器和私有的属性。一般要用父类的构造器都是用super,加载顺序?先加载父类吧,那super什么时候执行?
补充:可以重载。
8.说说面向对象
面向对象有封装、多态继承三个特征。
封装是属性私有化,对外提供访问的方法,继承可以通过继承父类实现方法的复用,多态是声明父类指向子类的实例。
好处是什么?常用的场景
9.String,StringBuffer,StringBuilder的区别,为什么String不可变
1.String是不可变的,StringBuffer,StringBuilder可变
从设计层面上看,抽象类提供了一种 IS-A 关系,子类对象必须能够替换掉所有父类对象(里氏替换)。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS-A 关系。看不 明白
从使用上来看,一个类可以实现多个接口,但是不能继承多个抽象类。
接口的字段只能是 static 和 final 类型的,而抽象类的字段没有这种限制。
接口的成员只能是 public 的,而抽象类的成员可以有多种访问权限。
抽象类一般会包含抽象方法,抽象方法一定位于抽象类中。
接口是抽象类的延伸,在 Java 8 之前,它可以看成是一个完全抽象的类,从 Java 8 开始,接口也可以拥有默认的方法实现,因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类。
备注:在JDK8中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,必须重写,不然会报错。
13.对象相等和引用相等的区别:对象相等比较的是内存中的内容,引用比较的是地址
14.==和equals,==对于基本类型比较值,对于引用类型比较地址;equals方法如果没有被覆盖和==一样,如果被覆盖了就根据内容比较。42 == 42.0为什么是true
15.为什么重写equasl的时候也要重写hashCOde?