2024年3月9日发(作者:)

1、 List和Set:有序性,可重复性

List中数据存放是有序的,按照存放的顺序存储,并且数据允许重复

Set中的数据是无序的,数据不允许重复

2、 ArrayList和Vector:安全性和效率

ArrayList是线程非安全的,但是ArrayList的执行效率要高于Vector

Vector实现了线程同步,是线程安全的,但是效率低,可以用于多线程编程

3、 HashMap和Hashtable:null键和null值,线程安全性和效率

HashMap中允许有一个null键和多个null值

Hashtable中不允许有null键和null值

Hashtable实现了同步,是线程安全的,可以用于多线程编程

HashMap是线程非安全的,执行效率要高于

4、 Collection和Collections:接口---帮助类

Collection是集合类的上级接口,继承与他的接口主要有Set和List

Collections是针对集合类的一个帮助类,提供一系列静态方法实现对各种集合的搜索、

排序、线程安全化等操作

5、 &和&&:条件1&/&&条件2

&是位运算符,表示按位与运算,条件1&条件2,若条件1不成立,还会判断条件2

&&是逻辑运算符,表示逻辑与(and),条件1&&条件2,若条件1不成立,则不会判断

条件2,可以避免空指针异常

6、 int和Integer

int是java的原始数据类型

Integer是int类型的封装类,提供了对int类型数据的常用操作方法

int是Integer类的原型

7、 final、finally和finalize

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承

finally是异常处理语句结构的一部分,表示总是被执行

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,

可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等

8、 sleep()和wait():所属类不同

sleep()和wait()都可以让当前的线程处于休眠状态

sleep是线程类(Thread)中的方法,sleep可以让线程休眠指定时间,一旦时间结束,

线程会自动恢复

wait()是Object类中的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等

待此对象的等待锁定池,只有针对此对象发出notify方法或者notifyAll方法或本线程才

进入对象锁定池准备获得对象锁进入运行状态

9、 接口和抽象类

抽象类

语法:public abstract class GeneralDAO{

}

成分:变量,常量,用abstract修饰抽象方法,非抽象方法

继承实现:

非抽象类:继承(extends),重写抽象类中所有抽象方法

抽象类:继承(extends),可以重写也可以不重写方法

接口:接口不能继承也不能实现抽象类

其他:类只能单继承:一个子类只能继承一个父类

public class UserDAO extends GeneralDAO{ }

接口

语法:public interface IGeneral{

}

成分:常量,抽象方法(可用abstract,也可不用)

继承实现:

非抽象类:实现(implements ),重写接口中所有方法

抽象类:实现(implements),可以不重写接口中的方法

接口:继承(extends),不能重写父接口中的方法

其他:接口可以多实现:一个类可以同时实现多个接口

public class User implements IInterl,ITest{ }

共同点:

抽象类和接口都不能创建对象

如果想要创建抽象类(接口)的对象引用,只能够指向子类(实现类)的对象

抽象类(接口)的引用只能指向子类(实现类)的对象

抽象名 对象名 = new 子类名();

接口名 对象名 = new 实现类名();

如果我们直接通过抽象创建对象,我们需要在抽象类的构造器后面加上一对“{}”,

在“{}”中实现抽象类中所有的抽象方法

10、重写和重载

方法的重写

定义:子类覆盖父类中的方法

涉及到的类:父类和子类,两个或两个以上的类

方法名:子类方法名和父类方法名必须一致

返回类型:子类方法和父类方法返回类型必须一致

参数列表:子类方法和父类方法参数列表必须一致

访问权限:子类方法不能比父类方法更为严格

方法的重载

定义:在一个类中可以定义多个方法名相同的方法

涉及到的类:本类,一个类

方法名:多个方法名相同

返回类型:多个相同方法名的方法返回类型可以不相同

参数列表:多个方法的参数列表必须不同

访问权限:多个方法访问权限无关

11、String和StringBuffer

Java提供了String和StringBuffer两个类,可以用于储存和操作字符串,即包含多个字

符串的字符数据

String类提供的数值不可改变的字符串

StringBuffer类提供的字符串可以进行修改,StringBuffer用来动态构造字符串数据

12、StringBuilder和StringBuffer:安全性和性能

StringBuilder和StringBuffer都是用完善对String类型数据的操作,用法完全一致

区别:StringBuffer是线程安全的,可以用在多线程编程中,但是效率低于StringBuilder

StringBuilder是线程非安全的,但是执行效率高于StringBuffer

所以在不涉及到多线程编程的情况下,我们选用StringBuilder

13、错误(error)和异常(exception)

error表示恢复不是不可能但是很困难的情况下的一种严重问题。比如说内存溢出,不

可能指望程序能处理这样的情况

exception表示一种设计或实现问题,它表示如果程序运行正常,从不发发生的情况

14、运行时异常和一般异常:一般异常属于编译异常

运行时异常通常是在虚拟机运行代码过程中,由于所使用的数据不合法二导致的异常

常见的RuntimeException运行时异常如下:

ArithmeticException:数学计算异常

NullPointException:空指针异常

NegativeArraySizeException:负数组长度异常

ArrayOutOfBoundsException:数组索引越界异常

ClassNotFoundException:类文件未找到异常

ClassCastException:造型异常

常见的IOException异常,如下:

FileNotFoundException:文件未找到异常

EOFException:读写文件尾异常

MalformedURLException:URL格式错误异常

SocketException:Socket异常

一般异常:java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不是要

求必须声明抛出未被捕获的运行时异常

15、Request跳转和Response跳转(forward和redirect):重定向和请求跳转

forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内

容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从

哪儿来的,所以它的地址栏中还是原来的地址

redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般

来说浏览器会用刚才请求的所 有参数重新请求,所以 session,request参数都可以获取