关闭

Java 常见面试题

480人阅读 评论(0) 收藏 举报

26、空字符串("")和null的区别?
答:空字符串是 String类的一个对象,而null是指一个引用变量没有引用对象,在值为null的引用变量上调用方法或变量,将会导致 NullPointerException。通过以下代码来验证变量x是否为nullx == null,通过"".equals(x)来验证x是否为空字符串。

25、静态变量和实例变量的区别?
答:静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。
     
实例变量属于该类的对象,必须产生该类对象,才能调用实例变量。

24、当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对?
答:对。但是在Java中建议,当x.equals(y)等于true时,x.hashCode()y.hashCode()也相等。

23、列举几个常见的RuntimeException的子类?
答:ArithmeticExceptionNullPointerExceptionIndexOutOfBoundsExceptionClassCastExceptionArrayStoreException

22、Java有没有goto?
答:Java没有使用goto关键字,但它是Java的保留字。

21、在Java中char类型的变量占用几个字节?char类型的变量能不能存储一个中文汉字?
答:在Javachar类型的变量占用2个字节,char类型变量采用Unicode编码。可以存储一个汉字,但不是所有的汉字都能存储,你想想,汉字至少10万个,而Unicode占用两个字节,最多能存储6万多个。

20、有如下代码:
try {
    代码1
    return 1;
}finally{
    代码2
    return 2;
}

问,代码2是否会被执行?若会被执行,是try里的return语句先执行还是finally里的代码先执行?最后该代码片段的返回值是1还是2?
答:代码2会被执行,因为finally里的代码总会被执行。
      finally里的代码会在return 1;之后被执行。
      既然finally里的代码会在return1;之后被执行,所以return 2;覆盖return 1;返回2

19、有如下方法的定义:
public static int getNumber(int a){
  int b = 0;
  try {
    b = 10/a;
    return b;
  } catch (Exception ex) {
    b = 100;
    return b;
  }finally{
    b = 1000;
    return b;
  }
}

在main方法中调用以上方法,如下:
System.out.println(getNumber(10));
System.out.println(getNumber(0));
结果是多少?
答:1000 1000

18、有如下方法的定义:
public static int getNumber(int a){
  int b = 0;
  try {
    b = 10/a;
    return b;
  } catch (Exception ex) {
    b = 100;
    return b;
  }
}

在main方法中调用以上方法,如下:
System.out.println(getNumber(10));
System.out.println(getNumber(0));
结果是多少?
答:1 100

17、用最有效率的方法算出2乘以8等於几?
答:用位运算,2<<3

16、switch能否作用在byte上,能否作用在long上,能否作用在String上?
答:能作用在byte上,不能作用在longString上。

15、Math.round(11.5)等于多少? Math.round(-11.5)等于多少? Math.round(-11.7)等于多少? Math.round(11.3)等于多少?
答:Math.round(11.3) 等于 11
      Math.round(11.5)
等于 12
     Math.round(-11.5) 等于 -11
     Math.round(-11.7) 等于 -12
速记:距离11.3最近的整数,是11。距离11.5最近的整数,有两个11和12,取大。距离-11.7最近的整数,是-12(别告诉我是-11)。距离-11.5最近的整数,有两个-11和-12,取大-11(也别和我说-12比-11大)。

14、解释一下&和&&的区别?
答:&&&都可以作为逻辑运算符,但还是有区别的,&&是短路与。单独运行以下两行代码:
System.out.println(false & (1/0 == 0)); 
抛出异常
System.out.println(false && (1/0 == 0));
打印出false
&
作为逻辑运算符时,即使第一个操作符是false,那么它仍然会计算第二个操作符。&&短路与,如果第一个操作符为false,那么它不会再去计算第二个操作符。另外&还是一个按位与运算符,请看以下代码:
System.out.println(5 & 4); 打印出4,结果怎样计算呢?将它们转换成二进制数据,一目了然。
00000101 & 00000100 = 00000100


13、解释一下int和Integer有什么区别?
答:int 是原始数据类型,而Integer是引用数据类型,是int的包装类。Java中的八种原始数据类型都有对应的包装类,boolean-- Boolean char--Character  byte--Byte  short--Short  long--Long float--Float  double--DoubleintInteger是可以相互转换的如:
int a = 1; Integer in = new Integer(a);
Integer in = new Integer(10); int i = in.intValue();
JDK5.0支持自动包装和自动解包,以下代码与以上完成相同的功能:
int a = 1; Integer b = a;
Integer c= newInteger(10); int d = c;

12、介绍什么是JDK?什么是JRE?
答:有关JDK的介绍,点此链接参见Java EE常见面试题第1题。
JREJava的运行环境,不包含编译、调试环境。如果你只是运行一个Java程序,那么安装JRE就够用了。

