当前位置:文档之家› Java基础面试题(2012完整版)

Java基础面试题(2012完整版)

Java基础面试题(2012完整版)
Java基础面试题(2012完整版)

第一部分 Java的类

1.请解释Java语言的跨平台特性。

解析:虽然不知道什么是跨平台也可以使用Java语言进行编程,但是对于一个Java编程员来说,理解跨平台特性能够更深入掌握Java语言,所以企业中往往要求应聘者至少理解这个特性。

参考答案:Java的跨平台特性也被称为可移植性、平台无关性,或者一次编写处处运行。

他的意思就是如果用Java语言编写一个应用,那么就可以在不同平台上运行,而不需要为不同平台单独运行开发。之所以能实现跨平台的特性。主要得益于Java虚拟机(JVM),JVM 解释器在运行Java应用时根据当前平台进行解释,解释成符合当前平台规范的机器码,所以可以实现同样的应用在不同平台上都能运行。

2.请列举JAVA语言的主要特点

解析:了解一门语言,往往从熟悉该语言的主要特点开始入手,所以企业也常常通过应聘者对JAVA语言特点的掌握程度而判断其语言基础是否扎实。

参考答案:JAVA语言有很多特点,主要包括①跨平台性:一个应用可以不经过修改直接运行到不同的平台上。②面向对象:JAVA语言是一门面向对面的语言,可以使用对象的属性和行为,可以使用面向对象的思想进行分析设计,并实现整个应用。③解释执行JAVA应用时,JVM中的解释器将解释类文件,生成符合当前平台的字节码。④自动回收:JAVA应用中的垃圾回收是自动进行的,JVM中的后台线程将监视内存中数据的使用,当内存中的数据不再被引用时,将被作为垃圾回收,而不需要程序员动手回收。

3.请说明一个JAVA类中主要包含哪几个元素?并说明每种元素的作用。

解析:无论简单还是复杂的JAVA应用,都是由若干个类组成,所以类是JAVA应用的组成单位。了解一个类中包含的主要元素能够对类有一个清晰的认识。一个类中往往会有五种元素,即属性、方法、构造方法、块以及内部类、其实块和内部类比较少见。

参考答案:JAVA类中主要包含属性、方法、构造方法、块以及内部类。属性用来定义对象的数据;方法用来定义对象的行为;构造方法可以用来创建对象;块能够用来在类加载时执行操作或者在每次实例化前执行通用操作;内部类作为类的一个成员存在,能够访问外部类的属性和方法。

4、请说明构造方法的作用和特征

解析:类是对象的模板,使用类往往都需要首先对类进行实例化,即创建对象。要创建对象必须使用new关键字调用构造方法(constructor)才能完成,构造方法中往往对属性进行实例化,也可以实现其他必要的功能,如读取属性文件等。构造方法有独特的特征:名字必须与类名相同且大小写敏感,而且构造方法不能声明返回值,这两个特征缺一不可。使用Eclipse工具时,可以使用菜单Generate Constructor自动生成不同的构造方法。

参考答案:构造方法的作用是用来创建对象,使用new关键字调用。构造方法的名字必须与类的名字相同,并且大小写敏感,同时构造方法不能声明返回值类型,可以使用任意一种访问修饰符,但是不能使用其他修饰符进行修饰,如static、final、abstract等修饰符都可以修饰构造方法。

5、什么事方法重载(overload)?

解析:如果一个类的某个行为,会有不同的算法和逻辑,例如,Math类的计算绝对值的方法,既可以计算int类型数值的绝对值,也可以计算double类型数值的绝对值。这种情况下,每种类型都定义一个不同的方法名,如abInt、absDouble,那么类的可读性就较差,使用时,必须熟悉处理每种类型参数所对应的方法名。然而,如果使用同一个方法名,而使用不同的形式参数来区别这些方法,那么就具有很好的可读性,如abs(int i)、abs(double

d)等。可读性强的代码是企业对开发人员的基本要求,方法重载能够使得代码有很好的可读性。

参考答案:方法重载指的是在一个类中可以声明多个相同名字的方法,而方法的形式参数有区别。调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法。

6、请列举Java语言中的权限访问修饰符,并说明每种权限的含义。

解析:正确使用权限访问修饰符,能够有效控制类以及类成员的安全性,Java语言中有四种访问修饰符,包括public、同包、protected以及private,一般情况下,应用中的类多是public权限,属性多是private权限,方法多是public权限。

参考答案:Java语言中有四种权限访问修饰符,即public、protected、同包以及private,public表示公共权限,即任何包中都可以访问:protected表示受保护权限,即同包中可以访问,同包中的子类可以访问:同包权限是默认权限,即不显示指明权限修饰符的时候就是同包权限,表示只有同包中可以访问:private是私有权限,表示只能在本类中访问。

7、请列举Java语言中的八种基本数据类型,并说明每种数据类型的含义及长度。

解析:数据类型在任何一门编程语言中都是很重要的知识点,属性、方法参数、方法返回值要指定各自的数据类型。Java语言虽然是一门面向对象的语言。但是也定义了基本数据类型,基本数据类型可以直接赋值,不需要使用new关键字创建,可以直接使用运算符进行运算,编程中经常被使用,而且Java语言中的基本数据类型的长度固定,不会随着平台的不同而不同。

参考答案:Java语言的八种基本数据类型有:byte字节型,8位长度:short 短整型,16位长度,int整型,32位长度:long长整型,64位长度:float单精度浮点型。32位长度:double双精度浮点型,64位长度:char字符型,16位长度:boolean型,表示逻辑值,有true和false两个值,分别表示真和假

8.什么叫引用类型,引用类型和基本数据类型有什么区别?

解析:很多初级程序员都能够理解int i=20;中的int是一种类型,称为整型。而对于类似Employee e=new Employee();这样表达式中的Employee却感觉无所适从。其实,任何一个类都是一种类型,如Employee就是一种类型,可以说变量e的类型就是Employee。Java语言中将类的类型称为引用类型,即reference type。可以说,除了八种基本数据类型之外的类型都是引用类型,包括API中所有的类、自定义的所有类,也包括数组。引用类型和基本数据类型的直观区别就是引用类型的变量需要使用new调用构造方法来赋值,而基本数据类型可以直接使用“=”号赋值。但是,引用类型中的String比较特殊,既可以使用new关键字赋值,也可以直接使用“=”赋值,一般情况下都使用“=”直接赋值。

参考答案:Java语言中除了基本数据类型之外的类型,都称为引用类型。引用类型就是类的类型,所有的对象都是引用类型,包括数组对象。引用类型必须使用new调用构造方法进行赋值,引用类型的变量拥有自己的属性和方法,可以使用圆点调用自己的属性和方法。基本数据类型直接使用=号进行赋值,且没有自己的属性和方法,往往都在声明属性或方法时使用。

9.对于String对象,可以使用“=”赋值,也可以使用new关键字赋值,两种方式有什么区别?

解析:String类型是实际工作中经常使用到的类型,从数据类型上划分,String是一个引用类型,是API中定义的一个类。所以String类型的对象可以使用new创建,例如String name=new String(“ETC”);为变量name进行赋值,值为“ETC”。然而,String类比起其他类

有些特殊,可以使用“=”直接赋值,如String name=“ETC”,也是为变量name进行赋值,值为“ETC”。这两种赋值方式是有差别的,使用new赋值,永远都是创建一个新对象,在

新的内存空间初始化了字符串的值;而使用“=”赋值,不会每次都初始化新的字符串,而是从一个“字符串实例池”中去查找有没有要赋值的字符串,如有则直接引用;如不存在,则初始化一个字符串,并放入“字符串实例池”。在实际编程中,往往使用“=”好对String 类型变量进行赋值。

参考答案:使用“=”赋值不一定每次都创建一个新的字符串,而是从“字符串实例池”中查找字符串。使用new进行赋值,则每次都创建一个新的字符串。

10.String类是一个“不可变类”,请解释“不可变类”的含义。

解析:String类是一个不可变类,即immutable类。所谓不可变,意思是当一个字符串被初始化后,它的值就不会被改变。例如,String s=new String(“hello”)为将初始化一个值为hello的字符串,如果调用s.toUpperCase()看起来是把hello变为大写的HELLO,然而事实上并不会把已有的hello变为HELLO,而是在新的空间初始化一个HELLO字符串。也正因为有这种不可变性,所以才能支持“字符串实例池”的使用。

参考答案:所谓的不可变类,就是当字符串初始化后,就不能够被改变。

11.String类和StringBuffer类有什么区别?

解析:String类是不可变类,字符串一旦初始化后,就不能被改变。而StringBuffer类是可变类,字符串值可以呗改变。常常在实际应用中看到累死这样的代码:String s=new(“hello”);s+=”world”,这两句代码首先创建一个字符hello,然后将world追加到hello结尾并重新赋值给变量s。然后,这个过程实际上是这样的:首先创建一个StringBuffer对象,然后用StringBuffer类的append 方法追加字符串,最后对StringBuffer对象调用toString方法合成字符串返回。可见,使用+号连接字符串时,本质上是使用了可变的StringBuffer类,经变动肯定性能效率受到影响,所以建议需要追加字符串时,可以考虑直接使用StringBuffer类。参考答案:String类是不可变类,即字符串值一旦初始化后就不可能改变。StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值。

12.StringBuffer和StringBuilder类有什么区别?

解析: StringBuffer是JDK5中增加的一个新类,在以前版本中不存在这个类。StringBuilder中的方法和StringBuffer中的方法基本相同,但是StringBuffer是线程安全的,而StringBuilder不是线程安全的,因此在不考虑同步的情况下,StringBuilder有更好的性能。

参考答案:StringBuffer是线程安全的字符串缓冲,而StringBuilder不是线程安全的。

13.包装器类型包括哪些类,有什么作用?

