1. 面向对象的特征(了解):
面向对象的特征:封装、继承、多态、抽象。

封装:把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,就是把不想告诉或者不该告诉别人的东西隐藏起来,把可以告诉别人的公开,别人只能用我提供的功能实现需求,而不知道是如何实现的。增加安全性。

继承:子类继承父类的数据属性和行为,并能根据自己的需求扩展出新的行为,提高了代码的复用性。

多态:一类事物的多种形态。 解释:指允许不同的对象对同一消息做出相应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。封装和继承几乎都是为多态而准备的,在执行期间判断引用对象的实际类型,根据其实际的类型调用其相应的方法。

抽象:表示对问题领域进行分析、设计中得出的抽象的概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。在Java中抽象用 abstract 关键字来修饰,用 abstract 修饰类时,此类就不能被实例化,抽象类(接口)就是为了继承而存在的。

2.什么是单例模式?有几种?(必会)

单列模式:某个类的实例在多线程环境下只会被创建一次出来. 例如(音乐播放器、枚举)
单列模式有三种:饿汉式、懒汉式、双检锁

饿汉式:在使用单例对象时,对象已经提前创建好了。线程安全(重点)

饿汉式单例模式实现步骤:
1.将构造器私有
2.使用成员变量保存创建好的单例对象
3.提供一个方法返回单例对象给别人使用
image.png
懒汉式:在需要该对象的时候,才去创建一个对象(延迟加载对象)。非线程安全,延迟初始化。
image.png
双检锁:线程安全,延迟初始化。
image.png

3.重载和重写的区别:
重载:发生在同一个类中,方法名相同,(参数列表、类型、个数、顺序不同)。 和返回值无关。

重写:发生在子类和父类之中,子类重写父类的方法,方法名和参数列表相同,返回值范围和抛出异常的范围要少于父类,父类私有方法子类不可以重写。总之:子类要比父类强大一些。

4.instance of关键字的作用:
instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例。判断某个对象是否是指定类型,如果是返回true,否则返回false。用法:多态向下转型时使用,把父类转成子类对象的时候使用,避免类型转换异常。

注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定 类型,则通过编译,具体看运行时定。

image.png

1.Java中==和equals的区别?(必会)
==的作用:
在基本数据类型里面比较对象的值
在引用数据类型里面比较对象的地址
equals的作用:
默认比较对象的地址,重写equals,比较对象的内容(属性)
一般Java自带的类都重写了equals。

面试:请解释字符串比较中,“==”和“equals”的区别
==:比较对象的值
equals:比较对象的内容

2. string常用的方法有哪些?(了解)
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。(遍历的时候会用到)
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串转换成字节数组。
length():返回字符串长度。
equals():字符串比较。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。

3. Object类常用方法有那些(7个):
1.equals 重写
2.Hashcode
3.toString
4.wait 当前线程等待
5.notify 唤醒当前线程
6.clone 复制对象
7.getClass 反射里面得到线程对象

4.是否可以继承 String 类:
String 类是 final 类,不可以被继承,对 String 类最好的重用方式是关联关系(Has-A)和依赖关系(Use-A)而不是继承关系(Is-A)。

5.讲下java中的Math类有那些常用方法:
幂运算 :Pow() ——> 【返回a的b次幂的值:pow(double a , double b)】
平方根 :Sqrt()
四舍五入 :Round()
求绝对值 :Abs()
向上取整:ceil()
向下取整:floor()