Java面试题整理_第1页
Java面试题整理_第2页
Java面试题整理_第3页
Java面试题整理_第4页
Java面试题整理_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、S1模块面试题整理 共100题1. &和&的区别答:&和&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式.&则不同,即使第一个表达式为false,仍然计算第二个表达式。 &是位运算符,表示按位与运算,&是逻辑运算符,表示逻辑与(and)2. 数组有没有length()这个方法? String有没有length()这个方法答:数组没有length()这个方法,有length的属性。String有lengt

2、h()这个方法3. switch是否能作用在byte上,是否能作用在long上,是否能作用在String上答:switch后的整型表达式可使用int ,short ,byte,char,及这些类型的包装类型也是可以的。所以 long 和 String 都不行。4. char型变量中能不能存贮一个中文汉字?为什么?答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的5. String是最基本的数据类型吗答:String不是基本数据类型。是常量类。基本数据类型包括byte、int、char、long、float、double、bool

3、ean和short。6. 一个.java源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以。但是只能有一个public类 而且如果有public类的话,这个文件的名字要和这个类名一样。7. 在JAVA中,如何跳出当前的多重嵌套循环?答:用break 标签;return方法;throws 抛异常 ;System.exit(0);8. String和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串

4、进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffer来动态构造字符数据。9. 简述逻辑操作(&,|,)与条件操作(&,|)的区别。区别主要答两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型b.逻辑操作不会产生短路10. 尽可能的叙述Java和C+之间的区别,你觉的Java的优势在哪?(解答题)java较C+运行速度慢的原因: 1)java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然后java虚拟机读取该类文件的字节,执行相应操作.而C+编译的 时候将程序编译成本地机器码

5、.一般来说java程序执行速度要比C+慢10-30倍.即使采用just-in-time compiling (读取类文件字节后,编译成本地机器码)技术,速度也要比C+慢好多. 2)java程序有要从网络上加载类字节,然后执行,这也是导致java运行速度慢的原因. 3)在程序运行过程中,java虚拟机要检测数组是否越界,在C+中则不检测. 4)java中所有的对象都创建在堆中,没有对象被创建在stack中,而C+有的对象和变量是创建在stack中的 5) java在运行过程中检测对象的引用是否为空,如果引用指向都空指针,且执行某个方法时会抛出空指针异常 6)java运行时对类型检测,如果类型不正

6、确会抛出ClassCastException异常. 7)java的垃圾回收机制较C+由程序员管理内存效率更低. 8) java中的原始数据类型在每个操作系统平台长度都是相同,而C+这些数据类型长度是随操作系统的不同而不同,所以java在不同操作系统上执行时有个转化过程. 9)在java中String 是UNICODE.当java要操作一个 ASCII string 时,比C+效率上相对要低一些. 10)java中采用的是动态链接 Java和C+看起来很类似,但两者之间的差别要多于粗略地查看这两种语言时所认为的那样。我们不会对所有的区别进行描述,但为了帮助从C+(或C)向Java过渡,会对两者的

7、一些相似及不同之处进行介绍。基本类型Java中的基本类型基本上和C及C+中的一样(int、short、long、float、double和 char),但Java添加了byte和boolean类型。(近期的C+版本中也有了bool类型,对应于Java中的boolean类 型。)Java中没有名为long double的类型。与C和C+不同,在Java中,用字节表示的某些特定基本类型值的大小是完全确定的,与实现无关。细节请参见Java程序设计与 问题解决:基础篇的第2章。字符串与C和C+的某些版本不同,Java中的字符串不是特定类型的字符数组。在Java中有一个预定义的String类 型。(对S

8、tring类的讨论是从Java程序设计与问题解决:基础篇的第2章开始的。)Java的String类与C+近期版本中的string 类有些类似。控制流程Java中的控制结构(if-else、switch、while、do-while和for)与C和C+一样。但是, 有一些差别会影响到对Java中控制结构的使用。具体来说,Java中没有逗号运算符,Java中的boolean类型既不是一个数字类型,也无法将其值 强制转换为一个数字类型,而且赋值运算符在Java中比在C和C+中表现得更好一些。Java中没有逗号运算符。但是,Java中的for语句定义为可以使用逗号,就像下列代码这样:for (n =

9、1, product = 1; n = 10; n+)product = product * n;但这个“逗号运算符”只能在for语句中使用。在Java中,boolean类型有两个值:true和false,无法将这两个值转换成数字值,用强制类型转换也不行。C和C+中的一个典型错误就是用=取代了=,就像下列代码这样:if ( n = 42 )在C和C+ 中,表达式n=42会返回值42,根据所用的C或C+版本的不同,这个表达式可以是或将要被转换成一个布尔值。在Java中,n=42也会返回值42, 但42不是boolean类型的,它也不会被转换成boolean类型。因此,在Java中,这种错误会引发

