什么是面向对象?
解释面向对象首先要理解面向过程,面向过程更加注重事物的过程,步骤,顺序,而面向对象更加注重事物的参与者,以及自己需要做的事情。面向过程更加的高效,而面向对象更加易于代码复用,扩展和维护。
比如:洗衣机洗衣服
面向过程:首先打开洗衣机,放衣服,放洗洁剂,清洗,烘干,晾衣服
面向对象:只需要人,洗衣机两个对象
人:打开洗衣机,放衣服,放洗洁剂,晾衣服
洗衣机:清洗,烘干
面向对象的三大特征:
封装:封装就是将一个对象的各个属性封装起来不让外人直接看到,再Java中就是通过Private修饰,而其他类想要访问可以通过get(),set()方法来访问。
继承:继承就是将对象公有的属性抽取出来,变成一个公共的类,其拥有共同属性的类需要这些属性只需要继承这个父类就可以了。
比如一个动物类,他有动物的公共特称,叫声,毛发,性别等等抽出来组成一个父类,现在有一个小猫类,可以继承这些属性,在添加一些自己特有的属性,就可以完整的描述这个小猫。
多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行也不同。
比如一个小猫有一个叫声的方法喵喵,它的父类也有一个叫声的方法,它可以继承这个方法然后对这个方法进行重写,这个就是多态,即外部对同一个方法的调用实际执行也不同。
重写和重载的区别?
重写:重写发生在子类与父类中,指子类对父类方法的重写,只能比父类抛出更少的异常,访问权限不能比父类小,被覆盖的方法不能用private修饰否则只是在子类中重新定义了一个方法。
重载:重载发生在一个类中,指的是一个类中方法名相同,参数个数,参数类型,参数顺序不同。
返回值不同可以构成重载吗?
不可以,java中调用函数不需要强制赋值。
抽象类和接口的区别?
1.抽象类中可以没有抽象方法,但接口中必须有抽象方法。
2.抽象类中可以有具体实现的方法,成员变量,接口中只能有抽象方法,和常量。
3.抽象类只可以单继承,而接口可以多继承。
4.java 1.8中接口增加了用default修饰的方法即方法可以被实现。
抽象类和接口如何选择?
如果要创建一个不带有任何方法实现和成员变量的基类,应该让他首先成为一个接口而不是一个抽象类。如果知道某个类是一个基类,那么首先让他成为一个接口,只有在必须要有成员变量和具体的方法实现的情况下,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法只要方法没有被全部实现它就是一个抽象类。
==和equals的区别?
在基本数据类型中==对比的是变量的值,在引用数据类型中==对比的是引用类型的内存地址。
equals方法通常会被重写,因此它对比的是string中的内容是否相等。
Hashcode和equals的区别?
hashcode的作用是获取哈希码也称散列码,它返回一个int,就是索引,这个哈希码的作用就是为了确定该对象在哈希表中的位置。hashCode()定义在JDK的object.java中,java中的任何方法都包含hashcode,散列表存储的是键值对,他的特点是根据键快速查询出索引对应的值
以“hashset()查询重复”为例来说明为啥使用hashcode
对象加入hashset时会首先计算对象的hashcode值来判断加入对象的位置是否有值如果没有则对象没有重复,如果有值会调用equals()来检查对象是否相等,如果相同则不会让他加入如果不同就会重新计算哈希值
1.如果两个对象相等,则他的hashcode也一定相等。
2.如果两个对象的hashcode相等,对象不一定相等。
3.如果两个对象相等他们分别调用equals返回的结果时ture
4.因此equals被覆盖掉,那么hashcode也必须被覆盖
String StringBuffer,StringBuiled的区别?
String是Final修饰的常量,每一次对String进行修改都会产生一个新的String对象
StringBuffer,StringBuiled都是可变字符串,都可以在原有对象上进行操作。
StringBuffer是线程安全因为它的每个方法都被Synchronized修饰
StringBuiled是线程不安全
性能:StringBuiled>StringBuffer>String
使用场景:如果经常对对象进行修改那么应该首先选择StringBuiled,如果在多线程,共享变量,保证结果正确情况下应该选择StringBuffer,如果是一个常量应该选择String。
JAVA中常用的包有那些?
java.lang,java.io,java.util,java.net,java.sql
JDK JRE JVM的区别和联系?
JDK是java开发工具包,是java开发环境的核心组件,并提供编译、调试、运行一个Java程序所需要的所有工具,可执行二进制文件,是一个平台特定的软件
JRE是java运行时环境,时JVM的实施和实现,提供了java程序的平台。jre包含jvm但不包含java编译器/调试器之类的工具
JVM时Java虚拟机,当我们运行一个java程序时JVM负责将字节码文件转换为特定的机器代码,JVM提供内存管理垃圾回收和安全机制
区别:
JDK用于开发,JRE用于运行Java程序
JDK,JRE都包含JVM
JVM是Java 编程语言的核心并具有平台独立性。