解析:初级程序员常常对float和Float或者double和Double感到混淆。在Java语言中,有八中基本数据类型,即byte、int、long、float、double、char、boolean。对应这八种基本数据类型,API中定义了八个类,能把这些基本类型转换成引用类型,分别是Byte、Short、Int、Long、Double、Character、Boolean。这八个类被统称为包装器类。JDK5之后,包装器类和基本数据类型之间可以直接转换,称为自动的装箱拆箱(boxing/unboxing)。例如integer it=3;it++;虽然写法上可以像使用基本数据类型一样使用包装器类型,但是本质上依**行了类似it= new Integer(3)的转换,因此,不要轻易使用包装器类的自动装箱拆箱,以优化的性能。能够使用基本类型就使用基本类型。

参考答案:包装类器包括Byte、Short、Integer、Long、Float、Double、Character、Boolean等类,主要用来对byte、short、integer、long、float、double、character、boolean这八种基本数据类型进行包装,使其称为引用类型。

14. 请说明Java语言中的值传递规则。

解析:值传递时编写应用时不可避免的操作。例如某方法声明形式是public void f(int x){},写方法是,必须为其传递一个int类型的实际参数,如f(10)。又如public void g(Employee)。那么使用该方法时,必须为其传递一个Employee类型的实际参数,例如g(new Employee())。所以,对于初级程序员来说,了解Java 语言的值传递规则非常重要。Java语言是本类型传递的值,例如f(10),仅仅把10复制给形式参数x,是值的拷贝。而引用类的传递时引用,即虚地址,例如g(new Employee())是把实际参数的虚地址传递给形式参

数e,也就是说实际参数和形式参数的虚地址相同,物理上是同一个对象。

参考答案:基本数据类型传递的是值,引用类型传递的是引用,即虚地址。

15.使用static修饰属性或方法后,属性和方法有什么特征?

解析:static修饰符是一个非常常见并重要的修饰符,称为静态。静态不是指值不能改变,很多初级程序员容易容易望文生义的地方。Static常常用来修饰类的属性或者方法。当一个属性或者方法和对象没有关系,或者说是任何对象共享的时候,那么就应该用static进行修饰。列如某类中的计数器,用来计算实例的个数。那么这个计数器属性就是所有对象共享的属性,就应该用static修饰。又例如Math类中的abs(int)方法,用来返回参数的绝对值,这个方法和Math类的对象没有关系,Math类对象可以共享这个方法,那么这个方法就可以用static修饰。程序员必须深入理解static修饰符的使用。

参考答案:static修饰属性或方法后,属性和方法不在属于某个特定的对象,而是所有共享,也可以说是static成员不依赖某个对象,在类加载时就被初始化。Static修饰的属性或方法,可以直接使用类名调用,而不用先实例化对象再调用。

16.使用final修饰属性后,属性有什么特征?

解析:属性可以是变量也可以是常量,如果是常量,就需要使用final修饰。如果使用final修饰了某个属性,那么该属性值一旦被赋值,就不能被修改,实际中常常有这个样的码:private static final int ERROR=0;也就是说,常常会生命静态的常量。静态常量的命名规范非常特殊,往往都是用大写字母,如果包含多个单词,每个单词之间使用下划线连接。静态常量的意思是,该类所有的对象都拥有一个不变的常量ERROR,作为0.API中很多类都定义了很多的静态常量,使用时直接使用类名调用即可。

参考答案:fianl修饰属性后,属性就成为一个常量。常量只要被赋值,就不能被改变。

17.请说明操作符==的作用。