10、一个编译器错误消息。相等性测试在Java中测试一个类类型对象的相等性是很麻烦的。对基本类型的值来说,运算符=会如你所愿地对相等性进行测试。但 是,用=对两个类类型的对象进行比较时,测试的是对象是否处于同一个内存单元,而不是它们是否具有相同的数据。Java类通常会定义一个名为 equals的方法来测试两个对象是否是我们直觉意义上的相等。在Java中不能重载=运算符(或任何运算符)。main方法(函数)及其他方法在Java中,函数被称为方法(method)。main方法(函数)在Java中的功能与在C和C+中一样。在Java中,main方法头部通常如下所示。public static void m

11、ain(String args)在Java中,所有的方法实际上,任意类型的所有代码都是在类中定义的。文件及包含文件Java中没有#inlude指示。Java中确实有一个import语句,可以导入一整个包(库)以供在一个类(或文件)中使用。java 程序的总体布局是由很多类组成的,每个类都处于一个文件中。如果所有的类都位于同一个目录(文件夹)中,Java需要使用某个类(文件)的时候,就会自动 地找到它。通过使用import语句,也可以将不同目录中的类(文件)组合起来。细节请参见Java程序设计与问题解决:基础篇的5.7节(包)。在Java中,一个类必须位于一个与类同名、但具有后缀.java的文件

12、中。例如,一个名为MyClass的类必须位于一个名为MyClass.java的文件中。类的编译版本会被自动地放在一个名为MyClass.class的文件中。类和方法(函数)定义Java对方法的定义及声明不加区别(或者,如某些作者所述,Java对方法的原型和方法的定义不加区别)。 所有的方法(函数)都只有定义而没有前向引用。没有独立于方法定义的“头部”或“特征”或“原型”。所有的方法必须都是在某个类中定义的。所有的类定义都 完全是在一个文件中完成的,没有任何类型的前向引用或接口文件。尤其是,所有的方法定义全都是在它们的类定义中给出的。细节请参见Java程序设计与问 题解决:基础篇的第4章(定义类

13、和方法)。Java中没有指针Java中没有指针类型。但Java是有指针的。实际上,所有的对象都是以指针的方式命名的。不过,指针被称为 引(reference),会被自动处理。例如,一个String类型的变量中会包含对一个字符串的引用(指针),但没有String指针类型。细节请参 见Java程序设计与问题解决:基础篇的4.3节。方法(函数)参数严格来讲,Java中只有一种参数传递机制,即,传值。但是,实际上,通常认为Java有两种类型的参数传递机 制:一种用于基本类型(比如int、double和char),另一种用于类类型。对基本类型,唯一的参数传递机制就是传值。对类类型,参数传递机制也被 称为

14、传值,但传递的是类对象的引用(指针)。这就允许方法(函数)修改对象中的数据,因此,有些人认为这种机制应该被称为传引用机制。这并不符合大多数通 常的传引用(call-by-reference)定义,但在实现一些简单任务时,它的表现与传引用非常相似。细节请参见Java程序设计与问题解决: 基础篇的第4章和第5章。数组Java数组与C或C+数组很类似,但它们还是有些区别的,Java数组的表现更好一些。Java中的数组“知道”它的范 围。如果a是一个数组,那么实例变量a.length中就包含了一个与数组可以承载的元素个数相等的整数。可以查看Java数组索引是否越界,如果代码试 图使用一个越界的数组索引

