自动类型转换遵循下面的规则
1、若参与运算的数据类型不同,则先转换成同一类型,然后进行运算
2、转换按数据长度增加的方向进行,以保证精度不降低。例如int型和long型运算时,先把int转成long型后在进行运算
3、所有的浮点运算都是以双精度进行的。即使仅含float单精度运算的表达式,也要先转换成double型,再做运算。
4、char型和short型参与运算时,必须先转换成int型。
5、在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型转换为左边变量的类型。如果右边表达式的数据类型长度比左边长,将丢失一部分数据,这样会降低精度。
Servlet生命周期
Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:调用destroy方法让servlet自己释放其占用的资源
抽象类和借口
抽象类
特点:
1、抽象类中可以构造方法
2、抽象类中可以存在普通属性,方法,静态属性和方法
3、如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类不一定有抽象方法
4、抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的
5、抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰
关键字使用注意:抽象类中的抽象方法(被abstract修饰)不能用private、static、synchronized、native访问修饰符修饰
接口
特点:
1、在接口中只有方法的声明,没有方法体。
2、在接口中只有常量,因为定义的变量在编译的时候都会默认加上public static final
3、在接口中的方法,永远都被public修饰
4、接口中没有构造方法,也不能实例化接口的对象(所以接口不能继承类)
5、接口可以实现多继承
6、接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类
7、接口可以继承接口,用extends
基本类型的默认值和取值范围
默认值 | 存储需求(字节) | 取值范围 | 示例 | |
---|---|---|---|---|
byte | 0 | 1 | -2^7—2^7-1 | byte b=10; |
char | ‘ \u0000′ | 2 | 0—2^16-1 | char c=’c’ ; |
short | 0 | 2 | -2^15—2^15-1 | short s=10; |
int | 0 | 4 | -2^31—2^31-1 | int i=10; |
long | 0 | 8 | -2^63—2^63-1 | long o=10L; |
float | 0.0f | 4 | -2^31—2^31-1 | float f=10.0F |
double | 0.0d | 8 | -2^63—2^63-1 | double d=10.0; |
boolean | false | 1 | true\false | boolean flag=true; |
Object类的方法
- clone()
- equals()
- finalize()
- getClass()
- hashCode()
- toString()
- wait()
- notify()\notifyAll()