解析:实际编程中,==是非常常用的操作符。很多初级程序员会使用这样的代码if(s==”save”0{},结果会发现,即使当字符串s的值为save时,if条件依然不能被执行。是==在比较引用类型时,比较的是两个对象的虚地址,而不是内容。要比较两个对象的内容是否相同,往往需要使用equal方法,例如if(s.equals(“save”)){}。==比较基本类型时,将比值的二进制是否相等,例如(x==0.5){}。值得注意的是,与空指针null值进行比较,往往用==进行,例如if(s==null||s.equals(“”)),表示如果字符串是空指针或者空串。

参考答案:==可以用来比较基本类型或者引用类型。比较基本类型时,==用来比较二进制的值,比较引用类型时,用来比较对象的虚地址。

18请说明&&与&的区别和联系

解析:实际编程中,常常需要使用“与”或者“或”的逻辑。其中&&和&存在一定区别&&可能发生各路问题,例如if(s!=null&&s.length()==6)中,如果要的值为null,那么第一表达式的值为false,返回值肯定是false,不会计算第二个表达式的值,这就是短路。然而使用&,例如if(s!=null&s.length()==6),假设s的值为,null,返回值肯定是false,但是会判断第二个表达式的值,将发生空指针异常。实际工作中,经常使用&&操作符。

参考答案:&&会发生短路问题,当第一个表达式的值为false时,将直接返回结果为false而不会判断第二个表达式的值。而&不会发生短路问题,即使第一个表达式的值是false,会判断第二个表达式的值。19.请列举Java语言中的几种位运算符,并说明位运算符的作用。

解析:位运算符是对二进制数值进行运算,左移一位相当于乘2运算,右移一位相当运算。位移运算符效率较高,往往在游戏开发中经常使用。

参考答案:java语言中有三种位移运算符,分别是<<;左移运算符,左移1位相当于乘2.>>;有符号右移,右移一位相当于除2;>>>;无符号右移,忽略符号位,空位都以0补齐。

20. break语句能在什么场景使用。

解析:break语句表示中断,不能够随便使用,只能在循环语句中或者switch语句中使用。初级工程师往往容易将break和return混淆。Return是可以再方法体中任意位置使用,可以带值返回页可以不带值返回,执行return语句后,该方法将返回,也就是方法执行结束。而break只能在循环体中或者switch

的case语句中使用,不能随意使用。

参考答案:break语句可以再循环体中使用,也可以在switch的case语句中使用。

21.for循环中的break语句和continue语句的使用。

解析:很多时候,循环是为了查找某些符合条件的数据,只要找到就没有必要继续下去,称为中断循环,break语句就可以用来中断循环。而continue语句恰恰相反,是用来继续下一次循环。值得注意的是,java语言中可以再循环前面加标号,即label,然后可以使用break或continue中断或继续标号的循环。

参考答案:break可以用来中断循环,continue可以用来继续下一次循环。

第二部分类之间的关系

1.用代码表示A类关联B类的情况。

解析:一个Java应用中不可能只有一个类,所以了解类之间的关系对程序员来说非常重要。关联关系是最常用的一种关系,如果说A关联B,那么就是B作为A的属性存在。关联关系是一种复用的策略,即A 关联B的时候,A可以复用B的行为。

参考答案:

Class A{

Private B b;

Public void setB(B b){

This.b=b;

}

}

2.请说明Java语言中数组的基本概念,数组的作用,以及数组的声明创建方式。

解析:数组时任何一门语言里都常用的类型,Java语言也不例外。程序员了解数组,不能仅仅从语法上了解,而应该深入理解数组的作用。数组可以用来存储类型相同的元素,作为一种数据容器使用。和数组类似的概念是集合,也能作为数据容器使用。

参考答案:数组时相同元素的集合,作为数据容器使用。声明创建一个int型数组,如下所示:int[]x=new int[3];其中3是数组的长度,该数组能够存储3个int型变量。

3.使用代码,创建一个长度为5的String型数组,并使用增强for循环迭代数组打印出数组中的元素。

解析:增强for循环是JDK5增加的特性,可以方便地遍历数组或集合。程序员需要了解的是,如果JDK 版本低于5.0,则不支持这个功能。另外,并不是说有了增强for循环后,传统的for循环就不被使用,增强for循环只能用来方便地遍历数组和集合,其他情况下还要使用传统的for循环。

参考答案:

String[] sArray = new String[5];

For(String s:sArray){

System.out.println(s);

}

4.说明Arrays类的作用。

解析:在实际工作中,常常需要对数组中的元素进行处理,例如排序等。初级程序员往往选择自己编写算法实现。实际上APV中提供了Arrays类,该类中定义了很多和数组有关的工具方法,能够方便地处理数组,是程序员必须掌握的类。

参考答案:Arrays类是java.util包中的一个类,类中所有的方法都是static方法,这些方法都是数组对

象的工具方法,能够对数组进行处理,如sort方法可以对数组元素进行排序

5.请使用简单代码展示A类依赖B类的含义。

解析:对于程序员来说,了解类和类之间的关系非常必要。依赖关系指的是一种瞬间的关系。如果A 依赖B,一般指的是A类的某个行为,需要B类对象作为参数。

参考答案:

Class A{

Public void f(B b)

}

6.请说明依赖关系和关联关系的区别。

解析:关联关系和依赖关系是非常常见的两种关系,二者的区别也很明显,程序员了解二者的区别能够更深入的理解面向对象的思想。

参考答案:依赖关系是一种瞬时关系,A依赖B,指的是A的某个行为的参数是B的类型,也就是说,A要想实现这个行为,必须依赖B的实例,A关联B,是一种长久的关系。?的是B作为A的属性存在,只要实例化一个A的对象,就会为这个A的对象实例化一个B的对象,作为它的属性使用,可以在A中任何需要使用B的地方使用B。

7.继承有什么作用,Java语言中的继承有什么特点?

解析:继承是面向对象语言的一大特征,主要作用是重复使用,子类通过继承父类,能够重复使用父类的属性和方法。指的注意的是,有两个策略都可使实现重复使用,一个是关联,一个是继承,实际编程中,关联用的更多。因为子类继承父类后,相当于父类中的细节将暴露给子类。初级程序员一定不要随意使用继承,避免滥用继承。

参考答案:继承主要为了能够重复使用父类中的成员。Java语言中的继承是单继承,也就是说一个类最多只能继承一个父类。

8、什么是方法覆盖(override)?并说明方法覆盖与方法重载(overioad)的区别。

解析:方法覆盖是一个非常重要的概念,是多态性的一个体现。方法覆盖发生再去爱继承关系中,当子类需要修改从父类继承到某个方法的方法体时,就可以声明一个父类同名同参数同返回值的方法,这样就对父类中的那个方法进行了覆盖,子类对象调用该方法时将自动绑定到子类中的方法。API中很多类中都进行了方法覆盖,如String类中的toString方法,就覆盖了父类Object中的toString方法。

参考答案:覆盖是发生在继承关系的子类中,当子类要修改从父类继承的某个方法的方法体时,就可以在子类中声明一个与父类同名、同参数并且同返回值类型的方法,这就是方法覆盖。而重载与继承没有关系,指的是在一个类中可以同时声明多个同名但不同参数的方法,称为重载。

9、请说明什么是抽象类?抽象类有什么作用?

解析:初级程序员往往不需要自己创建抽象类,但是必须了解抽象类的概念,并且会使用抽象类。抽象类往往是设计阶段的概念,用来定义多个子类的模板,一些具体的实现可以在子类中进行。初级程序员往往需要会创建子类继承抽象类,实现抽象类中的方法。在API 中,抽象类比比皆是。

参考答案:抽象类是不能实例化的类,使用abstract修饰。抽象类往往用来做父类使用,定义一些子类的共同属性或行为。

10、请说明抽象方法的含义,并说明抽象类与抽象方法的关系。

解析:抽象方法都是在抽象类中定义的,是用来定义子类what to do的策略,而具体的how to do都在子类中实现。

参考答案:抽象方法是没有办法体的方法,使用abstract修饰。抽象类中不一定有抽象

方法,但是有抽象方法的类一定是抽象类。

11、super关键字的两种用法。

解析:使用一些IDE生成代码时,常常会在构造方法中见到super这个关键字。顾名思义,super是和父类有关的一个关键字,熟悉super的用法对熟练掌握继承很有必要。

参考答案:如super():表示调用父类中的每一参考的构造方法:又如super(10);表示调用父类中的具有一个整型参数的构造方法。第二种用法是在子类中调用父类中的成员,如super.f();意思是调用父类中的f()方法。

12、final类与final方法有什么作用?

解析:final修饰符是一个用途非常广泛的修饰符,可以修饰类,方法,以及属性。

参考答案:final类是不能够被继承的类,称为终极类,如String类就是final类,不能有子类。final修饰方法后,是终极方法,不能被子类覆盖,但是可以被子类继承使用。

13.什么是多态函数?多态函数有什么用?

解析:多态性是面向对象语言的的一大特征,重载,覆盖,多态参数是多态性的一种表现形式。多态参数处处可见,例如某方法f(Object o),这个方法的参数类型是Object,使用该方法时,只要传递给f的单数类型是Object即可。也就是说,Object类的任意参数可以传递给f方法。这就是多态参数。意思是对外形式都一样,都是Object,具体实现可以是这个类型的任意子类,这就使得该方法比较灵活,Object类即使有了新的子类,却不需要修改,就能直接作用到那个子类。了解多态参数的含义和使用,对于Java的使用特别关键。

参考答案:多态函数就是参数的类型是某个父类类型,具体为这个参数赋值的不同以使用该父类的任意子类的对象。使用多态参数,可以使程序的扩展性更好,即使%%%%的子类方法不需要任何修改,就能接受子类类型进行处理。

14.Object类有什么特点?

解析:Object类是一个非常重要的类,是所有类的父类,包括数组在内,也就是对一个Java类,不管是API中定义的,还是自定义的类,都直接或间接的继承了Object类。所以,如果有一个方法f(Object o),那么可以传递给这个方法任意一个类的对象,包括%%%%。因为所有对象都可以说是Object类型。

参考答案:Object类是多有类的直接或间接的父类。

15.Object类中的toString方法有什么用?

解析:Object类是所有类的父类,所以Object类中的方法是所有类都默认具备的。类中的toString方法可以将任意一个对象作为字符串返回,默认的格式是“类名@内地%%%%”API中很多类已经覆盖了这个方法,将其返回值的格式进行了自定义,如String类中的方法已经覆盖为返回字符串的字符序列。toString方法在很多场合被自动调用,例如%%%一个对象时,就自动调用该对象的toString 方法,如果需要修改返回字符串的格式,%%%另外类中的覆盖toString方法。

参考答案:toString方法可以把对象作为字符串返回。

16.Object类中的equals方法和hashCode方法。

解析:在Object类中,equals方法比较对象的引用值,也就是只有物理上是同一对象的两个引用,在使用equals方法返回true。hashCode方法返回一个对象的内在地址的十六进制值。由于Object类是所有类的父类,所以任意类中都拥有这两个方法,并都可以进行覆盖。尤其是操作Set,Map对象时集合元素类的equals方法和hashCode方法非常必要,因为Set和Map判断元素是否重%%%是依靠这两个方法进行。一般的原则是:如果存在X和Y两个对象,调用X.equals(Y)相同时,那么调用hashCode方法返回值也应该相同;如果X.equals(Y)返回false时,那么调用hashCode方法返回值可能相同,也可能不同。值得注意的是,只要你覆盖了equals方法,一定%%%则覆盖hashCode 方法。在实际工作中,很多IDE环境都支持覆盖equals和hashCode 方法。

参考答案:Oject类中的equals方法用来比较两个引用值,hashCode用来返回引用的内地址的十六进制数值。在Set以及Map集合中,判断两个元素是否重复时,往往需要使用这两个方法。这两个方法往往被子类覆盖,覆盖的规则是:如果存在x和y两个对象,调用x.equals(y)返回true时,那么调用hashCode 方法的返回值也该相同;如果x.equals(y)返回false时,那么调用hashCode方法返回的值可能相同,也可能不同。

17.接口有什么特点,与抽象类有什么区别?

解析:接近欧的概念是一个设计层面的概念,初级程序员往往不会自己定义接口,但是会使用接口,理解接口的概念非常必要。接口定义了实现类的规范,即what to do的部分,所有实现类必须按照这个规范进行实现。

参考答案:接口的特点是不能定义变量,而且所有方法都是抽象方法。而抽象类中可以有变量,也不强制必须有抽象方法。

18.类继承父类与类实现接口,有什么区别?

解析:类继承父类与类实现接口,本质上其实是一样的。都是将父类或者接口作为模板,在这个模板上进行扩展或者重写。程序员在实际编程中,常常需要继承父类或者实现接口。

参考答案:类继承父类只是单继承,也就是一个子类最多只有一个父类;而类实现接口可以多实现,就是一个子类可以同时实现多个接口,并覆盖所有接口中的所有抽象方法。

https://www.doczj.com/doc/aa16154991.html,parable接口有什么作用

解析:comparable接口是在实际编程中常常使用的接口,该接口定义了comareTo(Object o)方法,用来定义对象的比较逻辑。这个接口常常在其他API中会强制使用,例如Arrays类的sort(Object[])方法,就强制数组元素必须实现Comparable接口,与这个接口类似的另外一个接口是Comparator。

参考答案:Comparable接口定义了compareTo(Object o)方法,可以用来实现对象的比较逻辑,这个接口常常在其他API中强制使用,用来规范对象的比较逻辑

第三部分异常处理

1 .什么是异常?异常和错误有什么区别?

解析:异常处理是面向对象语言比起过程式语言的一大改进。对于Java程序员来说,必须了解异常处理,才能顺利编程。

参考答案:异常是一些不正常的事件,能够中断程序的正常执行例如才除0计算就是异常。和错误不同,异常是可以被处理的,而错误往往是不能够处理的,如内存溢出错误。

2 .nullPointException是什么异常?什么情况发生该异常?

解析:程序员必须能够了解常见的异常的发生原因,并能够处理。NullPointerException就是特别常见的运行期异常。

参考答案:NullPointerExcepiton是空指针异常,当一个引用没哟被赋值,就是一null值如

果这种情况下,使用该引用调用其属性或者方法,就会发生NullPointerException异常。

3.说明try/catch/finally语句块的作用

解析:编写Java程序,避免不了需要处理异常。Java中处理异常使用try/catch/finally来实现。尤其其中的finally语句非常值得程序员关注,可以用来执行必须实现的功能,例如数据库的链接等操作。

参考答案:try语句块用来包含可能发生异常的语句,catch块用来捕获异常,finally用来包含必须执行的语句。

4.如何使用语句抛出异常,抛出异常后如何处理?

解析:某些业务逻辑的非正常事件流,可以使用抛出异常来标记。抛出的异常必须是有意义的异常类型,建议不要使用API中的标准异常类,避免混淆。

参考答案:使用throw语句就可以抛出异常,如throw new XXXException()。抛出异常时一般情况下会在声明方法处使用throws声明该类型的异常,调用该方法是编译器将提示异常。

5. throws 关键字和throw 关键字有什么区别和联系?

解析:throws和throw是异常处理时两个常见的关键字,初级程序员常常容易正确理解throw和throws 的作用和区别,说明已经能比较深入理解异常处理。Throw用来抛出异常,如果执行了throw语句,程序将发生异常,进入到异常处理机制。Throws用来声明异常,说明这个方法可能会发生某些类型的异常,那么编译器将强制在调用这个方法的时候处理异常。API中的很多方法都使用了throws声明了异常,所以使用这些方法时编译器会提示需要处理异常。

参考答案:throw用来在方法体内抛出异常,而throws用来在方法声明处声明异常。这两个关键字有着一定的联系。如果一个方法中使用了throw关键字抛出了异常,那么要么立即用try/catch语句进行捕获,要么就是用throws进行声明,否则将出现编译错误。然而,

并不是只有使用了throw关键字之后才能使用throws关键字,语法上来说,任何一个方法都可以直接使用throws关键字,抽象方法也可以使用。

6. 什么是自定义异常类?为什么要自定义异常类?

解析:企业应用中,往往会自定义一系列的异常类,标记一些非正常的事件流。然而,这些自定义异常类不会让每个程序员都自定义,而是会由专人定义,分发给程序员使用。

参考答案:自定义异常类区别于API中的标准异常类,指的是开发人员自己创建的异常类。只要继承API中某个异常类就可以自定义一个异常类,常常集成Exception类。自定义异常类主要是为了标记业务逻辑中非正常事件流,避免与API中的标准异常混淆。

第四部分核心API

1.请画出Java集合框架的主要接口和类的继承关系。

解析:集合石非常重要的类型,也是企业考察员工编程能力时常常关注的知识点。程序员应该熟悉Java 集合框架的主要继承关系,掌握常用集合类的用法和特点

2.Collection接口和Map接口分别定义了什么集合类型?有什么区别?

解析:Collection和Map是Java集合框架中两个基本集合类型,要区别不同的集合首先要从Collection 和Map开始。

参考答案:Collection接口是传统的集合接口,可以把单个对象存储进来。而Map接口是映射接口,存储的是键值对。

3.用简单代码演示创建一个泛型类为Customer类的List对象,并使用增强

for循环迭代集合。

解析:JDK5以后,集合框架中的接口和类都是泛型类及泛型接口,并可以使用增强for循环迭代集合。程序员需要确认开发平台的JDK版本,如果低于5.0则不能使用这些功能。

参考答案:

ArrayList list = new ArrayList();

For(Customer c : list){

}

4.List和Set集合有什么区别?

解析:List和Set是Collection接口的两个子接口,也是使用最多的两种集合类型。程序员应该熟悉这两个接口的基本特征,能够更准确地选择正确的集合类型。

参考答案:List实现了列表类型的集合,List中的元素是有序(ordered)的,每个元素根据放入集合的顺序而对应一个索引值,可以根据这个索引值返回集合原宿。而Set实现了不重复元素集合,即Set中的元素不能够重复,重复的元素将无法添加到集合中。

5.List接口有哪几个实现类?分别说明其特征

解析:List是用的较多的集合类型,List是一个接口,具体使用List集合类型时,需要使用时实现类。List接口的每个实现类也都实现了不同的数据结构,各自具有不同的特征,其中最常用的是List实现类。

参考答案:List接口中有以下几个常用实现1 ArrayList:实现了动态数组的特征。

2 LinkedList:实现了链表的数据结构,LinkedList也可以用作栈或者队列。

3 Vector:向量。

4 ArrayList

Vector类的功能ArrayList都可以实现,区别在于Vector是现行同步的。

6.Collectioin 和Collections有什么区别?

解析:很多初级程序员对Collectioni和Collections容易混淆,二者的名字非常类似,本义却大大不同,Collections类与Arrays类非常类似,都是工具类,程序员应该熟悉掌握。

参考答案:Collection是一个接口的名字,定义了集合类型的共同特征。而Collections是一个类的名字,是集合类型的工具类,类中定义了大量的静态方法,能够操作及和对象。

7.如何将一个Collection转换成数组?

解析:集合和数组有很多共同的地方,二者都是作为数据容器使用,用来持有数据。数组的长度是固定的,集合的长度却可以动态扩展,数组由于可以直接通过索引操作其元素,所以性能和效率较高。实际应用中,可能使用及合作为临时变量持有数据,却将处理结果转换成数组返回。

参考答案:Collection接口中定义了toArray(T[] a)方法来将集合转换为数组,其中T是泛型类型。

8.假设存在文本文件etc.doc,请用代码展示将文件按行读出,并打印输出到

控制台。

解析:能够使用java.io包进行文件的输入输出操作是一个程序员必备的技能,使用io中类操作的步骤都基本类似,都需要经历IO选择、创建流对象、进行读写操作、关闭流对象的过程,程序员应该熟悉常用的IO流,能够根据需要选择适当的IO类。

参考答案:

File file = new File(“etc.doc”);

try{

FileReader fr = new FileReader(File);

BufferedReader br = new BufferedReader(fr);

String line = br.readLine();

while(line == null){

System.out.println(line);

Line = br.readLine();

}

}catch(FileNotFoundException e){

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

};

9.请说明AWT、Swing以及SWT的区别和联系

解析:目前使用Java开发GUI的应用比较少,然而程序员至少应该了解Java进行GUI变成中的主要概念。参考答案:AWT(Abstract Windows Toolkit)是Java语言中最原始的GUI工具包;Java Swing是Java Foundation Classes(JFC)的一部分,是在AWT基础上发展而来的GUI API ; AWT 和Swing都是原Sun 公司推出的Java GUI 工具包,而SWT 是Eclipse 组织为了开发Eclipse IDE环境所斌写的一组底层GUI API。

10. 假设GUI只能怪存在一个按钮 Button, 请使用匿名内部类对该按钮注册

监听器,使得点击恩牛后应用能够退出。

解析:使用Java语言进行GUI开发的应用较少,只要进行GUI开发,事件处理都是非常重要的知识点。GUI的事件处理,很多时候都是用匿名类实现,程序员至少需要熟悉匿名内部类的语法。

参考答案:

button.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});