15、(下标),就会抛出一个异常。细节请参见Java程序设计与问题解决:基础篇的第6章。垃圾回收Java中的内存管理和垃圾回收是自动进行的。Java使用了new运算符来创建一个类类型的新对象(因此这个过程就是一种内存分配形式),但Java中没有其他的内存分配形式了。Java中没有程序员可以用来进行垃圾回收的机制。垃圾回收是自动进行的。其他的比较Java和C+中的注释在本质上是完全一样的。Java中没有全局变量。Java中没有枚举类型。Java中没有typedef。Java中没有结构或联合。可以像在C+中那样,在Java中对方法(函数)名进行重载,但在Java中不能对运算符进行重载。Java中没有多重

16、继承,但它确实通过接口恢复了多重继承的很多功能。更多关于接口的细节请参见Java程序设计与问题解决:基础篇的第7章。Java中没有模板,但它确实通过泛型恢复了模板的很多功能。在Java中,类可以有一个与类具有相同类型参数的构造器,但这个构造器没什么特殊的地位,不同于C+中的副本构造函数。Java 优势:跨平台。一次编译到处能执行。简单、面向对象、分布式、健壮、安全、体系结构中立、可移植、解释型、高性能、多线程、动态11. int i=0,尽可能的写出i自加1的方法 (解答题)i+ 、 +i 、 i+=112. 退出循环和结束当前循环的语句是什么(解答题)Break 、return 13. 描述

17、一下JVM加载class文件的原理机制?JVM中类的装载是由ClassLoader和它的子类来实现的,JavaClassLoader是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 14. 字符串的操作:写一个方法,实现字符串的反转,a) 如:输入abc,输出cba.public static void reverse (String str) char s = strpublic static void reverse (String str) String result=; for(int i=0;i= 0) char cSrc = strSource.toChar

18、Array(); char cTo = strTo.toCharArray(); int len = strFrom.length(); StringBuffer buf = new StringBuffer(cSrc.length); buf.append(cSrc, 0, i).append(cTo); i += len; int j = i; while (i = strSource.indexOf(strFrom, i) 0) buf.append(cSrc, j, i - j).append(cTo); i += len; j = i; buf.append(cSrc, j, cSr

19、c.length - j); return buf.toString(); return strSource; 15. 金额转换,阿拉伯数字的金额转换成中国传统的形式如:( ¥1011) (一千零一拾一元整)输出。/* 定义数组存放数字对应的大写 */ private final static String STR_NUMBER = 零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖 ; /* 定义数组存放位数的大写 */ private final static String STR_MODIFY = , 拾, 佰, 仟, 万, 拾, 佰, 仟, 亿, 拾, 佰, 仟 ; /* * 转

20、化整数部分 * * param tempString * return 返回整数部分 */ private static String getInteger(String tempString) /* 用来保存整数部分数字串 */ String strInteger = null;/ /* 记录.所在位置 */ int intDotPos = tempString.indexOf(.); int intSignPos = tempString.indexOf(-); if (intDotPos = -1) intDotPos = tempString.length(); /* 取出整数部分 *

21、/ strInteger = tempString.substring(intSignPos + 1, intDotPos); strInteger = new StringBuffer(strInteger).reverse().toString(); StringBuffer sbResult = new StringBuffer(); for (int i = 0; i strInteger.length(); i+) sbResult.append(STR_MODIFYi); sbResult.append(STR_NUMBERstrInteger.charAt(i) - 48); s

22、bResult = sbResult.reverse(); replace(sbResult, 零拾, 零); replace(sbResult, 零佰, 零); replace(sbResult, 零仟, 零); replace(sbResult, 零万, 万); replace(sbResult, 零亿, 亿); replace(sbResult, 零零, 零); replace(sbResult, 零零零, 零); /* 这两句不能颠倒顺序 */ replace(sbResult, 零零零零万, ); replace(sbResult, 零零零零, ); /* 这样读起来更习惯. */

