JSP的九大内置对象?
Request 代表了个客户端的请求信息
Response 代表的是对客户端的响应
Session 是由服务器自动创建的与用户请求相关的对象
Application 对象可将信息保存在服务器中
Exception 作用时显示异常信息
Page 对象代表JSP本身,只有在JSP页面内才是合法的。
PageContext 作用时取得任何范围的参数
Out 用于在Web浏览器内输出信息
Config 主要作用时取得服务器的配置信息
JDK1.8的新特性?
Lambda表达式,函数式接口,方法引用和构造器调用,StreamAPI,接口中的默认方法和静态方法。新时间日期API。
一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且类名必须与文件名相同。
Java中实现多态的机制是什么?
方法的重写(Overriding)和重载(Overloading),重写是父类和子类之中多态性的一种表现,重载是一个类中多态性的一种表现。
八种基本数据类型,以及他们的封装类:
八种基本数据类型:byte(1)、short(2)、int(4)、long(8)、float(4)、double(8)、boolean(1)、char(2)。
封装类分别是:Byte、Short、Integer、Long、Float、Double、Boolean、Character。
switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
由于,byte,short,char都可以隐式转换为int,所以,它们和它们的封装类型都是可以的。long和String类型都不符合switch的语法规定,所以,它们不可以。但是在jdk1.7之后,引入了java的新特性,String可以作用在swtich语句中。
final在java中的作用?
Final修饰的类叫最终类,这个类不能被继承。
Final修饰的方法不能被重写。
Final修饰的变量叫常量。常量必须初始化,初始化后的值就不能修改。
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
静态变量和实例变量的区别?
静态变量前要加static关键字,而实例变量前不加。
实例变量属于某个对象的属性,必须创建了实例对象,才能使用。静态变量是属于类,所以只要程序加载了类的字节码,静态变量就可以被使用了。
是否可以从一个静态方法内部发出对非静态方法的调用?
不可以。因为非静态方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而静态方法可以直接调用。
普通类和抽象类的区别?
普通类中不可以包含抽象方法,而抽象类中可以包含抽象方法。
抽象类不可以直接实例化,而普通类可以直接实例化。
抽象类和接口的区别?
抽象类中可以包含抽象方法,也可以不包含抽象方法,而接口中必须全部都是抽象方法。
抽象类只能继承一个,而接口可以实现很多个。
抽象类中的成员变量可以是任何类型的,而接口中的成员变量必须全部都是public static final 类型的。
Java中,是什么构造函数,什么是构造函数重载,什么是复制构造函数?
当一个新的对象被创建之后。构造器会被调用,每一个类都有构造函数。在没有给类提供构造函数的情况下,java编译器会给这个类提供一个默认的构造函数。
构造函数重载类似于方法的重载,可以给一个类提供多个构造函数,每一个构造函数都有自己唯一的参数列表。
Java不支持像C++那样复制构造函数。这个不同点是因为如果不自己写构造函数的情况下,java不会创建默认的复制构造函数
什么是值传递?什么是引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算改变了对象的副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的操作都会反映到所有对象上。
Char型变量中能否存储一个中文汉字,为什么?
因为java是以Unicode编码的,一个char占16个字节,所以放一个中文是没问题的。
重载Overload和重写Override的区别?
重载:发生在同一个类中,方法名必须相同,参数列表和返回值类型可以不同,发生在编译时期。
重写:发生在父子类中,方法名和参数列表必须相同,返回值类型必须小于等于父类。抛出的异常也要小于等于父类。
面向过程和面向对象的区别?
面向过程:面向过程性能比面向对象高,因为类调用时需要实例化开销比较大。所以当性能是唯一的考量因素时,推荐使用面向过程开发。
面向对象:因为面向对象有封装,继承,多态性的特性,更加易维护,易复用,易拓展。
jvm、jdk、jre的区别?
jvm: 是运行java字节码的虚拟机。jvm有针对不同系统的特定实现,目前使用的相同的字节码,都会得出相同的结果。
jdk:java开发工具包,它拥有JRE所拥有的一切。还有编译器和工具,可以创建和编译程序。
jre:java运行时环境,如果不创建新的程序只需要安装jre就可以了。
构造器Constructor是否可以被override(重写)?
父类的私有属性和构造方法并不能被继承,所以Constructor也就不能被重写,但是可以重载,所以可以看到一个类中有多个构造器的情况。
String 、StringBuffer 、StringBuilder的区别
String的值是不可变的,这就导致每次对String的操作都会生成新的对象,不仅效率低,而且浪费内存空间。
StringBuffer是线程安全的字符串操作类。有一定的缓冲区容量。当字符串大小没有超过容量大小时,不会分配新的容量。
StringBuilder是可变类,速度更快,但是线程不安全。
String类的常用方法有哪些?
IndexOf():返回指定字符的索引
CharAt():返回指定索引出的字符
Replace():字符串替换
Trim():去除两端空白
Split():分割字符串
GetBytes():返回byte类型数组
Lenth():返回字符串长度
toLOwerCase():将字符串转成小写字母
ToUpperCase():将字符串转成大写字母
subString():截取字符串
Equals():字符串比较
float f=3.4;是否正确?
不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型会造成精度损失,所以需要强制类型转换。float f =(float)3.4; 或者写成float f =3.4F。
short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
对于short s1 = 1; s1 = s1 + 1;因为1是int类型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
运行时异常与一般异常有什么不同?并列举几个常见的运行时异常。
运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
一般异常表示程序运行过程中可能出现的非正常状态,
Java.lang.NullPointerException 空指针异常
Java.lang.ClassNotFoundException 指定的类不存在
Java.lang.ArrayIndexOutOfBoundsException 数组下标越界
Java.lang.SQLException SQL语句异常
final,finaly,finalize的区别?
Final用于声明属性,方法和类。表示属性不可变,方法不可覆盖,类不可继承。
Finaly是异常处理语句结构的一部分。表示总是执行。
Finalize是Object中的一个方法,在垃圾收集器执行的时候可以覆盖这个方法提供资源回收,比如关闭文件等。
==与equals()的区别?
==判断的是两个对象的地址值是否相等,也就是判断两个对象是不是同一个对象。
Equals判断的是两个对象的内容是否相同。
&与&&的区别?
&是逻辑与运算,&&是短路与运算,两者的差别很大,虽然都要求左右两端的布尔值都为true,整个表达式才是true。但是如果&&左边的表达式值为false,右边的表达式会被直接短路掉,不会进行运算。
在JAVA中如何跳出当前的多重嵌套循环?
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在循环体内使用带有标号的break 语句,即可跳出外层循环。
Java面向对象的特征
封装:提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在java当中,有三种修饰符:public、private、protected。
继承:提供了代码的重用性,可以在不修改类的情况下,给现存的类添加新的特性。
多态:给不同底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。
抽象:抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java支持创建只暴露接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。
请说出作用域public,protected,默认的以及private的区别
当前类 同一包 子孙类 其他包
public √ √ √ √
protected √ √ √ ×
默认的 √ √ × ×
private √ × × × 斜体样式