11.使用java语言如何创建线程对象?请列出常用的两种方法。

解析:Java 语言能够支持多线程编程,将线程封装成Thread类型的对象,只要创建Thread类型的对象,就能够便捷地启动线程、执行线程体。程序员首先必须掌握创建线程的常用方法。

参考答案:Java语言中经常使用两种方法创建线程。①创建Thread类的子类,在子类中覆盖Thread 类的run方法,实现线程的运行体,只要创建该子类对象就是线程对象。②创建Runable接口的实现类,在实现类中覆盖接口中的run方法,实现线程的运行体。使用Thread(Runable)构造方法可以创建线程对象,参数是Runable接口实现类的实例。

12.关键字synchronized有什么作用?用简单代码展示synchronized的方法。

解析:线程可以共享数据,而共享数据时,可能会因为多个线程并发处理共享数据而导致数据不一致。这种时候,线程同步就费城关键。程序员必须掌握同步的用法,尤其不能随意将代码进行同步,因为同步将降低性能,所以一定不能把不需要同步的代码进行同步,而是只把必须同步的代码进行同步。

参考答案:synchronized可以将某个代码块或者某个方法进行线程同步,被同步的代码块在一个时刻只能被一个线程访问,只有当前线程处理结束后,方能被其他线程访问。例如:

public void run(){

for(int i=0;i<50;i++){

synchronized(this){

System,out,println(Thread.currentThread().getName()+”:x=”+x);

X++;

}}}

13. 线程之间通信的方法有哪几个?分别起到什么作用?

解析:如果多个线程共享了某些数据,同时线程之间有存在一定的“依赖”关系,即执行某类线程必须依赖另一类的执行结果,如消费者必须等待生产者生产了商品才能消费。这种情况下,线程之间就需要通信。必须在同步代码块中调用线程通信的方法。

参考答案:线程通信的方法有三个,在Object类中定义。①wait方法:使得线程进入等待状态。②notify 方法:随意通知等待池中的某一个线程。③notifyAll 方法:通知等待池中所有线程。

14. 基于TCP协议的网络编程,如何在客户端和服务器端传输数据?

解析:使用Java语言进行网络编程,主要是针对传输层进行编程。传输层主要有两种协议,即TCP和UDP。基于TCP协议的网络编程,主要使用Socket和ServerSocket。程序员应该掌握基于TCP协议网络

编程的连接方式以及通讯方式等。

参考答案:基于TCP协议的网络编程,主要使用Socket类获得输入流和输出流,进一步在客户端和服务器端进行输入输出操作。

15.基于UDP协议的网络编程,如何在客户端和服务器端传输数据?

解析:除了TCP协议外,传输层还可以使用UDP协议。基于UDP协议的网络编程,主要使用数据报传输数据。

参考答案:基于UDP协议的网络编程,主要使用数据报传输数据,Java语言API中定义了DatagramPacket 类,用来表示一个数据报。

16. Date和Calender类有什么区别和联系?

解析:应用开发中经常需要对日期进行处理。Java语言中与日期有关的类包括Date和Calender,程序员应该熟悉这两个类。

参考答案:Date类用来表示某个特定的瞬间,能够精确到毫秒。而在实际应用中,往往需要把一个日期中的年、月、日等信息单独返回进行显示或处理,Calender类中就定义了这样一系列方法。往往可以先创建一个Date实例,然后通过Calender中的setTime方法将该实例关联到Calender,接下来就可以使用Calender中的方法处理Date实例中的信息。

17. DateFormart类有什么作用?用简单代码展示其使用方法。

解析:DateFormat类是和日期格式相关的类,当需要将日期按照一定格式显示时,应该考虑使用DateFormat类,程序员对这样常用的类都应该熟练使用。

参考答案:DateFormat是一个用来对日期和时间类型进行格式转换的类,该类是一个抽象类,定义了日期时间格式化的通用方法。例如:

DateFormat format1=Dateformat.getInstance();

System.out.println(format1.format(new Date()));

18.SimpleDateFormat类有什么作用? 用简单代码展示其使用方法。

解析:SimpleDateFormat类是DateFormat类的子类,能够灵活定义日期显示格式,对于程序员来说,想要能够灵活定义日期格式,必须熟悉API中定义的字符模式。

参考答案:SimpleDateFormat类是DateFormat类的子类,可以非常灵活地定义日期显示格式,例如:SimpleDateFormat sdf1=new SimpleDateFormat(“yyyy年MM月dd日hh时mm分ss秒EE”,Locale.CHINA);

System.out.println(sdf1.format(new date()));

19.Java 语言中与国际化相关的类有哪几个?说明其主要作用。