23、replace(sbResult, 壹拾亿, 拾亿); replace(sbResult, 壹拾万, 拾万); /* 删除个位上的零 */ if (sbResult.charAt(sbResult.length() - 1) = 零 & sbResult.length() != 1) sbResult.deleteCharAt(sbResult.length() - 1); if (strInteger.length() = 2) replace(sbResult, 壹拾, 拾); /* 将结果反转回来. */ return sbResult.toString(); /* * 转化小数部分 例

24、:输入22.34返回叁肆 * * param tempString * return */ private static String getFraction(String tempString) String strFraction = null; int intDotPos = tempString.indexOf(.); /* 没有点说明没有小数,直接返回 */ if (intDotPos = -1) return ; strFraction = tempString.substring(intDotPos + 1); StringBuffer sbResult = new String

25、Buffer(strFraction.length(); for (int i = 0; i strFraction.length(); i+) sbResult.append(STR_NUMBERstrFraction.charAt(i) - 48); return sbResult.toString(); /* * 判断传入的字符串中是否有.如果有则返回点 * * param tempString * return */ private static String getDot(String tempString) return tempString.indexOf(.) != -1 ?

26、点 : ; /* * 判断传入的字符串中是否有-如果有则返回负 * * param tempString * return */ private static String getSign(String tempString) return tempString.indexOf(-) != -1 ? 负 : ; /* * 将一个数字转化为金额 * * param tempNumber 传入一个double的变量 * return 返一个转换好的字符串 */ public static String numberToChinese(double tempNumber) String pTemp

27、= String.valueOf(df.format(tempNumber); StringBuffer sbResult = new StringBuffer(getSign(pTemp) + getInteger(pTemp) + getDot(pTemp) + getFraction(pTemp); return sbResult.toString(); public static String numberToChinese(BigDecimal tempNumber) return numberToChinese(tempNumber.doubleValue(); /* * 替代字符

28、 * * param pValue * param pSource * param pDest */ private static void replace(StringBuffer pValue, String pSource, String pDest) if (pValue = null | pSource = null | pDest = null) return; /* 记录pSource在pValue中的位置 */ int intPos = 0; do intPos = pValue.toString().indexOf(pSource); /* 没有找到pSource */ if

29、 (intPos = -1) break; pValue.delete(intPos, intPos + pSource.length(); pValue.insert(intPos, pDest); while (true); /* * param args */ public static void main(String args) 16. float型float f=3.4是否正确? 答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.417. 编程题: 用最有效率的方法算出2乘以8等於几?用移位 : 2 318. Math.round(11.5)等

30、於多少? Math.round(-11.5)等於多少? Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;19. short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。20. main()int a=10;int b,c,d;b=a+;c=+a;d=10*a+;写出b,c,d的值:b=10,c=12,d=12021. 有四人,其中有一个人是小偷。他们个自说:a) 说

31、:我不是小偷b) 说:c是小偷c) 说:d是小偷d) 说:c在撒谎四个人中有三个人在说谎,有一个人说出了假话,请问谁是小偷?c是小偷 如果a说假话:则b、c都说了假话,不符合题意; 如果b说假话:则d也说了假话,不符合题意; 如果d说假话:则b和c其中一个说了假话,也不符合题意; 所以,只有c说了假话时,题意才符合。22. String str=new String10;错误的是:(选择两项)A. str10=null B.str0=未定义 C.str9=null D.str1=”1”23. 有一张表,里面的数据 字段 name 的值有填写错误 出受 要求写SQL 语句把出受 改为出售 Upd

32、ate 表名 set name = replace(name,出受,售) 24. 请写出“不用中间变量交换两个数”的实现过程。int a = 10 ;b = 8;a=a+b;b=a-b;a=a-b;25. 写出String类中你常用的方法?length() 字符串的长度、charAt() 截取一个字符、toCharArray()、equals()和equalsIgnoreCase() 比较两个字符串、equals()和=、indexOf()和lastIndexOf()、substring()、replace()、trim()、toLowerCase() 转换为小写、toUpperCase()

33、转换为大写、split()分割26. 写一段代码将字符串20080323显示成2008-03-23String str = 20080323;System.out.print(str.substring(0,4)+-+str.substring(4,6)+-+str.substring(6,8);27. try 里有一个return语句,那么紧跟在这个try后的finally 里的code会不会被执行,什么时候被执行,在return前还是后?答:会执行。在return 之前执行28. error和exception有什么区别? error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如

34、说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。29. String s = new String(xyz);创建了几个String Object? 答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s30. .public class Foo public static void main(String args) try return; finally A. 程序正常运行,但不输出任何结果。 B. 程序正常运行,并输出 “Finally”。C. 编译能通过,但运行时会出现一个例外。D.

35、 因为没有 catch 语句块,所以不能通过编译31. 关于外键约束不正确的是()a) 外键约束与唯一约束不能同时存在与一个字段b) 子表外键列的值必须在主表参照列表值的范围内,或者为空c) 主表外键值被子表参照时,主表记录不允许被删除d) 外键参照的是主表的主键或者唯一键32. for (int i =0; i j) continue;j-; while (+i -j) break tp;ln(“i=” +i “,j =”+j);运行结果是( )A. i = 1, j = 0B. i = 1, j = 4C. i = 3, j = 4D. i = 3, j = 0E. Compilation

