1.封装、继承和多态
这也是面向对象语言的三大特征。
1.1 封装:封装就是隐藏对象的属性和实现细节,仅对外开放接口,控制程序中属性读和修改的访问级别,将对象和操作封装成一个抽象得类,形成一个整体。
封装的目的:增强安全性、简化编程,使用者不必了解其内部细节,只需要通过外部接口来使用类的成员。
1.2 继承(extends关键字): 就是子类继承父类的特征和行为,即可以使用现有类的特征和功能,但无需重新编写原来类的情况下进行功能的扩展。
在多个类的情况下,一个类作为子类只能有一个父类;作为父类可以有多个子类。但是可以多级继承,如a类继承b类,b类继承c类,形成一条长链。
1.3 多态:可以说成同一个行为,居有多个表现形式和形态的能力。。
多态的实现方法有重写和重载。重写就是子类重新定义父类中的方法;重载则是允许存在多个名字相同的方法,但是这些方法参数列表不同,那么调用时只需要输入不同的参数,java会自动选择构造函数。由此可见,多态实在继承的基础上进行。
2.static关键字
主要意义:创建独立于具体对象的域变量或方法,这样一来即使没有创建对象也可以使用变量或方法,(如类名.静态方法)来调用。
static还可以用来形成静态代码块以优化程序性能,因为static代码块只会在类加载的时候执行一次。
static方法只能被继承不能被重写。
3.接口与抽象类的区别
接口:
构造方法:没有构造方法
成员变量:只能是常量。默认修饰符为public static final
成员方法:jdk1.7只能是抽象的。默认修饰符为public abstract
抽象类:
构造方法:有构造方法,用于子类实例化使用。
成员变量:可以是变量,也可以是常量。
成员方法:可以是抽象的,也可以是非抽象的。
抽象类不能用static关键字修饰
类与类只能单继承或者多级继承,但接口可以多实现。
在使用抽象类和接口类的依据是:抽象类是这个对象是什么,接口类是这个对象能做什么。。
4. 多线程创建的三种方式
4.1 继承Thread类
自定义一个类,继承java.lang包下的Thread类;
重写run方法,将要执行的代码写在run方法里面;
创建自定义类的对象,调用start方法启动线程。
4.2 实现Runable接口
自定义一个类,实现java.lang包下的Runable接口;
重写run方法,将要执行的代码卸载run方法里面;
创建自定义类的对象,创建Thread对象;
将上述自定义类对象作为参数传入Thread方法中,调用start方法启动线程。
4.3 实现Callable接口
自定义一个类,实现java.util.concurrent包下的Callable接口;
重写Call方法,将要执行的代码卸载Call方法中;
创建线程池,将自定义对象加入线程池中;
获取线程返回结果。
5. 进程和线程的区别
进程:并发执行的程序在执行过程中管理中分配和管理资源的基本单位,是竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,负责当前进程中程序的执行,线程也是处理机调度的基本单元。一个进程至少一个线程,一个进程可以拥有多个线程,多个线程可以共享数据。
区别:
(1) 地址空间:同一进程之间的线程共享地址空间,不同进程之间的线程则是独立的地址空间。
(2) 共享资源:同一进程之间的线程共享资源,不同进程之间的资源则是独立的。
(3) 一个进程崩溃不会影响到其他的进程,但是一个线程崩溃会导致整个进程崩溃,所以多进程比多线程健壮。
6.JDK和JRE
JDK:Java开发工具包,是程序员使用java语言编写Java程序所需的开发工具包。
JRE:Java运行环境,包含Java虚拟机,Java类库,是运行Java程序所需的环境
如果需要编写Java程序,需要安装jdk;如果只需要运行java程序,只需要安装jre,一般是提供给用户。
7.== 和 equals的区别
7.1 == (不能用于比较布尔类型)
如果比较的是基本数据类型变量,那么就是看两个变量的数值是否相等;
如果比较的是引用数据类型变量,那么比较的就是两个变量的地址是否相等。
7.2 equals
一般来说equals都是需要重写的,Strng、Data、File、包装类都重写了Object类中的equals。如果重写了就比较内容是否相等,如果没有重写就比较地址是否相等。
8. 两个对象的hashcode()相同,那么equals()也一定相同吗?
首先要区分hashcode指的是对象在hash表中的位置,而不是对象的物理地址。通过对象的物理地址转化成一个整数,然后经过hash函数的算法就得到了hashcode()。hashcode()的存在可以快速地根据hash函数确定数据在表中的位置。
得出结论:
(1)如果两个对象的equals相同,那么它们的hashcode一定相同。
(2)如果两个对象的hashcode相同,那么它们的equals不一定相同,只能说它俩在散列存储结构中的存储位置相同。
9. HashMap底层实现原理
存储结构:JDK1.8以前是用数组+链表的结构存储;但是当链表的长度特别长的时候,查询效率将直线下降,因此,JDK1.8把他设计为达到特定的阈值之后就会将链表转化成红黑树。
红黑树:
(1)每个节点只有两种颜色:红色或者黑色2根节点必须是黑色
(2)根节点以及每个叶子节点(NIL)都是黑色的空节点
(3)从根节点到叶子节点,不能出现两个连续的红色节点
(4)从任一节点出发,到它下边的子节点的路径包含的黑色节点数目都相同
10. final在Java中的作用
final的特征就是凡是被final修饰的地方都不能修改。
(1)修饰类,表示该类不能被继承
(2)修饰方法,表示该方法不能被重写
(3)修饰变量:
如果是基本数据类型,表示该变量不能被更改;如果修饰的是形式参数,表示一旦被赋值则不能更改。
如果是引用数据类型,也就是修饰对象时,引用在初始化后将永远地指向一个内存地址,不可修改。但是内存地址中保存的对象是可以修改的。
11. java 中的 Math.round(-1.5) 等于多少?
Math的round方法是四舍五入,如果参数是负数,则往大的数如,Math. round(-1.5)=-1,如果是Math.round(1.5)则结果为2
这里要注意整数和负数的区别,有人会发现对于负数四舍五入可能不适用,那么试试五舍六入?
也就是将参数加上0.5再向下取整。
12.