解析:如果应用需要能够支持不同的语言环境,那么就需要进行国际化编程,目前有很多框架对国际化进行了封装和支持,然而了解Java 语言对国际化最底层的支持,对于程序员进行国际化编程时非常必要的。

参考答案:Java语言中与国际化相关的类主要有三个:①java.util.locale:对应一个特定的国家/区域、语言环境。②java.util.ResourceBundle:用于加载一个资源包,并从资源包中获取需要的内容。③java.text.MessageFormat:用于将消息格式化,如动态为占位符赋值等。

20.Java语言中与格式化相关的类有哪几个?说明其主要作用。

解析:格式化在编程中常常出现,例如,将数字以货币的形式输出或者百分数的形式输出等。Java 语言定义了一系列的类能够实现不同类型的格式化,程序员应该熟悉这些类的使用。

参考答案:Java语言中主要有三个格式化相关的类:①DateFormat:用来对日期进行格式化,并有子类SimpleDateFormat对其进行子扩展。②MessageFormat:用来对消息进行格式化。③NumberFormat:用

来对数字进行格式化,并用ChoiceFormat和DecimalFormat两个子类对其进行了扩展。

21.Java语言中使用口那两个类封装大数据类型?分别有什么作用?

解析:实际编程中,往往会由于数值超出长度范围而失去精度。Java语言中提供了大数据类型解决这个问题,程序员应该对此熟练掌握,在需要进行大数据运算时使用。

参考答案:Java语言中有两个大数据类型,即BigInteger和BigDecimal,其中BigInteger可以封装任意精度的整形数值,而BigDecimal可以封装任意精度的有符号数,包括证书和浮点数。

22.什么事反射?反射有哪些作用?

解析:Java语言对反射进行了支持,很多框架的底层也使用了反射技术,例如Spring框架的IoC技术就是基于反射技术。了解反射技术,对于程序员理解很多其他框架和技术都非常有必要。

参考答案:反射是一种强大的工具,能够用来创建灵活的代码,这些代码可以在运行时装配,利用反射机制能够实现很多动态的功能,例如在运行期判断一个对象有哪些方法、动态为对象增加成员、运行期调用任意对象的任意方法等。

23.有哪几种方法可以返回Class类的对象?

解析:初级程序员对Class类往往容易混淆,Class是API中的一个类名,而不是关键字class。Class类是反射技术的核心,用来封装类的类型,通过Class实例,可以动态获得类的其他信息。

参考答案:可以有三种方式返回Class类型对象:①使用Object类中的getclass方法;②使用Class类的forName方法;③使用“类名.class”形式返回Class实例。

第五部分其他特性

1.什么是泛型?泛型有什么作用?

解析:泛型是JDK5中增加的特性,API中有大量的泛型接口、泛型类及泛型方法等。程序员需要了解泛型的作用,尤其在使用集合框架时,往往需要使用到泛型。

参考答案:泛型的本质就是参数化类型,也就是说把数据类型指定为一个参数。在需要声明数据类型的地方,就可以不指定具体的某个类型,而是使用这个参数。这样一来,就能够在具体使用时再指定具体类型,实现了参数的“任意化”。泛型的好处是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

2.请声明一个简单的泛型类,说明泛型的作用

解析:泛型可以用在很多地方,可以声明泛型类、泛型接口、泛型方法等。其中泛型类的使用时程序员必须掌握的知识点。

参考答案:

public class GenClass{

private E attr;

public GenClass(E attr){

this.attr=attr;

}

public E getAttr(){

return attr;

}

public void setAttr(E attr){

this.attr=attr;

}

public static void main(String[] args){

GenClassg1=new GenClass(“hello”);

System.out.println(g1.getAttr());

GenClassg2=new GenClass(new Interger(100));

System.out.println(g2.getAttr());

}}

上面的类GenClass就是一个泛型类,其中E是代表类型的一个参数,E不是一个具体的类,可以使用任意字母代替。在类中声明属性、方法的时候,都使用E这个参数表示类型,达到了类型任意化的效果。可见,使用该类时,可以根据需要将E替换为任意具体类型。

3.下述代码是否有编译错误,如果有,请指出错误。

ListIs=new ArrayList();

ListIo=Is;

解析:Object类是Java中的顶级类,是所有类直接或间接的父类。然而,继承关系在使用泛型集合时,却非常容易出错,程序员必须谨慎使用。例如,虽然String类型是Object类型的子类型,然而一个泛型类型为String的List并不是一个泛型类型为Object的List的子类型。

参考答案:代码有编译错误,在第二行出错。一个泛型类型为String的List并不是一个泛型类型为Object 的List的子类型。

4.请使用简单代码声明一个枚举类型,并说明枚举的作用。

解析:枚举是JDK5版本增加的新类型,在这之前,只有类和接口两种类型。枚举类型主要能够解决静态常量的类型不安全问题。例如,某类中有一系列int型的静态常量,并都赋予了特定的值。然而在使用这些常量时,完全可以用任意一个int型的值代替,编译器不会发现错误。而枚举作为一种类型存在,编译器将在编译期检查类型,不能随意使用其他值代替,当应用中需要一系列预定义的常量值时,程序员就应该考虑是否使用枚举实现。

参考答案:枚举使用enum关键字声明,如下所示:

public enum StudentGrade{

A,B,C;

}

使用枚举的时候,可以通过枚举的名字StudentGrade进行引用,如下所示:

public void setGrade(StudentGrade grade){

this.grade = grade;

}

在使用setGrade 方法时,实际参数值只能是枚举StudentGrade 中的预定义值,否则将出现编译错误。

5.假设有一个枚举类型是Grade,使用代码展示遍历该枚举的方法。

解析:枚举中往往定义了一系列的数据点,在某些场合下可能需要遍历这些值。程序员应该掌握遍历枚举的方法。

参考答案:遍历枚举需要使用values()方法,如下所示:

Grade[]grades = Grade.values();

for(Grade g : grades){ System.out.println(g);

}

6.增强for循环再什么场合使用?用简单代码展现其使用方法。

解析:增强for循环式JDK5版本增加的特性,只能在遍历数组或集合时使用。遍历集合时,最好使用泛型集合,否则将比较复杂。增强for循环并不能完全替代传统循环,如果不是遍历数组或集合,还是只能使用传统的for循环。

参考答案:增强for循环可是用来遍历数组或集合,如下所示:

for(String s:sArray){

System.out.println(s);

}

上述代码中的sArray是一个String类型的数组。

7.什么是自动装箱/拆箱?使用该特征有哪些注意事项?

解析:自动装箱/拆箱指的是八个包装器类与八个基本类型的转换问题。然而。这个特征却需要谨慎使用,因为虽然表面上看起来非常方便,而实质上依然需要创建对象、进行转换等操作,使用不恰当会降低性能。

参考答案:自动装箱指的是可以直接将基本数据类型转换为包装器类型,自动拆箱指的是可以直接将包装器类型转换为基本数据类型,如下代码所示:

int m=100;

Integer im=m;

int n=im;

上诉代码中,直接将m赋值给包装器对象im,这就是自动装箱,然后直接将im赋值给基本数据类型n,这就是自动拆箱。虽然表面上看代码简洁方便,然而本质上装箱时候依然使用new创建了对象,而拆箱时也依然调用了方法进行运算。因此,不要在没有必要的时候,频繁使用装箱拆箱,会降低性能。

8.什么是可变参数?用简单代码展示可变参数的使用。

解析:如果一个类中的某个方法,要接受某个类型的参数,而参数个数却不确定,这种情况下,可以将这个参数使用数组类型或者集合类型封装,然而使用该方法时就比较麻烦,必须先把参数先封装成数组或者集合。可变参数就能够解决这个问题。

参考答案:可变参数是指参数个数不确定的参数,如下所示:

public static int add(int..args){

…………

}

上述方法的args就是可变参数,使用add方法时,形式参数可以是任意多个int型数值。

*** JAVA面试题. ***

1、作用域public,private,protected,以及不写时的区别

答:区别如下:

作用域当前类同一package 子孙类其他 package

public √√√√

protected √√√×

friendly √√××

private √×××

不写时默认为friendly2、 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,

是否可以implements(实现)interface(接口)

答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作

为一个接口,由另一个内部类

实现

3、Static Nested Class 和 Inner Class的不同

答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++

嵌套类最大的不同就在于

是否有指向外部的引用上。注:静态内部类(Inner Class)意味着1创建一个static 内部类

的对象,不需要一个外部类对

象,2 不能从一个static内部类的一个对象访问一个外部类对象

4、&和&&的区别

答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)

5、Collection 和 Collections的区别

答:Collection是集合类的上级接口,继承与他的接口主要有 Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排

序、线程安全化等操作

6、什么时候用assert

答: assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。

在实现中,assertion就是

在程序中的一条语句,它对一个 boolean 表达式进行检查,一个正确程序必须保证这个boolean表达式的值为 true;如果该

值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion

用于保证程序最基本、关

键的正确性。assertion 检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的

7、String s = new String("xyz");创建了几个String Object

答:两个,一个字符对象,一个字符对象引用对象

8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少

答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参

数加1/2 后求其floor9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错

答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 +=

1;(可以正确编

译)

10、Java有没有goto

答:java中的保留字,现在没有在java中使用 11、数组有没有length()这个方法? String 有没有length()这个方法

答:数组没有length()这个方法,有 length的属性。String有有 length()这个方法12、Overload和Override的区别。Overloaded 的方法是否可以改变返回值的类型

答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写Overriding

是父类与子类之间多态性的一种

表现,重载 Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类

有相同的名称和参数,我们说该

方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,

父类中的定义如同被"屏蔽"

了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,

则称为方法的重载

(Overloading)。Overloaded的方法是可以改变返回值的类型

13、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?

它们有何区别

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个

Set是否相等

equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个分离

的对象的内容和类型相配

的话,返回真值

14、给我一个你最常见到的 runtime exception