36、 fails.44. int x = 3; int y = 1; if (x = y) 运行结果是( )A. x = 1B. x = 3C. Compilation fails.D. The code runs with no output.E. An exception is thrown at runtime.45. public class Alpha1 public static void main( String args ) boolean flag; int i=0; do flag = false; flag = i j) break; j-; while (+i -j) co

37、ntinue; while (i 5);运行结果是 : ( )A. i = 6 and j = 5B. i = 5 and j = 5C. i = 6 and j = 5D. i = 5 and j = 6E. i = 6 and j = 648. public class SwitchTest public static void main(String args) public static int switchIt(int x) int j = 1; switch (x) case 1: j+; case 2: j+;case 3: j+;case 4: j+;case 5: j+;de

38、fault: j+;return j + x;运行结果是 : ( )A. value = 3B. value = 4C. value = 5D. value = 6E. value = 7F. value = 849. int i = 0; for (; i 4; i += 2) 运行结果是 : ( )A. 0 2 4B. 0 2 4 5C. 0 1 2 3 4D. Compilation fails.E. An exception is thrown at runtime.50. for (int i =0; i = 0;i- ) Console.Write(stri);62. 创建数据库时

39、,对列EMail的约束为:Email like %,则以下()数据不可以录入数据库。A. B. C. D.ABC63.以下各项不属于ADO.NET体系结构的是()。a) DataSetb) DataReaderc) RecordSetd) Command64. 请给出ADO.net中DataReader和DataSet的区别DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库.任何对SqlConnection的操作都会引发DataReader的异常.因为DataReader每次只在内存中加载一条数据,所以占用的内存是很

40、小的.因为DataReader的特殊性和高性能.所以DataReader是只是向前读的 读了第一条后就不能再去读取第一条了dataSet则是将数据一次性加载在内存中.抛弃数据库连接读取完毕即放弃数据库连接因为DataSet将数据全部加载在内存中.所以比较消耗内存但是确比DataReader要灵活可以动态的添加行,列,数据.对数据库进行回传更新操作ADO.NET提供以下两个对象,用于检索关系数据并将其存储在内存中:DataSet和DataReader。DataSet提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系。DataReader提供一个来自数据库的快速、仅向前、只读数据流。dataset表示一个数据集,是数据在内存中的缓存。 可以包括多个表D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论