《Java基础简答试题.docx》由会员分享,可在线阅读,更多相关《Java基础简答试题.docx(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java基础简答题:1 .个“.Java”源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以有很多个类,但只能有一个public的类,并且public的类名必须与文件名一致2 . Java 有没有 goto?答:Java中的保留字,Java现在没有在Java中使用。3 .说说&和&的区别答:&和&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时, 整个运算结果为true,否则,只要有一方为false,则结果为false。&还具有短路的功能,即如果第一个表达式为false,则不在计算第二个表达式,例如,对于!f (str! =null&! St
2、r. equals ( )表达式,当str为null时,后面的表达式不会执行,所以不会出现 Nu 11 PointerException 如果将&改为&,则会抛出 NulIPointerException 异常。if (x=33&+y0)y 会增 长,f(x=33&+y0)y 不会增长。&还可以用作位运算符,当&操作符两边的表达式不是Boolean类型时,&表示按位与操作,我们通常 使用OxOf来与一个整数进行&运算,来获取该整数的最低4个bit位,例如:0x31 &OxOf的结果为0x01。 4.在Java中如何跳出当前的多重嵌套循环?答:加break5. switch语句能否作用在byte
3、上,能否用在long上,能否作用在String上?答:在switch (exprl)中,exprl只能是一个整数表达式或者枚举数量(更大字体),整数表达式可以是 int基本类型或Integer包装类型,由于,byte, short, char都可以隐含转换为int,所以,这些类型以 及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能隠 含式转换成int类型。所以,它们不能用作switch语句中。6. short si = l;sl = sl+1;有什么错? short si = l;sl+=l:有什么错?答:对于short si = 1;
4、si = sl+1;由于si +1运算时会自动提升表达式的类型,所以结果是int型,在 赋值给short类型si时,编译将报告需要强制转换型的错误。对于short si = 1; si = sl+1;由于+=是Java语言规定的运算符,Java编译器会对它进行特殊处 理,因此可以正确编译。7. char型变量中能不能存储一个中文汉字?为什么?答:char型变量用来存储Unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字。但 是,如果某个特殊的汉字没有包含在Unicode编码字符集中,那么,这个char型变量中就不能存储这个特 殊汉字。Unicode编码占两个字节,cha
5、r类型也是占两个字节。8. 用最有效率的方法算出2乘以8等于多少?答:inta = 2 78, def” 62, xyz 65在hashSet中的存储顺序不是62, 65, 78,这些问题感谢 以前一个叫崔健的学员提出,最后通过査看源代码给他解群淸楚,看本次培训学员当中有多少能看懂源码。 LinkedHashSet按插入的顺序存储,那被存储对象的hashcode方法还有什么作用呢?学员想想!hashset集 合比较两个对象是否相等,首先看hashcode方法是否相等,然后看equals方法是否相等。new两个Student 插入到HashSet中,看HashSet的size,实现hashcod
6、e和equals方法后再看size。同一个对象可以在Vector中加入多次。往集合里面加元素,相当于集合里用根绳子连接到了 口标对象。 往HashSet中却加不了多次的。28. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用=还是equals()?它们有何区 别?答:Set里的元素是不能重复的,元素重复与否是使用equals。方法进行判断的。equals。和=方法决定 引用值是否指向同一对象equals。在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回 真值。29. 说出些常用的类,包,接口,请各举5个.答:常用的类:BufferedReader Buffere
7、dWriter FileReader FileWirter String Integer java. util.Date, System, Class, List, HashMap常 用 的 包: java, langjava, iojava, utiljava, sql , javax. servlet, org. apache, strtuts. action, org. hibernate常 用 的 接 口: RemoteListMapDocumentNodeList ,Servlet, HttpServ1etRequest, HttpServletResponse, Transacti
8、on(Hibernate)Session(Hibernate), HttpSession30. java中有几种类型的流? JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 答:字节流,字符流。字节流继承于InputStream Outputstream,字符流继承于!nputStreamReader OutputStreamWriter.在java, io包中还有许多其他的流,主:要是为了提高性能和使用方便31. super。和 thisO 的区别?答:Super。指父类的无参构造方法,this。指当前类的无参构造方法,两者都必须写在构造方法的第句32. 写出下面代码的
9、输出结果Package test;Public class OuterClassPrivate class InterClass Public InterClassSystem, out. println( MinterClass create ); Public OuterClass () InterClass ic= new InterClass();System, out. println( *outerclass create ); Public static void main(String args) OuterClass oc=new OuterClass(); 输出:inter
10、Class create Outerclass create33. 如何获取个目录下有多少个文件?答:File f=new File( *D:/);Int count=f. list(). length;34. Switch能否用string做参数?答:在Java7前,switc只能支抒byte, short, char, int或拧式对应的封装类以及Enum类型。在JAVA 7 中,String支持被加上了。35. Object有哪些公用方法?答:、方法equals测试的是两个对象是否相等、方法clone进行对象拷贝、方法getClass返回和当前对象相关的Class对象、方法notify,
11、notifyall,wait都是用来对给定对象进行线程同步的36. String、String Buffer 与 StringBuilder 的区别答:.String类型和StringBuffer类型的主要性能区别其实在于String是不可变的对象.StringBuffer 和 StringBuilder 底层是 char口数组实现的.StringBuffer是线程安全的,而StringBuilder是线程不安全的37 .抽象类和接口的区别答:.个类只能继承单个类,但是可以实现多个接口.接口强调特定功能的实现,而抽象类强调所属关系.抽象类中的所有方法并不一定耍是抽象的,你可以选择在抽象类中实现
12、些基本的方法。而接口要求 所有的方法都必须是抽象的38 .解析XML的几种方式的原理与特点:DOM、SAX、PULL答:QOM:消耗内存:先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据。这个写起来很简单,但是很消耗内存。要是数据过大,手机不够牛逼,可能手机直接死机.SAX:解析效率高,占用内存少,基于事件驱动的:更加简单地说就是对文档进行顺序扫描,当扫描 到文档(document)开始与结束、元素(element)开始与结朿、文档(document)结束等地方时通知事件处 理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。.PULL:与SAX类似
13、,也是基于事件驱动,我们可以调用它的next 方法,来获取下个解析事 件(就是开始文档,结束文档,开始标签,结束标签),当处于某个元素时可以调用XmlPullParser的 getAttributte。方法来获取属性的值,也可调用它的nextText()获取本节点的值。39 .wait()和 sleep。的区别答:.sleep来自Thread类,和wait来自Object类.调用sleep。方法的过程中,线程不会释放对象锁。而调用wait方法线程会释放对象锁.sleep睡眠后不出让系统资源,wait让出系统资源其他线程可以占用CPU.sleep(milliseconds)需要指定一个睡眠时间,
14、时间一到会门动唤醒40 .JAVA中堆和栈的区别,说下java的内存机制答:.基本数据类型变量和对象的引用都是在栈分配的.堆内存用来存放由new创建的対象和数组.类变量(static修饰的变量),程序在加我的时候就在堆中为类变量分配内存,堆屮的内存地址存 放在栈中.实例变量:当你使用java关键字new的时候,系统在堆中开辟并不一定是连续的空间分配给变量, 是根据零散的堆内存地址,通过哈希算法换算为长串数字以表示这个变量在堆中的“物理位置”,实例变 量的生命周期当实例变量的引用丢失后,将被GC (垃圾回收器)列入可回收“名单”中,但并不是马上 就释放堆屮内存.局部变量:由声明在某方法,或某代码
15、段里(比如for循环),执行到它的时候在栈中开辟内存,当 局部变量一但脱离作用域,内存立即释放41 .AVA多态的实现原理答:.抽象的来讲,多态的意思就是同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发 送消息就是函数调用).实现的原理是动态绑定,程序调用的方法在运行期动态绑定,追溯源码可以发现,JVM通过参数 的自动转型来找到合适的办法。42 .JAVA垃圾回收机制1 .什么是垃圾回收机:答:释放那些不再持有引用的对象的内存2 .怎么判断个对象是否需要收集?.引用计数(最简单古老的方法):指将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存 起来,当被引用次数变为零时就将其
16、释放的过程.对象引用遍历(现在大多数jvm使用的方法):对象引用遍历从组对象开始,沿着整个对象图I: 的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的个(至少个) 到达,则将它作为垃圾收集3 .几种垃圾回收机制.标记回收法:遍历对象图并且记录可到达的对象,以便删除不可到达的对象,一般使用单线程工作 并且可能产生内存碎片.标记压缩回收法:前期与第种方法相同,只是多了 步,将所有的存活对象压缩到内存的端, 这样内存碎片就可以合成一大块可再利用的内存区域,提高了内存利用率.复制回收法:把现有内存空间分成两部分,gc运行时,它把可到达对象复制到另一半空间,再清 空正
17、在使用的空间的全部对象。这种方法适用于短生存期的对象,持续复制长生存期的对象则导致效率 降低。.分代回收发:把内存空间分为两个或者多个域,如年轻代和老年代,年轻代的特点是对象会很快被回 收,因此在年轻代使用效率比较高的算法。当一个对象经过几次回收后依然存活,对象就会被放入43 .请写出Eclipse常用的5个快捷键(复制粘贴不算),并阐述其作用。1 .Ctrl+1 快速导包和抛异常2 . Alt+shif t+s+r 快速生成 get 和 set3 . Alt+shif t+s+o 快速生成构造4 .Alt+shift+s 快速导包5 .Ctrl+z 撤销6 .Ctrl+D 删除当前行7 .C
18、trl+shirt+/注释多行8 . Alt+shif t+s+v 快速重写方法44.请谈谈什么是对象的序列化与反序列化,如何使用?使用的注意事项?答:序列化:把对象转换为字节的过程。反序列化:把字节转换为对象的过程。使用:如果这个接口相要实现序列化必须要SerializableObjectInputstream对以前使用ObjectOutputStream写入的基本数据和対象进行反序列化注意事项:1.当个对象被序列化时,值保存对象的非静态成员变量,不能保存任何的成员方法2.如果 个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出 个NotSerializ
19、ableException。可以将这个引用标记transient,那么对象仍然可以序列化选择题:1 .下列关于栈的描述中错误的是(B)A.栈是先进后出的线性表B栈只能顺序存储 C栈具有记忆作用D对栈的插入弓删除操作中,不需耍改变栈底指针分析:栈是链式存储的2 . Java中,所有类的根类是(A)A. java. lang. Object B. java. lang. Class C. java, applet. Applet D. java. awt. Frame3 .下列属于合法的Java标识符是(A )A _cat B 5books C +static D -3.141594 .下列叙述中
20、,正确的是(A )A Java语言的标识符是区分大小写的 B源文件名与public类名可以不相同C源文件扩展名为.jar D源文件中public类的数目不限5 . char类型的取值范围是(A )。A 2-7 27-1B 216T C -2152151 D 28T6 .在Java中,能实现多重继承效果的方式是(C )A内部类B适配器 C接口 D同步7 .下列方法中可以用来创建一个新线程的是(C )。A 实现 java. lang. Runnable 接 口并重写 start。方法 B 实现 java. iang. Runnable 接口并重写 runO 方 法 C继承java. lang. T
21、hread类并重写run。方法 D继承java. lang. Thread类并重写slarlO方法 8.下列关于线程优先级的说法中,正确的是(C )A.线程的优先级是不能改变的B.线程的优先级是在创建线程时设置的C.在创建线程后的任何时候都可以设置D. B和C9 .阅读下列代码后public class Personint arr=new int10;public static void main(String args )System, out. println(arrl);)正确的说法是(A )A编译时将产生错误B编译时正确,运行时将产生错误C输出零 D输出空10 .下列哪些语句关于内存回收的说明是正确的?( B )A,程序员必须创建一个线程来释放内存 B,内存回收程序负责释放无用内存C,内存回收程序允许程序员直接释放内存I),内存回收程序可以在指定的时间释放内存对象11 .下列程序段的输出结果是:(B )Void complicatedexpression_r()int x=20, y=30;boolean b;b=x50&y60|x50&y-60|x60|x-50&y-60;System, out. println(b);A, ture B,
限制150内