答:常见的运行时异常有如下这些ArithmeticException, ArrayStoreException,

BufferOverflowException,

BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException,

CMMException,

ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException,

IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException,

IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException,

NoSuchElementException,

NullPointerException, ProfileDataException, ProviderException, RasterFormatException,

SecurityException,

SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException15、error和exception有什么区别

答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可

能指望程序能处理这样的情况

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的

情况

16、List, Set, Map是否继承自 Collection接口

答: List,Set是,Map不是

17、abstract class和interface 有什么区别

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并

为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以

创建一个变量,其类型是一个

抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。 Abstract 类

的子类为它们父类中的所有

抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为

的其它类可以在类中实现这些

方法

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现

这样的接口而获得。接口中的

所有方法都是抽象的,没有一个有程序体。接口只可以定义 static final成员变量。接口的实

现与子类相似,除了该实现

类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种

接口的方法。然后,它可以在

实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为

用变量的类型。通常的动态联

编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某

对象的类是否实现了接口

18、 abstract的method 是否可同时是static,是否可同时是 native,是否可同时是synchronized

答:都不能

---------- 1 ----------

*** JAVA面试题.txt ***

19、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类

(concrete class)

答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但

前提是实体类必须有明确的构

造函数

20、构造器Constructor 是否可被override

答:构造器Constructor 不能被继承,因此不能重写Overriding,但可以被重载Overloading21、

是否可以继承String类

答:String类是final类故不可以继承

22、try {}里有一个return语句,那么紧跟在这个try后的 finally {}里的 code会不会被执行,

什么时候被执行,在return

前还是后

答:会执行,在return前执行

23、用最有效率的方法算出 2乘以8等於几

答:2 << 324、两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不

答:不对,有相同的hash code25、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方

法中时,参数的值就是对该对象

的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的

26、swtich是否能作用在byte 上,是否能作用在long上,是否能作用在String上

答:witch(expr1)中,expr1 是一个整数表达式。因此传递给 switch 和 case 语句的参数

java基础笔试题(答案已整理)

Java基础试题 一:选择题(1*30=30)(题目写在答题纸上面) 1:Java 提供哪几种运算符多选( abcd )。 A)算术运算符B)位运算符 C)关系运算符D)逻辑运算符E)条件运算符 2:https://www.doczj.com/doc/aa16154991.html,ng包的()方法比较二个对象是否相等返回true.。(b) A:toString() B:equals() C:compare D:以上都不正确 3:下列对Java 的变量与函数说法正确的是多选(ace )。 A)变量是用来保存数据的B)变量是用来实现操作过程的C)函数是用来实现操作过程的D)函数是用来保存数据的E)函数的参数是数据的入口 4:已知:int[] a = new int[100];在下列给出的数组元素中,非法的是。(d) A:a[0] B:a[1] C:a[99] D:a[100] 5:在java中,一个类可同时定义许多同名的方法,在这些方法的形式参数个数,类型或顺序各不相同,传值也可以各不相同。这种面向对象程序的特性称为。(c) A:隐藏B:覆盖C:重载D:Java不支持此特性 6:()是一组常量和抽象方法的集合。(d) A:实例B:类C:包D:接口 7:下面关于数组说法正确的是多选(abcde)。 A)一维数组实质上是相同类型变量的列表 B)创建一个数组首先定义数组变量所需的类型 C)char c[]=new char[26];可声明一个含有26 个元素的char型数组 D)当为一个多维数组的时候分配内存时,仅需要为第一指定内存,然后再分配其他维的存E)int twain[][] = new int[4][5];可声明一个二维数组 8:Java源文件和编译后的文件扩展名分别为。(b) A:.class和.java B:.java各.class C:.class和.class D:.java和.java 9:设x=5;则y=x--和y=--x的结果,使y分别为。(c) A:5,5 B:5,6 C:5,4 D:4,4 10:若x是float类变量,x=10/4;则x 的值是。(b) A:2 B:2.0 C:2,5 D:编译错误 11:.下面方法中,用于调度线程使其运行的是?多选(bc ) A. init() B. start() C. run() D. resume() E. sleep() 12.下面哪种情况能实现自动转换多选(ace )。 A)byte 型转换成int 型B)int 型转换成byte 型 C)float 型转换成double型D)double 型转换成int 型E)char型转换成int 型 13:下列那些是正确的JAVA字符串?多选(abd )。 A. "\"\"" B. "Oxzabc" C. "\"\" D. "\t\t\r\n" E. "boolean"5 14:在使用super 和this关键字时,以下描述正确的是。(a) A::在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过 B:super()和this()不一定要放在构造方法内第一行

java基础笔试测试题与答案

Java 一章至五章考试 一. 填空题(8 分) 1. 面向对象的三大原则是( 封装),( 继承) 和( 多态).2 分 2. 如果想在对象实例化的同时就初始化成员属性,则使用( 构造函数).2 分 3. ( 实体) 方法和( 构造) 方法不能修饰为abstract ?2分 二.选择题(60 分) 1) 在Java 语言中,下列(a,d )是不满足命名规范的变量名。(选择二项) a) 姓名 b) $Name c) _instanceof d) instanceof 2) 下列Java 代码片段的输出结果是( a ) 。 char c='a'; int i=c; float f=i; byte b=(byte)c; System.out.println(c+","+i+","+f+","+b); a) 编译错误 b) a,97,97,97 c) a,97,97.0,97 d) a,97,97.0f,97 3) 下列Java 代码中,空白处的代码是(b,c )。( 选择两项) public interface Fee{ public float calLabFee(float unitPrice, float time); } public class FeeImpl implements Fee { public float calLabFee(float unitPrice, float time){ return unitPrice * time; } } public class FeeInterfaceTest { public static void main(String[] args){ ________________ Float labFee = fee.calLabFee(400.00,5); } }

Java工程师面试题(含答案)

1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗 基本数据类型包括byte、int、char、long、float、double、boolean和short。 类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和Integer 有什么区别 Java提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int 提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String 类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 8、运行时异常与一般异常有何异同 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求

Java基础笔试机试测试题(带答案)

Java基础考试题 班级:__________ 姓名:___________ 日期:_____________ 一、笔试(45题,每题2分) 1) 分析下面的Java程序段,编译运行后的输出结果是()。 public class Test { public static void changeString(StringBuffer sb) { sb.append("stringbuffer2"); } public static void main(String[] args) { StringBuffer sb = new StringBuffer("stringbuffer1"); changeString(sb); System.out.println("sb = " + sb.toString()); } } A. sb = stringbuffer2stringbuffer1 B. sb = stringbuffer1 C. sb = stringbuffer2 D. sb = stringbuffer1stringbuffer2 2) 在Java中,包有多种用途,但不包含()。 A. 将类组合成较小的单元,便于使用 B. 有助于避免命名冲突 C. 有助于提高运行效率 D. 允许在更广的范围内保护类、数据和方法 3) 在Java中,如果要在字符串类型s="java"中,得到字母'v' 出现的位置,选()语句。 A)s.matches('v'); B)s.charAt('v'); C)s.indexOf('v'); D)s.substring('v'); 4)下列代码运行后,变量c的值是()。 int a=15,b=10; double c=a/b; a) 1.5 b) 1.0 c) 1 d) 0 5)main方法如下所示,该程序的运行结果是()。 public static void main(String [] args){ int i=0; System.out.print(i++); } a) 输出0 b) 输出1 c) 编译错误d) 运行时出现异常

JAVA基础面试题经典

JAVA基础面试题经典

第一阶段题库 基础知识部分: 1.JDK是什么?JRE是什么? a)答:JDK:java开发工具包。JRE:java运行时 环境。 2.什么是java的平台无关性? a)答:Java源文件被编译成字节码的形式,无论 在什么系统环境下,只要有java虚拟机就能运行这个字节码文件。也就是一处编写,处处运行。这就是java的跨平台性。 3.在一台电脑上配置java环境,path起什么作 用?如何配置? a)答:path的作用是在DOS环境下,能在任意 位置使用JDK目录中bin文件夹中的可执行程序,来编译执行java程序。 b)在环境变量中找到path变量,把bin文件夹 的绝对路径加上即可。 4.什么样的标识符是合法的? a)由字母、数字、_和$组成,长度不限。其中字 母能够是大写或小写的英文字母,数字为0到9。

b)标识符的第一个字符不能是数字。 c)标识符区分大小写。 d)标识符不能包含空格。 5.Java有几种基本数据类型? a)byte,short,int,long,char,boolean,float,double 6.什么是隐式类型转换?什么是显示类型转换? a)当将占位数少的类型赋值给占位数多的类型 时,Java自动使用隐式类型转换。 b)当把在级别高的变量的值赋给级别底变量时, 必须使用显示类型转换运算。 7.&&和&区别,||和|区别? a)&&和||是短路与,短路或,当左边的表示式能 判断当前结果,则不判断右边的表示式。 b)而& 和|则将两边的表示式都运算完毕后,再 算结果。 8.break,continue区别? a)break结束最近的一个循环,continue结束当 次循环,进入下次循环。 9.类的命名规则是什么? a)如果类名使用拉丁字母,那么名字的首写字母 使用大写字母。

Java基础试题和答案解析

