1、面向对象的特征
封装: 就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承: 面向对象编程 (OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:新类(子类)继承了原始类(父类)的特性,它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
多态: 是指允许不同类的对象对同一消息作出响应。允许将子类类型的指针赋值给父类类型的指针。 实现多态,有二种方式,覆盖,重载。
2、int 和 Integer 有什么区别
int 是 Java 提供的 8 种原始数据类型之一。Java 为每个原始类型提供了封装类,Integer 是 Java 为 int 提供的封装类。 int 的默认值为 0,而 Integer 的默认值为 null,是引用类型,即 Integer 可以区分出未赋值和值为 0 的区别,int 则无法表达出未赋值的情况, Java 中 int 和 Integer 关系是比较微妙的。关系如下:
1) int 是基本的数据类型;
2) Integer 是 int 的封装类;
3) int 和 Integer 都可以表示某一个数值;
4) int 和 Integer 不能够互用,因为他们两种不同的数据类型;
原始类型封装类:
booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
3、String 、StringBuffer和StringBuilder的区别
1) String类的内容一旦声明后是不可改变的,改变的只是其内存的指向,而StringBuffer类的对象内容是可以改变的。
2) 对于StringBuffer,不能像String那样直接通过赋值的方式完成对象实例化,必须通过构造方法的方式完成。
3) StringBuffer的在进行字符串处理时,不生成新的对象,在内存使用上要优于串类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入,删除等操作,使用StringBuffer要更加适合一些。
例: String对象不可修改指的是对象本身不可修改,而不是引用不可修改。
String a = “你好”;
这行代码的意思是声明一个String类型的引用变量叫做a,在内存中创建一个String对象(值为"你好"),然后把这个对象的引用赋值给变量a。
a = “hello”;
这行代码执行的效果是在内存中另外创建了一个String对象(值为"hello"),然后把这个新对象的引用赋值给变量a,而不是把原来的内存中的那个“你好”的String对象值变为“hello”。
4) StringBuilder,StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
5) StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类,然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
4、final, finally, finalize的区别
final: 修饰符(关键字),用于声明属性,方法和类,分别表示属性不可变, 方法不可覆盖,类不可继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值(亦可以用迟缓初始化),而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally: 是异常处理语句结构的一部分,表示总是执行。
finalize: 是Object类的一个方法,Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等,JVM不保证此方法总被调用。
5、重载和重写的区别
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。 Overloaded的方法是可以改变返回值的类型。
6、九大内置对象
request
response
session
application
out
page
pageContext
confit
exception
(JSP九大内置对象及其作用+四大域对象:https://my.oschina.net/u/3805464/blog/1813805)
7、抽象类和接口有什么区别
参数 | 抽象类 | 接口 |
---|---|---|
默认的方法实现 | 它可以有默认的方法实现 | 接口完全是抽象的。它根本不存在方法的实现 |
实现 | 子类使用 extends 关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 | 子类使用关键字 implements 来实现接口。它需要提供接口中所有声明的方法的实现 |
构造器 | 抽象类可以有构造器 | 接口不能有构造器 |
与正常 Java 类的区别 | 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 | 接口是完全不同的类型 |
访问修饰符 | 抽象方法可以有 public、protected 和 default 这些修饰符 | 接口方法默认修饰符是 public。你不可以使用其它修饰符。 |
main 方法 | 抽象方法可以有 main 方法并且我们可以运行它 | 接口没有 main 方法,因此我们不能运行它。 |
多继承 | 抽象方法可以继承一个类和实现多个接口 | 接口只可以继承一个或多个其它接口 |
速度 | 它比接口速度要快 | 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 |
添加新方法 | 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 | 如果你往接口中添加方法,那么你必须改变实现该接口的类。 |
8、session和cookie区别:
1) session是在服务器端保存用户信息,cookie是在客户端保存用户信息
2) session中保存的是任意对象,cookie保存的是字符串
3) session随会话结束而关闭,cookie可以长期保存在客户端硬盘上,也可以临时保存在浏览器内存中
4) cookie通常用于保存不重要的用户信息,重要的信息使用session保存
9、HTTP 请求的 GET 与 POST 方式的区别
- 根据 HTTP 规范,GET 用于信息获取,而且应该是安全的和幂等的。
- 根据 HTTP 规范,POST 表示可能修改变服务器上的资源的请求。
- 首先是 “GET 方式提交的数据最多只能是 1024 字节”,因为 GET 是通过 URL 提交数据,那么 GET 可提交的数据量就跟 URL 的长度有直接关系了。而实际上,URL 不存在参数上限的问题,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE 对 URL 长度的限制是 2083 字节(2K+35)。对于其他浏览器,如 Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。注意这是限制是整个 URL 长度,而不仅仅是你的参数值数据长度。
- POST 是没有大小限制的,HTTP 协议规范也没有进行大小限制