面向对象
面向过程更注重处理问题的步骤和顺序,面向对象更注重处理问题有哪些参与者、各自需要做什么。
面向过程比较直接高效,面向对象更易于复用、扩展和维护。
特性:封装、继承、多态。
封装:明确标识出允许外部使用的成员函数和数据项,内部细节对外部调用透明。
继承:子类共性的属性和方法直接使用父类的,再添加自己独有的。
多态:接口有不同的实现类。
JDK、JRE、JVM的区别和联系
JDK:java development kit java开发工具,提供给开发人员使用。
JRE:java runtime environment java运行时环境,提供给运行java程序的用户使用。
JVM:java virtual machine java虚拟机。
JDK包含JRE,JRE包含JVM。
.java文件经过javac编译成.class文件,.class文件可以到处运行,放到windows或者linux版本的jvm上,jvm调用lib里面的类库去解释.class文件,将.class文件翻译成机器码,映射到操作系统,然后调用。
重载和重写的区别
重载:发生在同一个类中,方法名相同,参数列表不同。
重写:发生在父子类中,方法名和参数列表相同,如果父类方法修饰符为private那么子类不能重写这个方法。
接口和抽象类
抽象类中可以有普通成员方法,接口中的方法必须全部是抽象方法。
抽象类只能继承一个,接口可以实现多个。
抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型的
权限修饰符
同一个类中 同一个包中 不同包的子类 不同包的无关类
private yes
默认 yes yes
protect yes yes yes
public yes yes yes yes
final
最终的。
修饰类:表示类不可以被继承。
修饰方法:表示方法不可以重写。
修饰变量:表示变量一旦被赋值就不可以修改它的值。
修饰引用类型:地址不可以改变,地址值可以改变。
static
被类的所有成员共享
可以使用类名和对象名调用,推荐使用类名调用
static修饰的方法只能调用static修饰的方法,没有被static修饰的方法可以调用任意方法
String、StringBuffer、StringBuilder
String是final修饰的,不可变,每次修改会产生新的String对象。
StringBuffer和StringBuilder都是在原来的对象上操作的,底层是数组,可以用append()方法增添新元素,性能StringBuilder>StringBuffer>String。
StringBuffer是线程安全的,StringBuilder是线程不安全的,StringBuffer的方法都是synchronized修饰的。
修改少时使用String,经常需要修改时使用StringBuffer和StringBuilder,多线程共享变量时使用StringBuffer。
List和Set的区别
List存储有序、可重复的元素,支持下标访问和迭代器访问。
Set存储无序、不可重复的元素,只能通过迭代器访问。
ArrayList和LinkedList
ArrayList基于动态数组,需要存储在连续的内存中,适合下标访问(随机访问),不适合插入、删除,适合查询。
扩容机制:因为数组长度固定,超出数组长度时需要新建数组,然后将老数组的数据拷贝到新数组。
插入:如果不是尾插法,后面的元素全部要向后移动,所以使用尾插法并且规定较大的初始长度可以极大提升性能。
LinkedList基于链表,可以存储在分散的内存中,适合数据插入、删除,不适合查询。
插入:需要创建node对象。
遍历:只能使用迭代器,不能使用for循环,不能使用indexOf返回元素索引。因为会对LinkedList全部遍历一遍。
HashMap和HashTable
HashMap是线程不安全的,HashTable是线程安全的,HashTable的方法都是synchronized修饰的。
底层是通过数组+链表实现的。
实现一个ioc容器
1.在配置文件中配置包扫描路径。
2.递归包扫描获取.class文件。
3.反射,确定需要交给ioc管理的类。
4.对需要进行注入的类进行依赖注入。
jvm体系结构

进制
八进制0开头
十六进制0x开头
转义字符
\t制表
\n换行
实例化
new student();
static
static修饰的方法和类一起加载,
没有static的方法和对象一起加载
常见设计模式
单例模式:类只有一个实例,自己实例化自己,提供对外的接口
工厂模式:创建者和调用者分离
mvc模式:model,view,controller
浙公网安备 33010602011771号