您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > Java经典面试题大全-带答案
Java经典面试题带答案一、单项选择题1.Java是从()语言改进重新设计。A.AdaB.C++C.PasacalD.BASIC答案:B2.下列语句哪一个正确()A.Java程序经编译后会产生machinecodeB.Java程序经编译后会产生bytecodeC.Java程序经编译后会产生DLLD.以上都不正确答案:B3.下列说法正确的有()A.class中的constructor不可省略B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行D.一个class只能定义一个constructor答案:C4.提供Java存取数据库能力的包是()A.java.sqlB.java.awtC.java.langD.java.swing答案:A5.下列运算符合法的是()A.&&B.C.ifD.:=答案:A6.执行如下程序代码a=0;c=0;do{--c;a=a-1;}while(a0);后,C的值是()A.0B.1C.-1D.死循环答案:C7.下列哪一种叙述是正确的()A.abstract修饰符可修饰字段、方法和类B.抽象方法的body部分必须用一对大括号{}包住C.声明抽象方法,大括号可有可无D.声明抽象方法不可写出大括号答案:D8.下列语句正确的是()A.形式参数可被视为localvariableB.形式参数可被字段修饰符修饰C.形式参数为方法被调用时,真正被传递的参数D.形式参数不可以是对象答案:A9.下列哪种说法是正确的()A.实例方法可直接调用超类的实例方法B.实例方法可直接调用超类的类方法C.实例方法可直接调用其他类的实例方法D.实例方法可直接调用本类的类方法答案:D二、多项选择题1.Java程序的种类有()A.类(Class)B.AppletC.ApplicationD.Servlet2.下列说法正确的有()A.环境变量可在编译sourcecode时指定B.在编译程序时,所能指定的环境变量不包括classpathC.javac一次可同时编译数个Java源文件D.javac.exe能指定编译结果要置于哪个目录(directory)答案:BCD3.下列标识符不合法的有()A.newB.$UsdollarsC.1234D.car.taxi答案:ACD4.下列说法错误的有()A.数组是一种对象B.数组属于一种原生类C.intnumber=[]={31,23,33,43,35,63}D.数组的大小可以任意改变答案:BCD5.不能用来修饰interface的有()A.privateB.publicC.protectedD.static答案:ACD6.下列正确的有()A.callbyvalue不会改变实际参数的数值B.callbyreference能改变实际参数的参考地址C.callbyreference不能改变实际参数的参考地址D.callbyreference能改变实际参数的内容答案:ACD7.下列说法错误的有()A.在类方法中可用this来调用本类的类方法B.在类方法中调用本类的类方法时可直接调用C.在类方法中只能调用本类中的类方法D.在类方法中绝对不能调用实例方法答案:ACD8.下列说法错误的有()A.Java面向对象语言容许单独的过程与函数存在B.Java面向对象语言容许单独的方法存在C.Java语言中的方法属于类中的成员(member)D.Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同答案:ABC9.下列说法错误的有()A.能被java.exe成功运行的javaclass文件必须有main()方法B.J2SDK就是JavaAPIC.Appletviewer.exe可利用jar选项运行.jar文件D.能被Appletviewer成功运行的javaclass文件必须有main()方法答案:BCD三、判断题1.Java程序中的起始类名称必须与存放该类的文件名相同。()答案:正确2.Unicode是用16位来表示一个字的。()答案:正确3.原生类中的数据类型均可任意转换。()答案:错误1.分别写出BOOL,int,float,指针类型的变量a与“零”的比较语句。答案:BOOL:if(!a)orif(a)int:if(a==0)float:constEXPRESSIONEXP=0.000001if(aEXP&&a-EXP)pointer:if(a!=NULL)orif(a==NULL)2.请说出const与#define相比,有何优点?答案:1)const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。3.简述数组与指针的区别?数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。(1)修改内容上的差别chara[]=“hello”;a[0]=‘X’;char*p=“world”;//注意p指向常量字符串p[0]=‘X’;//编译器不能发现该错误,运行时错误(2)用运算符sizeof可以计算出数组的容量(字节数)。sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p所指的内存容量。C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。chara[]=helloworld;char*p=a;coutsizeof(a)endl;//12字节coutsizeof(p)endl;//4字节计算数组和指针的内存容量voidFunc(chara[100]){coutsizeof(a)endl;//4字节而不是100字节}4.类成员函数的重载、覆盖和隐藏区别?答案:a.成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual关键字。c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)5.Therearetwointvariables:aandb,don’tuse“if”,“?:”,“switch”orotherjudgementstatements,findoutthebiggestoneofthetwonumbers.答案:((a+b)+abs(a-b))/26.如何打印出当前源文件的文件名以及源文件的当前行号?答案:cout__FILE__;cout__LINE__;__FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。7.main主函数执行完毕后,是否可能会再执行一段代码,给出说明?答案:可以,可以用_onexit注册一个函数,它会在main之后执行intfn1(void),fn2(void),fn3(void),fn4(void);voidmain(void){Stringstr(zhanglin);_onexit(fn1);_onexit(fn2);_onexit(fn3);_onexit(fn4);printf(Thisisexecutedfirst.\n);}intfn1(){printf(next.\n);return0;}intfn2(){printf(executed);return0;}intfn3(){printf(is);return0;}intfn4(){printf(This);return0;}The_onexitfunctionispassedtheaddressofafunction(func)tobecalledwhentheprogramterminatesnormally.Successivecallsto_onexitcreatearegisteroffunctionsthatareexecutedinLIFO(last-in-first-out)order.Thefunctionspassedto_onexitcannottakeparameters.8.如何判断一段程序是由C编译程序还是由C++编译程序编译的?答案:#ifdef__cpluspluscoutc++;#elsecoutc;#endif9.文件中有一组整数,要求排序后输出到另一个文件中答案:#include#includeusingnamespacestd;voidOrder(vector&data)//bubblesort{intcount=data.size();inttag=false;//设置是否需要继续冒泡的标志位for(inti=0;icount;i++){for(intj=0;jcount-i-1;j++){if(data[j]data[j+1]){tag=true;inttemp=data[j];data[j]=data[j+1];data[j+1]=temp;}}if(!tag)break;}}voidmain(void){vectordata;ifstreamin(c:\\data.txt);if(!in){coutfileerror!;exit(1);}inttemp;while(!in.eof()){intemp;data.push_back(temp);}in.close();//关闭输入文件流Order(data);ofstreamout(c:\\result.txt);if(!out){coutfileerror!;exit(1);}for(i=0;idata.size();i++)outDATA[I]?;10.链表题:一个链表的结点结构structNode{intdata;Node*next;};typedefstructNodeNode;(1)已知链表的头结点head,写一个函数把这个链表逆序(Intel)Node*ReverseList(Node*head)//链表逆序{if(head==NULL||head-next==NULL)returnhead;Node*p1=head;Node*p2=p1-next;Node*p3=p2-next;p1-next=NULL;while(p3!=NULL){p2-next=p1;p1=p2;p2=p3;p3=p3-next;}p2-next=p1;head=p2;returnhead;}2)已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)Node*Merge(Node*head1,Node*head2){if(head1==NULL)returnhead2;if(head2==NULL)returnhead1;Node*head=NULL;Node*p1=NULL;Node*p2=NULL;if(head1-datahead2-data){head=head1;p1=head1-next;p2=head2;}else{head=head2;p2=head2-next;p1=head1;}Node*pcurrent=head;while(p1!=NULL&&p2!=NULL){if(p1-data=p2-data){pcurrent-
本文标题:Java经典面试题大全-带答案
链接地址:https://www.777doc.com/doc-5538590 .html