大四了,博主也要面临找工作的问题了,所以博主想梳理一下自己对Java的所有所学,做一次自问自答。
-
java是什么?
答:Java是一门半解释半编译型的编程语言,其核心思想是面向对象。 -
面向对象的特性?
答:抽象,继承,封装,多态。
抽象:一切东西皆是对象。
继承:父与子,只能单继承。
封装:所有的特性都归于一体,只保留操作方法,不暴露其属性。
多态:一物多用。 -
Java静态与非静态
答:简而言之,静态属于类,非静态属于实例。静态的东西在类编译后就直接诞生了,不用实例化就可以被其他对象引用。非静态的东西需要实例化才能被引用。 -
java的加载机制?
答:准备——加载——编译——解析——校验——运行——卸载。 -
Java基本类型?
答:八个
byte:1个字节
short:2个字节
int:4个字节
long:8个字节
char:2个字节
float:4个字节
double:8个字节
Boolean:官方没说 -
Java元注解?
答:四个
retention:表示类的存在时长
target:表示该类所能修饰的目标
document:描述其他类型的注解
inherited:表示该类应该被继承 -
Java接口与抽象类?
答:接口只提供方法,一般用来表示对象所具有的功能。Java8以前接口只能是具体名,不能有实现方法,否则会出现编译报错。
一个问题,如何只实现某些接口方法,而不是实现整个接口的所有方法呢?
适配器模式,提供接口的所有null实现。想要实现这个接口的类可以继承该类,重写类中的想要实现的方法。
抽象类,有自己独立的变量和方法,抽象类不能被实例化,只能被继承。其关键字为abstract。
什么时候使用接口,什么时候使用抽象类?
根据特性确定,即只想要某些功能,使用接口。
想要某些具体的实现方法,并且想把某些功能和属性模块抽离出来,就用抽象类。 -
Java反射?
答:Java反射机制为从JVM的方法区中读取正在运行的对象信息。 -
Java 的exception和error
答:exception即异常,分为runtime exception和explain exception异常,运行异常(runtime)无法预测,只能在运行时暴漏出来,例如算术异常,内存溢出异常等。explain exception异常是编译异常,一般在编译时就暴露出来,例如Java语法错误。
error即为错误,在Java中和exception完全是两个不同的概念,error不可控,不可预测。error更多是一种Java外在环境出错释义,例如电脑宕机,就是一种error。 -
Java的字符串
答:字符串本身就是一个对象,只不过被Java默认实例化了。
字符串常用的三种,分别是string,string buffer,string builder,三者特性如下:
string:长度不可变,不安全。
stringbuffer:长度可变,安全。安全的原因是底层采用了synchronized锁。
stringbuilder:长度可变,不安全。 -
Java的泛型
答:泛型我更愿意称呼其类参数。其底层采用的是反射机制,或者说这是Java的一种约定,约定此泛型所属对象都是一类。 -
Java序列化与反序列化
答:序列化指将当前运行的对象状态保存起来,包括对象数据和其方法。需要使用序列化的类需要实现Serializable接口。
序列化步骤:
- 创建一个outputStream对象;
- 将outputStream封装到objectoutputStream实例对象中;
- 调用objectoutputStream实例对象的objectwrite()方法将对象写入磁盘;
- 调用objectoutputStream实例对象的close()方法将对象流关闭;
反序列化步骤: - 创建一个inputputStream对象;
- 将outputStream封装到objectinputputStream实例对象中;
- 调用objectinputputStream实例对象的objectread()方法将对象写入磁盘;
- 调用objectinputputStream实例对象的close()方法将对象流关闭;
- equals和hashCode什么关系?
答:什么关系?调用源码如下:
没啥关系,hashcode是hashcode,equals是equals。