Java试题 1) java程序中,main方法的格式正确的是()。(选择一项) a)static void main(String[] args) b)public void main(String[] args) c)public static void main(String[]s) d)public static void main(String[] args) 2)给定java代码,如下: public byte count(byte b1,byte b2){ return______; } 要使用这段代码能够编译成功,横线处可以填入()。(选择一项) a)(byte) (b1-b2) b)(byte) b1-b2 c) b1-b2 d) (byte) b1/b2 3)在Java中,在包com.db下定义一个类,要让包com.util下的所有类都可以访问这个类,这个类必须定义为()。(选择一项) a)protected b)private c)public d)friendly 4)在Java中,下列()语句不能通过编译。(选择一项) a) String s= “join”+ “was”+ “here”; b) String s= “join”+3; c) int a= 3+5 d) float f=5+5.5; 5) 在Java中下列()方法可以把JFrame的布局管理器设为FlowLayout类型(选择一项) a)jFrame.setLayout(new FlowLayout() ); b) jFrame.addLayout(new FlowLayout() ) c)jFrame.setFlowLayout() d)jFrame.addFlowLayout() 6)给定java代码如下,运行时,会产生()类型的异常。(选择一项) String s=null; s.concat(“abc”); a)ArithmeticException b)NullPointerException c)IOException d)EOFException 7) 在java中,()对象可以使用键/值的形式保存数据。(选择一项) a)ArrayList b) HashSet c) HashMap d) LinkedList

最新java基础面试题(答案)

1 1、如下哪些不是java的关键字? 2 A)const B)NULL C) false D)this E) native 3 答:B 4 2、关于垃圾收集的哪些叙述是对的 5 A)程序开发者必须自己创建一个线程进行内存释放的工作 6 B)垃圾收集将检查并释放不在使用的内存 7 C)垃圾收集允许程序开发者明确指定并立即释放该内存 8 D)垃圾收集能够在期望的时间释放被java对象使用的内存 9 答:B 10 3、已知表达式 int m [ ] = {0,1,2,3,4,5,6};下面哪个表达式11 的值与数组下标量总数相等? 12 A)m.length() B)m.length C)m.length()+1 D)m.length-1 13 答:D 14 4、已知如下代码: public class Test { long a[] = new long [10]; public 15 static void main(String arg[] ){ System.out.print(a[6]); } } 请问哪个16 语句是正确的? 17 A)Output is null. B)Output is 0 C)When compile, some error will 18 occur. 19 D)When running, some error will occur.

20 答:C 21 5、已知如下代码: public class Test { public static void main(String 22 arg[] ) { int i = 5; do{ System.out.print(i); }while(--i>5); 23 System.out.print(“finished”); } } 执行后的输出是什么? 24 A)5 B)4 C)6 D)finished 25 答:AD 26 6、已知如下代码: 27 switch (m) { 28 case 0: System.out.print(“Condition 0”); 29 case 1: System.out.print(“Condition 1”); 30 case 2: System.out.print(“Condition 2”); 31 case 3: System.out.print(“Condition 3”); default: 32 System.out.print(“Other Condition ”); } 当m的值为什么时能输出33 “Condition 2” 34 A)0 B)1 C)2 D)3 E) 4 F)None 35 答:ABC 36 18、下面的哪些声明是合法的? 37 A)long 1 = 4990 B)int i = 4L C)float f =1.1 D)double d = 34.4 38 答:AD

2019最新Java面试题,常见面试题及答案汇总

ava最新常见面试题+ 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示: 可能对于初学者不需要后面的框架和JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。 适宜阅读人群 需要面试的初/中/高级java 程序员 想要查漏补缺的人 想要不断完善和扩充自己java 技术栈的人 java 面试官 具体面试题 下面一起来看208 道面试题,具体的内容。 一、Java 基础 1.JDK 和JRE 有什么区别? 2.== 和equals 的区别是什么? 3.两个对象的hashCode()相同,则equals()也一定为true,对吗? 4.final 在java 中有什么作用? 5.java 中的Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用final 修饰吗?

14.接口和抽象类有什么区别? 15.java 中IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和Hashtable 有什么区别? 22.如何决定使用HashMap 还是TreeMap? 23.说一下HashMap 的实现原理? 24.说一下HashSet 的实现原理? 25.ArrayList 和LinkedList 的区别是什么? 26.如何实现数组和List 之间的转换? 27.ArrayList 和Vector 的区别是什么? 28.Array 和ArrayList 有何区别? 29.在Queue 中poll()和remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和ListIterator 有什么区别? 34.怎么确保一个集合不能被修改?

Java面试题集(最全版)

目录表 第一章技巧篇 2 介绍自己2 行为2 第二章智力篇 3 微软面试题 3 第三章 Java篇5 Java基础方面--概念 5 Java基础方面—线程编程方面12 Java基础方面—编程 14 第四章 Jsp篇30 第五章 Servlet篇31 第六章应用服务器篇37 第七章 J2EE,MVC篇38 第八章设计模式方面篇40 第九章 Hibernate程序性能优化篇41 Hibernate程序性能优化 45

Hibernate 优化47 Hibernate优化的几点建议51 Hibernate性能优化52 第十章数据库篇55 第一套数据库笔试题及答案 55第二套数据库笔试题及答案 64

第一章技巧篇 介绍自己 1、自我认识 想一矢中的,首先必须认清自我,一定要弄清以下三个问题。你现在是干什么的?你将来要干什么?你过去是干什么的? 这三个问题不是按时间顺序从过去到现在再到将来,而是从现在到将来再到过去。其奥妙在于:如果你被雇用,雇主选中的是现在的你,他希望利用的是将来的你,而这将来又基于你的历史和现状。 所以,第一个问题,你是干什么的?现在是干什么的?回答这个问题,要点是:你是你自己,不是别的什么人。除非你把自己与别人区别开来,在共同点的基础上更强调不同点,否则你绝无可能在众多的应征求职者中夺魁。对于这第一个问题,自我反省

越深,自我鉴定就越成功。 随后,着手回答第二个问题:你将来要干什么?如果你申请的是一份举足轻重的工作,雇主肯定很关注你对未来的自我设计。你的回答要具体,合理,并符合你现在的身份,要有一个更别致的风格。 然后,再着手回答最后一个问题:你过去是干什么的?你的过去当然都在履历上已有反映。你在面试中再度回答这个问题时,不可忽略之处是:不要抖落一个与你的将来毫不相干的过去。如果你中途彻底改行,更要在描述你的执着、职业目标的一贯性上下些功夫。要做到这一点,又要忠实于事实和本人,最简单的方法是:找到过去与将来的联系点,收集过去的资料,再按目标主次排列。 用这样的方法,以现在为出发点,以将来为目标,以过去为证实,最重要的是加深了你的自我分析和理解。其实,在面试的时候不一定有机会或者有必要照搬你的大作,但这三个问题的内在联系点一定会体现在自我表述的整体感觉中,使你的形象栩栩如生。 2、投其所好 清楚自己的强项后,便可以开始准备自我介绍的内容:包括工作模式、优点、技能,突出成就、专业知识、学术背景等。

Java基础测试题

Ps:答案已写在上面。希望大家把其他错误选项问题找出来. 第一组: 1.下面哪些是合法的变量名 (DEG) A.2variable .variable2 ._whatavariable $_¥ 2.请问“abcd” instanceof Object返回的值是 (B) A. “abcd” B. true C. false D. String 前面是后面的子类 面说法正确的是:(A) A. 如果源代码中有package语句,则该语句必须放在代码的第一行(不考虑注释和空格); B. 如果源代码中有import语句,则该语句必须放在在代码的第一行(不考虑注释和空格)如果源代码中有main()方法,则该方法必须被放在代码的第一行如果某文件的源代码中定义了一个public 的接口,接口名和文件名可以不同。 4.下面有关方法覆盖说法不正确的是:(B) A. 方法覆盖要求覆盖和被覆盖的方法有相同的名字,参数列以及返

回值 B. 方法覆盖要求覆盖和被覆盖的方法必须具有相同的访问权限; C. 覆盖的方法不能比被覆盖的方法抛出更多的异常 D. 覆盖的方法一定不能是private的 5.一个Java程序运行从上到下的环境次序是(C) A. 操作系统、Java程序、JRE/JVM、硬件 B. JRE/JVM、Java程序、硬件、操作系统 C. Java程序、JRE/JVM、操作系统、硬件 D. Java程序、操作系统、JRE/JVM、硬件 6. 下面选项中哪个关键字可以用来修饰接口中的变量和方法(A) A. static B. private C. synchronized D. protected 7. 下面代码段中:(A) String String=”String”; String B. 不知道 C. 编译出错 D. 运行出错 8. 下面哪种是正确的创建Map集合的方式:(D) A. Map m=new Map();

JAVA面试题(_华为)(答案)

软件开发应试人员考试试题(Java) 姓名:___________ 电话:___________ 以下信息有工作经验人员如实填写,应届毕业不填(时间从毕业参加工作算起) 从事Java开发时间____月熟悉JavaScrip时间____月 熟悉EXT开发时间____月熟悉PDM开发时间____月 熟悉的数据库及时间(如SQLServer 3个月,可多填)___________________ 一、JAVA基础 1、简述你所知道的JA V A修饰符及各自的使用机制?(public、abstract、final、synchronized、super…) public :允许所有客户访问 protected:只能在本包内被该类的子类所使用 private:只允许在本类内使用 abstract:没有提供实现,需要子类提供 static:与整个类相关,与单个对象无关 final:你只能定义一个实体一次,以后不能改变它或继承它。一个final修饰的类不能被子类化,一个final 修饰的方法不能被重写,一个final修饰的变量不能改变其初始值 synchronized:方法获得对对象监控的访问权;如果该方法是static类型的,获得是对类本身的访问权。super:构造器和方法,都用关键字super指向超类,但是用的方法不一样。方法用这个关键字去执行被重载的超类中的方法。 2. String、StringBuffer与StringBuilder之间区别?别简述各自的执行效率? 区别:String 类型和StringBuffer 类型的主要性能区别其实在于String 是不可变的对象, 因此在每次对String 类型进行改变的时候其实都等同于生成了一个新的String 对象,然后将指针指向新的String 对象,所以经常改变内容的字符串最好不要用String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM 的GC 就会开始工作,那速度是一定会相当慢的, 执行速度:三者在执行速度方面的比较:StringBuilder > StringBuffer > String 使用场景:1.如果要操作少量的数据用= String 2.单线程操作字符串缓冲区下操作大量数据= StringBuilder 3.多线程操作字符串缓冲区下操作大量数据= StringBuffer 2、静态变量和实例变量的区别?能在静态方法中调用非静态变量吗? 静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。实例变量属于该类的对象,必须产生该类对象,才能调用实例变量 静态方法及变量属于整个类,数据将会被存储在公共区域,非静态方法及变量属于对象 静态方法中无法调用实例变量,而实例方法却可以调用静态变量