11、一个Java源文件中是否可以定义多个类?接口和类是否可以定义在一个源文件中?
答:一个源文件中可以定义多个类,但只能有一个类是public。接口和类也可以定义在一个源文件中,同样也只能有一个是public

10、String、StringBuffer、StringBuilder有什么区别?
答:String 类代表字符串。Java程序中的所有字符串字面值(如 "abc")都是String类的对象。字符串是常量;它们的值在创建之后不能改变。所以可以共享它们。StringBuffer是字符串缓存区,它的内容可以被修改,长度也可以改变,StringBuffer类是线程安全的,也就是说多个线程可以安全的访问StringBuffer对象。StringBuilderStringBuffer类似,都是字符串缓冲区,但StringBuilder不是线程安全的,如果你只是在单线程中使用字符串缓冲区,那么StringBuilder的效率会更高些。值得注意的是StringBuilder是在JDK1.5版本中增加的。以前版本的JDK不能使用该类。

9、shorts1 = 1;s1 = s1 + 1;是否有错?short s1 = 1;s1 += 1;是否有错?
答:short s1 = 1;s1 = s1 + 1;有错误,s1 + 1int类型,不能赋值给short类型。shorts1 = 1;s1 += 1;正确。

8、接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类(非抽象类)?一个类是否可以继承多个类?
答:接口可以继承接口,但是只能继承一个。
    
抽象类可以实现接口。
    
抽象类可以继承实体类。
    
一个类不可以继承多个类,Java只允许单一继承,可以实现多个接口。

7、方法重载与方法重写

1.重写必须继承,重载不用。

2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同

3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。

4.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常


7、一个类的构造方法是否可以被重载(overloading),是否可以被子类重写(overriding)?
答:构造方法可以被重载,但是构造方法不能被重写,子类也不能继承到父类的构造方法。

6、如何防止一个类被其它类继承?
答:定义一个类时将该类声明为final class
   
或者将此类的所有构造方位声明为private

5、如何获得静态数组的长度?如何获得字符串的长度?
答:使用数组变量的length属性。使用字符串变量的length()方法。

4、谈一谈final关键字的作用?
答:final class    表示此类不允许有子类。
    final virable  表示一个常量。
    final method   表示一个方法不能被重写。

3、String类是否可以被继承?
答:String 类是final类,不可以被继承。

2、Java语言中有哪些基本数据类型,String是不是基本数据类型?
答:有八种基本数据类型(有的资料也称为原始数据类型),分别是byte short int long float double booleancharString不是基本数据类型,是引用数据类型。

1、面向对象编程的三个基本特性是什么?
答:封装、继承和多态。

 

5、介绍一下数据库连接池的优点和原理?
答:作用:提高程序的运行效率,能够支持更多的用户。方便监视连接的数量和使用情况。原理:在应用程序启动时建立一定数量的连接,并将这些连接通过某种机制组成一个池,当应用程序需要连接时可以动态的从池中获取或向池中释放连接。

4、web.xml文件的作用是什么?
答:web.xml文件是WEB应用程序配置文件,存放了JSP、Servlet、Listener、Filter、错误页面、安全约束等信息。

3、JSP页面中errorPage的作用是什么?
答:可以给一个页面定义异常页面,这样当该页面发生异常时,就会调用异常页面,有两种方式定义异常页面:
在JSP页面中通过<%@ page errorPage="error.jsp"%>指令。
在web.xml文件中通过<error-page>标签。

2、描述一下JSP和Servlet的相同点和不同点?
答:相同点:都能产生动态网页,另外从技术上讲JSP仍然是Servlet。
不同点:它们的侧重点是不同的,JSP更侧重于数据的显示,Servlet侧重于控制。

1、介绍什么是Java SE、Java EE、Java ME
答:JDK(Java Develpment Kit)是Java开发工具包,包括Java程序的编译、调试、运行及类库,至今发布的最高版本为6.0,Sun公司将Java应用分为3个领域:
标准版:Java SE(Java StandardEdition)
企业版:Java EE(Java Enterprise Editon)
移动版:Java ME(Java Mobile Edition)
注:在JDK5.0前,称为J2SE、J2EE、J2ME。

我们可以从类库的角度来做简单的区分:
Java SE包含基本的类库,如java.lang、java.io、javax.swing等。刚开始学习Java时我们用的就是Java SE版本。
Java EE包含开发分布式应用程序的类库,如:javax.servlet、javax.mail、javax.ejb等。当我们学习了Web应用程序、EJB等,用的就是Java EE版本。JavaEE比较复杂,包含了许多技术,Java SE是基础。
Java ME也包含了一些类库,没有做过相关开发,不大清楚。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1961488次
    • 积分:16301
    • 等级:
    • 排名:第674名
    • 原创:206篇
    • 转载:212篇
    • 译文:0篇
    • 评论:143条
    最新评论