简单介绍一下抽象类和接口? 1.抽象类中的抽象方法前面有默认的abstract修饰,不能用其他修饰符去修饰,原因是:抽象方法中没有方法体,是用来被继承的,所以private修饰符没有作用,static修饰符可以直接使用类名来调用访问该方法,抽象方法用static修饰就没有意义,因为可以直接用类名来调用了;synchronized是为该方法添加一个锁,如果该关键字修饰的是一个static方法,则使用的锁就是class变量的锁,如果修饰的是类方法,则使用this变量锁,但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的,锁应该归其子类所有,所以抽象类方法不能用synchronized修饰符修饰。(为啥不能用native修饰抽象方法???):因为native修饰符和abstract修饰符本身就存在一种冲突,他们都是方法的声明,只不过native是把方法实现交给了本地系统,abstract是把方法的实现交给了子类,如果同时存在,那么就不确定到底是交给了本地还是子类,到底是谁来实现这个方法。 2.接口是一个特殊的抽象类,接口中的方法全部是抽象方法abstract,但其前面的abstract可以省略,所以抽象类中的抽象方法不可以用的修饰符这里也不可以用,(还存在一个protected修饰符???)因为定义接口就是为了让所有需要的类去实现,不只是其子类,但是要用public去修饰,接口可以去继承一个已有的接口。抽象类中抽象方法和接口的使用: 1.相同点:都不能被实例化,都包含抽象方法 2.不同点:(1):接口只能包含抽象方法,抽象类可以包含普通方法 (2):接口中不能定义静态方法,抽象类可以 (3):接口中不能定义普通属性,只能定义静态常量属性,抽象类可以 (4):接口中不包含构造器,抽象类可以(不是用于创建对象而是让子类完成初始化) (5):接口可以多继承,抽象类只能单继承(只能有一个直接父类)总结:接口中的所有方法全是抽象方法只能是public abstract修饰,属性默认public static final修饰,抽象类除了包含抽象方法外和普通方法无区别。对象的序列化(为什么要使用序列化): Java平台允许我们我们在内存中创建可复用的java对象,但一般情况下,只有当jvm运行的状态下,这些对象才可能存在,即这些对象的生命周期不会比JVM的生命周期更长,但是在我们应用中,常常需要在JVM停止运行后保存(持久化)这些对象的信息,并在将来能够重新读取被保存的对象,Java的序列化就能帮我们实现这些需求。 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在使用的时候再将这些字节组成对象,对象序列化保存的是对象的‘状态’,即他的成员变量,不会关注类中的静态变量。transient是变量的修饰符,序列化时会忽略此字段,只有实现了serializable接口的才可以被序列化。对象的传输:objectinputstream和objectoutputstreamforward和redirect的分析: 1.从地址的显示来了说: forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容从哪里来,所以地址栏还是原来的地址栏。 redirect是服务端根据逻辑发送一个状态码,告诉浏览器去请求那个地址,所以地址更新。 2.从数据共享来说: forward转发页面和装发到的页面可以共享request中的数据 redirect不能共享数据 3.从应用的地方来说: forward一般用于用户登陆的时候,根据角色转发到相应的模块 redirect一般用于用户注销登陆时返回主界面和跳转到其他界面 4.效率上来说: forward高 redirect低