java基础面试全集

Java面试题大全 2013年年底的时候,我看到了网上流传的一个叫做《Java面试题大全》的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对这个所谓的《Java面试大全》进行了全面的修订并重新发布在我的CSDN博客。在修订的过程中,参照了当时JDK最新版本(Java 7)给出了题目的答案和相关代码,去掉了EJB 2.x、JSF等无用内容或过时内容,补充了数据结构和算法、大型网站技术架构、设计模式、UML、spring MVC等内容并对很多知识点进行了深入的剖析,例如hashCode方法的设计、垃圾收集、并发编程、数据库事务等。当时我甚至希望把面试中经常出现的操作系统、数据库、软件测试等内容也补充进去,但是由于各种原因,最终只整理出了150道面试题。让我欣慰的是,这150道题还是帮助到了很多人,而且在我CSDN 博客上的总访问量超过了5万次,最终还被很多网站和个人以原创的方式转载了。最近一年内,用百度搜索”Java面试”我写的这些东西基本上都排在搜索结果的前5名,这让我觉得”亚历山大”,因为我写的这些东西一旦不准确就可能误导很多人。2014年的时候我又整理了30道题,希望把之前遗漏的面试题和知识点补充上去,但是仍然感觉挂一漏万,而且Java 8问世后很多新的东西又需要去总结和整理。为此,我不止一次的修改了之前的180题,修改到自己已经感觉有些疲惫或者厌烦了。2014年至今,自己带的学生又有很多走上了Java程序员、Java工程师的工作岗位,他们的面试经验也还没来得及跟大家分享,冥冥之中似乎有一股力量在刺激我要重新写一篇《Java面试题全集》,于是这篇文章就诞生了。请不要责备我把那些出现过的内容又写了一次,因为每次写东西就算是重复的内容,我也需要对编程语言和相关技术进行重新思考,不仅字斟句酌更是力求至臻完美,所以请相

JAVA基础面试题-3(答案版)

JAVA语言基础笔试题-3 Question 1 Given: 1. public class Team extends java.util.LinkedList { 2. public void addPlayer(Player p) { 3. add(p); 4. } 5. public void compete(Team opponent) { /* more code here */ } 6. } 7. class Player { /* more code here */ } Which two are true? (Choose two.) A. This code will compile. B. This code demonstrates proper design of an is-a relationship. C. This code demonstrates proper design of a has-a relationship. D. A Java programmer using the Team class could remove Player objects from a Team object. 答案:AD 考点:List接口实现,对象间泛化和关联关系 说明: is a 关系一般用继承来表示,但此题这个继承从逻辑上不是太恰当. Has a 关系一般来说表示某对象体内有其它对象的存在,该对象体现为属性形态,在 UML中叫做关联关系。本题Team中虽然可以保存Player,但并非显式以属性形式存在。 由于LinkedList自带remove方法,可以通过Team.remove(p) 来删除player对象。 Question 2 Which four are true? (Choose four.) A. Has-a relationships should never be encapsulated. B. Has-a relationships should be implemented using inheritance. C. Has-a relationships can be implemented using instance variables. D. Is-a relationships can be implemented using the extends keyword. E. Is-a relationships can be implemented using the implements keyword. F. The relationship between Movie and Actress is an example of an is-a relationship. G. An array or a collection can be used to implement a one-to-many has-a relationship. 答案:CDEG 考点:集合类型,对象间泛化和关联关系的理解 Has a 关系一般表示为一个类拥有一个属性,属性被封装是常见的事情。 Is a 关系一般用继承来表示,子类体内拥有父类部分。 接口的实现,也适用于is a 关系来理解,因为接口从本质来说,也属于类的形态。

Java基础面试题

1.下面能够得到文件“file.txt”的父路径的是: A.String name= File.getParentName(“file.txt”); B.String name= (new File(“file.txt”)).getParent(); C.String name = (new File(“file.txt”)).getParentName(); D.String name= (new File(“file.txt”)).getParentFile(); 2.在Java中,要创建一个新目录,要使用的类的实例是: A.File B.FileOutputStrean C.PrintWriter D.Dir 3.题目代码的功能为:在d:创建一个文件“test.txt”,并向文件写入“HelloWorld”,然后删除文件。 public static void main(String[] args) { File file = new File("d:\\", "file.txt"); try { <填入代码> } catch (Exception e) { e.printStackTrace(); } } A. BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write("HelloWorld"); bw.close(); if (file.exists()) { file.delete(); } B. BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write("HelloWorld");

JAVA基础面试题-2-答案版

JAVA语言基础笔试题-2 Question 1 Given: 11.classA { 12. public void process() { System.out.print(“A “)} } 13. class B extends A { 14. public void process() throws RuntimeException { 15. super.process(); 16. if (true) throw new RuntimeException(); 17. System.out.print(“B”) }} 18. public static void main(String[] args) { 19. try { ((A)new B()).process(); } 20. catch (Exception e) { System.out.print(“Exception “)} 21. } What is the result? A. Exception B. A Exception C. A Exception B D. A B Exception E. Compilation fails because of an error in line 14. F. Compilation fails because of an error in line 19. 答案:B 考点:方法的重写(重写方法异常抛出部分的理解) 多态 异常处理 说明: 子类重写父类方法,不能抛出比父类方法更多的异常,但此处子类重写方法声明抛出了RuntimeException,不算多抛,算是平抛,是可以的。 RuntimeException是Exception的子类,可以被Exception捕获。 Question 2 Given: 11. static class A { 12. void process() throws Exception { throw new Exception(); } 13. } 14. static class B extends A { 15. void process() { System.out.println(“B”)} 16. } 17. public static void main(String[] args) { 18 .A a=new B(); 19. a.process(); 20.} What is the result? A. B

java基础面试题(答案)

1、如下哪些不是java的关键字? A)const B)NULL C)false D)this E) native 答:B 2、关于垃圾收集的哪些叙述是对的 A)程序开发者必须自己创建一个线程进行内存释放的工作 B)垃圾收集将检查并释放不在使用的内存 C)垃圾收集允许程序开发者明确指定并立即释放该内存 D)垃圾收集能够在期望的时间释放被java对象使用的内存 答:B 3、已知表达式int m [ ] = {0,1,2,3,4,5,6};下面哪个表达式的值与数组下标量总数相等? A)m.length()B)m.length C)m.length()+1D)m.length-1 答:D 4、已知如下代码:public class Test {long a[]=new long [10];public static void main(String arg[] ){ System.out.print(a[6]); } }请问哪个语句是正确的? A)Output is null.B)Output is 0C)When compile, some error will occur.D)When running, some error will occur. 答:C 5、已知如下代码:public class Test { public static void main(String arg[] ) { int i = 5;do{System.out.print(i);}while(--i>5);System.out.print(“finished”);}}执行后的输出是什么? A)5B)4C)6D)finished

java经典面试题大全带答案

Java经典面试题带答案 一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A. Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 4.提供Java存取数据库能力的包是() A. B. C. D. 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环

答案:C 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A 9.下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 答案:D 二、多项选择题 1.Java程序的种类有() A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有() A.环境变量可在编译sourcecode时指定 B.在编译程序时,所能指定的环境变量不包括class path C.javac一次可同时编译数个Java源文件 D.能指定编译结果要置于哪个目录(directory) 答案:BCD 3.下列标识符不合法的有() A.new B.$Usdollars C.1234 D. 答案:ACD 4.下列说法错误的有() A.数组是一种对象 B.数组属于一种原生类 C.intnumber=[]={31,23,33,43,35,63} D.数组的大小可以任意改变 答案:BCD 5.不能用来修饰interface的有()

JAVA基础面试题(经典)

基础知识部分: 1. JDK是什么?JRE是什么? a) 答:JDK:java开发工具包。JRE:java运行时环境。 2. 什么是java的平台无关性? a) 答:Java源文件被编译成字节码的形式,无论在什么系统环境下,只要有java虚拟机就能运行这个字节码文件。也就是一处编写,处处运行。这就是java的跨平台性。 3. 在一台电脑上配置java环境,path起什么作用?如何配置? a) 答:path的作用是在DOS环境下,能在任意位置使用JD K目录中bin文件夹中的可执行程序,来编译执行java程序。 b) 在环境变量中找到path变量,把bin文件夹的绝对路径加上即可。

4. 什么样的标识符是合法的? a) 由字母、数字、_和$组成,长度不限。其中字母可以是大写或小写的英文字母,数字为0到9。 b) 标识符的第一个字符不能是数字。 c) 标识符区分大小写。 d) 标识符不能包含空格。 5. Java有几种基本数据类型? a) byte,short,int,long,float,double,char,bool ean 6. 什么是隐式类型转换?什么是显示类型转换? a) 当将占位数少的类型赋值给占位数多的类型时,Java自动使用隐式类型转换。

b) 当把在级别高的变量的值赋给级别底变量时,必须使用显示类型转换运算。 7. &&和&区别,||和|区别? a) &&和||是短路与,短路或,当左边的表达式能判断当前结果,则不判断右边的表达式。 b) 而& 和|则将两边的表达式都运算完毕后,再算结果。 8. break,continue区别? a) break结束所有循环,continue结束当次循环,进入下次循环。 9. 类的命名规则是什么? a) 如果类名使用拉丁字母,那么名字的首写字母使用大写字母。

相关主题
文本预览