求一些java基础知识的考题 复习题 100分送上 求一些java基础知识的考题,可以是各种题型。 想看看自己最近学习java的效果如何 ,顺便复习一下.100分送上 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://hi.baidu.com/xianchao/blog/item/822f6a3e8d96b43d70cf6cbc.html Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly2、ArrayList和Vector的区别,HashMap和Hashtable的区别 答:就ArrayList与Vector主要从二方面来说. 一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 二.数据增长:当需要增长时,Vector 默认增长为原来一培,而ArrayList却是原来的一半 就HashMap与HashTable主要从三方面来说。一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 三.值:只有HashMap可以让你将空值作为一个表的条目的key或value 3、char型变量中能不能存贮一个中文汉字?为什么? 答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的 4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 答:父类: package test; public class FatherClass { public FatherClass() { System.out.println("FatherClass Create"); } } 子类: package test; import test.FatherClass; public class ChildClass extends FatherClass { public ChildClass() { System.out.println("ChildClass Create"); } public static void main(String[] args) { FatherClass fc = new FatherClass(); ChildClass cc = new ChildClass(); } } 输出结果: C:>java test.ChildClass FatherClass Create FatherClass Create ChildClass Create 6、内部类的实现方式? 答:示例代码如下: package test; public class OuterClass { private class InterClass { public InterClass() { System.out.println("InterClass Create"); } } public OuterClass() { InterClass ic = new InterClass(); System.out.println("OuterClass Create"); } public static void main(String[] args) { OuterClass oc = new OuterClass(); } } 输出结果: C:>java test/OuterClass InterClass Create OuterClass Create 再一个例题: public class OuterClass { private double d1 = 1.0; //insert code here } You need to insert an inner class declaration at line 3. Which two inner class declarations are valid?(Choose two.) A. class InnerOne{ public static double methoda() {return d1;} } B. public class InnerOne{ static double methoda() {return d1;} } C. private class InnerOne{ double methoda() {return d1;} } D. static class InnerOne{ protected double methoda() {return d1;} } E. abstract class InnerOne{ public abstract double methoda(); } 说明如下: 一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 故 A、B 错 二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。 故 D 错 三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确 四.答案为C、E 7、垃圾回收机制,如何优化程序? 希望大家补上,谢谢 8、float型float f=3.4是否正确? 答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 9、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)? 答:Collection FrameWork如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements) Map提供key到value的映射 10、Java中异常处理机制,事件机制? 11、JAVA中的多形与继承? 希望大家补上,谢谢 12、抽象类与接口? 答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。 13、Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示? 答:Server端程序: package test; import java.net.*; import java.io.*; public class Server { private ServerSocket ss; private Socket socket; private BufferedReader in; private PrintWriter out; public Server() { try { ss=new ServerSocket(10000); while(true) { socket = ss.accept(); String RemoteIP = socket.getInetAddress().getHostAddress(); String RemotePort = ":"+socket.getLocalPort(); System.out.println("A client come in!IP:"+RemoteIP+RemotePort); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = in.readLine(); System.out.println("Cleint send is :" + line); out = new PrintWriter(socket.getOutputStream(),true); out.println("Your Message Received!"); out.close(); in.close(); socket.close(); } }catch (IOException e) { out.println("wrong"); } } public static void main(String[] args) { new Server(); } }; Client端程序: package test; import java.io.*; import java.net.*; public class Client { Socket socket; BufferedReader in; PrintWriter out; public Client() { try { System.out.println("Try to Connect to 127.0.0.1:10000"); socket = new Socket("127.0.0.1",10000); System.out.println("The Server Connected!"); System.out.println("Please enter some Character:"); BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); out = new PrintWriter(socket.getOutputStream(),true); out.println(line.readLine()); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println(in.readLine()); out.close(); in.close(); socket.close(); }catch(IOException e) { out.println("Wrong"); } } public static void main(String[] args) { new Client(); } }; 14、用JAVA实现一种排序,JAVA类实现序列化的方法(二种)? 如在COLLECTION框架中,实现比较要实现什么样的接口? 答:用插入法进行排序代码如下 package test; import java.util.*; class InsertSort { ArrayList al; public InsertSort(int num,int mod) { al = new ArrayList(num); Random rand = new Random(); System.out.println("The ArrayList Sort Before:"); for (int i=0;i<num ;i++ ) { al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); System.out.println("al["+i+"]="+al.get(i)); } } public void SortIt() { Integer tempInt; int MaxSize=1; for(int i=1;i<al.size();i++) { tempInt = (Integer)al.remove(i); if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue()) { al.add(MaxSize,tempInt); MaxSize++; System.out.println(al.toString()); } else { for (int j=0;j<MaxSize ;j++ ) { if (((Integer)al.get(j)).intValue()>=tempInt.intValue()) { al.add(j,tempInt); MaxSize++; System.out.println(al.toString()); break; } } } } System.out.println("The ArrayList Sort After:"); for(int i=0;i<al.size();i++) { System.out.println("al["+i+"]="+al.get(i)); } } public static void main(String[] args) { InsertSort is = new InsertSort(10,100); is.SortIt(); } } JAVA类实现序例化的方法是实现java.io.Serializable接口 Collection框架中实现比较要实现Comparable 接口和 Comparator 接口 15、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。 答:代码如下: package test; class SplitString { String SplitStr; int SplitByte; public SplitString(String str,int bytes) { SplitStr=str; SplitByte=bytes; System.out.println("The String is:′"+SplitStr+"′;SplitBytes="+SplitByte); } public void SplitIt() { int loopCount; loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split Byte+1); System.out.println("Will Split into "+loopCount); for (int i=1;i<=loopCount ;i++ ) { if (i==loopCount){ System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length())); } else { System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte))); } } } public static void main(String[] args) { SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人 0ewldfls=103",4); ss.SplitIt(); } } 16、JAVA多线程编程。 用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。 希望大家补上,谢谢 17、STRING与STRINGBUFFER的区别。 答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法 这几道是非常基础的Java题,可以看一下 看看这个:http://www.xxlinux.com/linux/article/development/soft/20060715/2762.html http://download.csdn.net/source/180311 一.判断 1.递归优点在于简化程序设计,使程序易读,缺点是降低效率. 2.方法重写实现的动态多态性也称为运行时多态. 3.声明类必须在源程序文件的开始处. 4.对于堆栈来说,其尾端称为栈顶. 5.虚拟机是用来解释Java 指令的软件,可以让Java 程序在任何机器上运行. 6.对于链表来说,可以对其进行随机访问. 7.DataInputStream 类一个可以读取各种基本数据类型的输入流. 8.多线程可以影响程序的响应速度,这表明多线程提高了程序的效率. 9.if 语句后必须有一对大括号. 10.continue 的作用是结束正在进行的,直接进入下一次循环. 11.当同步方法被一个线程调用时,则其他线程无法调用该方法. 12.Java 中的程序入口函数名称是Main(). 13.使用int name[][]=new int [3][3];和使用int name2[][]=new int[3][];两种方式定义数组后,数 组中的每一个元素都可用. 14.InetAddress 封装了Internet IP 地址,并支持用点分开的地址形式. 15.在J2SE 中,Integer 类定义了一个静态方法toString{},它将返回Integer 值的String 对象. 16.BufferedReader 类是一个装饰器,所以创建时需要另外一个输入流做参数. 17.在一个类中,静态方法只能调用本类中的其他静态成员(包括变量和成员函数). 18.子类不能定义与父类同名的方法. 19.除继承自Thread 类以及实现Runnable 接口外,使用Timer 和TimerTask 也可以实现多线程 的目的. 二. 1.下列选项属于字符流的有() A.ByteArrayOutputStream B.DataOutputStream C.InputStreamReader D.OutputStreamWriter 2.下列利用for 语句,实现了10 次循环的有() A.for(int i=1;i <=10i++){} B.for(int i=0;i <10;i++){} C.for(int i=0;i <=10;i++){} D.for(int i=1;i <10;i++){} 3.以下能够正确创建一个String 对象的有() A.String s=new String(); B. String s=null; C.String s="abc"; String s=new String("abc"); 4.下列关于Character 类说法正确的是() 三 . 单选题 1.下列选项中不属于多线程作用的是() A.使多CPU 系统更加有效. B.改善程序结构 C.提高内存存储空间. D 提高应用程序响应能力 2.以下对判断语句描述正确的是() A.if 语句不可以嵌套使用,只有if-else 才可以嵌套使用. B.if 语句可以嵌套使用,if -else 语句不可以嵌套使用. C.无论if 语句还是if-else 语句均不可以嵌套使用. D.if 语句可以嵌套使用,if-else 语句也可以嵌套使用. 3.下面以穷举法求素数的部分代码: for(int i=3;i <max;_____){ if(isPrimeNumber(i)){ System.out.println(i) } } 其中isPrimerNumber()方法为求其参数是否为素数,若是素数则返回true,则空格处填入下列 那个选项比较合适? A.i++ B.i+=& C.i+=2 D.i+=2 4.J2ME 的市场目标定位是() A.主要是面向手机的运行平台. B.面向消费电子产品,为消费电子产品提供一个Java 运行环境. C.主要目的是为台式机和工作站提供一个开发和运行的平台. D.主要目的是为企业提供一个应用服务器的运行和开发平台 5.有如下代码 for(int i=0;i <10;i__){} 则() A. 编译错误 B. 运行错误 C.可以编译并运行,循环10 次 D.可以编译并运行,无限循环. 6.在多线程程序中,当某种资源发生什么状况时被称为临界资源? A.被系统占用. B.多个进程共享. C.多个线程共享. D 达到最大或者是最小值. 7.当Java 程序在执行过程中产生了异常对象,并传递给Java 运行时的被称为 A.生成异常 B.中止执行 C.抛出异常 D.捕获异常. 8.利用继承Thread 类实现多线程,在Thread 的子类中,下列那个方法必须被实现. A. run() B. start() C.Thread() D.sleep() 9.int[][]a=new int[3][4]; for(int i=0;i <a.length;i++){ for(int j=0;j <a[i].length;j++){ a[i][j]=i+j; } } 则a[2][3]=() A.3 B.4 C.5 D.2 10.以下能够正确声明类的代码是() A public class Main{} B public void class Main{} C public class Main(){} D public void main(){} 11.一个已经连接的Socket 对象socket,调用socket 的什么方法可以得到输入流. A getSocketInputStream() B getOutputStream() C getChannel() D getOutputStream() 12.下列关于常量定义错误的是 A 常量表示只能对变量进行一次赋值 B.常量的值一旦设定,就不能再变更 C.常量要先赋值,后声明 D.声明常量的方法是在声明变量的语句前面加上final 关键字. 13.下列描述正确的是() A 静态变量的值不能变化. B. 静态变量就是常量,其值一旦被初始化就不能再改变 C. 静态变量只能做一次赋值运算 D. 一个类的懚有对象共享静态变量 14.下列连接属于服务器/客户端连接方式的是 A web B P2P 下载 C.pos 终端连接 D.分布式服务器之间的连接 15 对下列两个对象r1 r2 描述正确的选项是() Random r1=new Random() Random r2=new Random() A 结果不确定 B.r.nextInt()>r2.nextInt() C.r.nextInt()==r2.nextInt() D. r.nextInt() <r2.nextInt() 16 下列对Math 类描述错误的一项是() A Math 类在java.lang 包中 B Math.sqrt(num)用于计算一个数num 的平方根 C 支持各种不同的数学函数的方法在Math 类中以静态方法出现 D Math 类包含的数据操作有复数,对数,指数,三角函数 17 有如下类 public class Simple{ public static int i; } 若 s1,s2 均为Simple 的对象,则() A.s1 ,s2 的i 值 不一定相同 B. s1,s2 的i 值一定不同. C.s1,s2 的值没有任何关系,但当赋值后均不可改变 D s1,s2 的i 值永远相同. 18. 定义TestStaticBlock 类 public class TestStaticBlock{ static { System.out.println("在Static 块中"); } public TestStaticBlock(int i){ System.out.println("在TestStaticBlock 的构造函数中"); } } 则下面的代码执行后,static 被执行了多少次? A 4 B 0 C 2 D 1 19 读以下代码: public static void main(String[] args){ Socket [] sockets=new Socket[1024]; point =0; try{ ServerSocket serverSocket=new ServerSocket(9700); while(true&&point <1024){ sockets[point++]=serverSocket.accept(); System.out.println("ServerSocket connected"); } } catch(Exception e){ } } 对于以上代码描述正确的是() A 该代码建立一个服务器,并且监听9700 端口,可以连接1024 个客户端 B 该代码建立一 个客户端,对同一服务器进行了1024 次连接 C 该代码建立一个客户端,使用9700 端口连接到1024 个服务器上 D 该代码建立一个服务器,对一个客户端进行了 google baidu搜索一下嘛,蛮多的! 1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。2、String是最基本的数据类型吗?基本数据类型包括byte、int、char、long、float、double、boolean和short。java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类3、int 和 Integer 有什么区别Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。4、String 和StringBuffer的区别JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。5、运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。7、说出ArrayList,Vector, LinkedList的存储性能和特性ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。9、Collection 和 Collections的区别。 Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。10、&和&&的区别。 &和&&都可作为逻辑运算符“与”使用,但是&&是“短路与”,运算时先判断符号前面的表达式的值,如果能够确定整个表达式的值,则不进行符号后面的表达式的运算。另外,&也可作为位运算符使用。11、HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。12、final, finally, finalize的区别。 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 菜鸟求解! 如何设计一个通用地比较类? 双缓冲无法解决frame闪屏问题求教 object的instanceof是做什么的? null与''与0与空 到底怎么区别???? 来者有分,各位大虾的公司如何保护源代码? 请问如何用JDBC调用.txt or .csv文件,不用ODBC java“以文件结尾”是什么意思? java 中 如何将字符“AABB”转换成十六进制,oxAA ,0xBB java中普通的类能实现 KeyListener接口吗 关于Math类 老大们 帮我看下这个华为的面试题
1、作用域public,private,protected,以及不写时的区别
答:区别如下:
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly2、ArrayList和Vector的区别,HashMap和Hashtable的区别
答:就ArrayList与Vector主要从二方面来说.
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector 默认增长为原来一培,而ArrayList却是原来的一半
就HashMap与HashTable主要从三方面来说。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value 3、char型变量中能不能存贮一个中文汉字?为什么?
答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的 4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify 5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
答:父类:
package test;
public class FatherClass
{
public FatherClass()
{
System.out.println("FatherClass Create");
}
}
子类:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass
{
public ChildClass()
{
System.out.println("ChildClass Create");
}
public static void main(String[] args)
{
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass();
}
}
输出结果:
C:>java test.ChildClass
FatherClass Create
FatherClass Create
ChildClass Create 6、内部类的实现方式?
答:示例代码如下:
package test;
public class OuterClass
{
private class InterClass
{
public InterClass()
{
System.out.println("InterClass Create");
}
}
public OuterClass()
{
InterClass ic = new InterClass();
System.out.println("OuterClass Create");
}
public static void main(String[] args)
{
OuterClass oc = new OuterClass();
}
}
输出结果:
C:>java test/OuterClass
InterClass Create
OuterClass Create
再一个例题:
public class OuterClass {
private double d1 = 1.0;
//insert code here
}
You need to insert an inner class declaration at line 3. Which two inner class declarations are valid?(Choose two.)
A. class InnerOne{
public static double methoda() {return d1;}
}
B. public class InnerOne{
static double methoda() {return d1;}
}
C. private class InnerOne{
double methoda() {return d1;}
}
D. static class InnerOne{
protected double methoda() {return d1;}
}
E. abstract class InnerOne{
public abstract double methoda();
}
说明如下:
一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 故 A、B 错
二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。 故 D 错
三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确
四.答案为C、E 7、垃圾回收机制,如何优化程序?
希望大家补上,谢谢 8、float型float f=3.4是否正确?
答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 9、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
Map提供key到value的映射 10、Java中异常处理机制,事件机制? 11、JAVA中的多形与继承?
希望大家补上,谢谢 12、抽象类与接口?
答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。 13、Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?
答:Server端程序:
package test;
import java.net.*;
import java.io.*; public class Server
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server()
{
try
{
ss=new ServerSocket(10000);
while(true)
{
socket = ss.accept();
String RemoteIP = socket.getInetAddress().getHostAddress();
String RemotePort = ":"+socket.getLocalPort();
System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = in.readLine();
System.out.println("Cleint send is :" + line);
out = new PrintWriter(socket.getOutputStream(),true);
out.println("Your Message Received!");
out.close();
in.close();
socket.close();
}
}catch (IOException e)
{
out.println("wrong");
}
}
public static void main(String[] args)
{
new Server();
}
};
Client端程序:
package test;
import java.io.*;
import java.net.*; public class Client
{
Socket socket;
BufferedReader in;
PrintWriter out;
public Client()
{
try
{
System.out.println("Try to Connect to 127.0.0.1:10000");
socket = new Socket("127.0.0.1",10000);
System.out.println("The Server Connected!");
System.out.println("Please enter some Character:");
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(),true);
out.println(line.readLine());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
out.close();
in.close();
socket.close();
}catch(IOException e)
{
out.println("Wrong");
}
}
public static void main(String[] args)
{
new Client();
}
}; 14、用JAVA实现一种排序,JAVA类实现序列化的方法(二种)? 如在COLLECTION框架中,实现比较要实现什么样的接口?
答:用插入法进行排序代码如下
package test;
import java.util.*;
class InsertSort
{
ArrayList al;
public InsertSort(int num,int mod)
{
al = new ArrayList(num);
Random rand = new Random();
System.out.println("The ArrayList Sort Before:");
for (int i=0;i<num ;i++ )
{
al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));
System.out.println("al["+i+"]="+al.get(i));
}
}
public void SortIt()
{
Integer tempInt;
int MaxSize=1;
for(int i=1;i<al.size();i++)
{
tempInt = (Integer)al.remove(i);
if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())
{
al.add(MaxSize,tempInt);
MaxSize++;
System.out.println(al.toString());
} else {
for (int j=0;j<MaxSize ;j++ )
{
if (((Integer)al.get(j)).intValue()>=tempInt.intValue())
{
al.add(j,tempInt);
MaxSize++;
System.out.println(al.toString());
break;
}
}
}
}
System.out.println("The ArrayList Sort After:");
for(int i=0;i<al.size();i++)
{
System.out.println("al["+i+"]="+al.get(i));
}
}
public static void main(String[] args)
{
InsertSort is = new InsertSort(10,100);
is.SortIt();
}
}
JAVA类实现序例化的方法是实现java.io.Serializable接口
Collection框架中实现比较要实现Comparable 接口和 Comparator 接口 15、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
答:代码如下:
package test; class SplitString
{
String SplitStr;
int SplitByte;
public SplitString(String str,int bytes)
{
SplitStr=str;
SplitByte=bytes;
System.out.println("The String is:′"+SplitStr+"′;SplitBytes="+SplitByte);
}
public void SplitIt()
{
int loopCount;
loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split Byte+1);
System.out.println("Will Split into "+loopCount);
for (int i=1;i<=loopCount ;i++ )
{
if (i==loopCount){
System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
} else {
System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
}
}
}
public static void main(String[] args)
{
SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人 0ewldfls=103",4);
ss.SplitIt();
}
} 16、JAVA多线程编程。 用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。
希望大家补上,谢谢 17、STRING与STRINGBUFFER的区别。
答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
这几道是非常基础的Java题,可以看一下
http://www.xxlinux.com/linux/article/development/soft/20060715/2762.html
1.递归优点在于简化程序设计,使程序易读,缺点是降低效率.
2.方法重写实现的动态多态性也称为运行时多态.
3.声明类必须在源程序文件的开始处.
4.对于堆栈来说,其尾端称为栈顶.
5.虚拟机是用来解释Java 指令的软件,可以让Java 程序在任何机器上运行.
6.对于链表来说,可以对其进行随机访问.
7.DataInputStream 类一个可以读取各种基本数据类型的输入流.
8.多线程可以影响程序的响应速度,这表明多线程提高了程序的效率.
9.if 语句后必须有一对大括号.
10.continue 的作用是结束正在进行的,直接进入下一次循环.
11.当同步方法被一个线程调用时,则其他线程无法调用该方法.
12.Java 中的程序入口函数名称是Main().
13.使用int name[][]=new int [3][3];和使用int name2[][]=new int[3][];两种方式定义数组后,数
组中的每一个元素都可用.
14.InetAddress 封装了Internet IP 地址,并支持用点分开的地址形式.
15.在J2SE 中,Integer 类定义了一个静态方法toString{},它将返回Integer 值的String 对象.
16.BufferedReader 类是一个装饰器,所以创建时需要另外一个输入流做参数.
17.在一个类中,静态方法只能调用本类中的其他静态成员(包括变量和成员函数).
18.子类不能定义与父类同名的方法.
19.除继承自Thread 类以及实现Runnable 接口外,使用Timer 和TimerTask 也可以实现多线程
的目的.
二.
1.下列选项属于字符流的有()
A.ByteArrayOutputStream
B.DataOutputStream
C.InputStreamReader
D.OutputStreamWriter
2.下列利用for 语句,实现了10 次循环的有()
A.for(int i=1;i <=10i++){}
B.for(int i=0;i <10;i++){}
C.for(int i=0;i <=10;i++){}
D.for(int i=1;i <10;i++){}
3.以下能够正确创建一个String 对象的有()
A.String s=new String();
B. String s=null;
C.String s="abc";
String s=new String("abc");
4.下列关于Character 类说法正确的是()
三 . 单选题
1.下列选项中不属于多线程作用的是()
A.使多CPU 系统更加有效.
B.改善程序结构
C.提高内存存储空间.
D 提高应用程序响应能力
2.以下对判断语句描述正确的是()
A.if 语句不可以嵌套使用,只有if-else 才可以嵌套使用.
B.if 语句可以嵌套使用,if -else 语句不可以嵌套使用.
C.无论if 语句还是if-else 语句均不可以嵌套使用.
D.if 语句可以嵌套使用,if-else 语句也可以嵌套使用.
3.下面以穷举法求素数的部分代码:
for(int i=3;i <max;_____){
if(isPrimeNumber(i)){
System.out.println(i)
}
}
其中isPrimerNumber()方法为求其参数是否为素数,若是素数则返回true,则空格处填入下列
那个选项比较合适?
A.i++
B.i+=&
C.i+=2
D.i+=2
4.J2ME 的市场目标定位是()
A.主要是面向手机的运行平台.
B.面向消费电子产品,为消费电子产品提供一个Java 运行环境.
C.主要目的是为台式机和工作站提供一个开发和运行的平台.
D.主要目的是为企业提供一个应用服务器的运行和开发平台
5.有如下代码
for(int i=0;i <10;i__){}
则()
A. 编译错误
B. 运行错误
C.可以编译并运行,循环10 次
D.可以编译并运行,无限循环.
6.在多线程程序中,当某种资源发生什么状况时被称为临界资源?
A.被系统占用.
B.多个进程共享.
C.多个线程共享.
D 达到最大或者是最小值.
7.当Java 程序在执行过程中产生了异常对象,并传递给Java 运行时的被称为
A.生成异常
B.中止执行
C.抛出异常
D.捕获异常.
8.利用继承Thread 类实现多线程,在Thread 的子类中,下列那个方法必须被实现.
A. run()
B. start()
C.Thread()
D.sleep()
9.int[][]a=new int[3][4];
for(int i=0;i <a.length;i++){
for(int j=0;j <a[i].length;j++){
a[i][j]=i+j;
}
}
则a[2][3]=() A.3
B.4
C.5
D.2 10.以下能够正确声明类的代码是()
A public class Main{}
B public void class Main{}
C public class Main(){}
D public void main(){} 11.一个已经连接的Socket 对象socket,调用socket 的什么方法可以得到输入流. A getSocketInputStream()
B getOutputStream()
C getChannel()
D getOutputStream() 12.下列关于常量定义错误的是 A 常量表示只能对变量进行一次赋值
B.常量的值一旦设定,就不能再变更
C.常量要先赋值,后声明
D.声明常量的方法是在声明变量的语句前面加上final 关键字. 13.下列描述正确的是()
A 静态变量的值不能变化.
B. 静态变量就是常量,其值一旦被初始化就不能再改变
C. 静态变量只能做一次赋值运算
D. 一个类的懚有对象共享静态变量 14.下列连接属于服务器/客户端连接方式的是
A web
B P2P 下载
C.pos 终端连接
D.分布式服务器之间的连接 15 对下列两个对象r1 r2 描述正确的选项是()
Random r1=new Random()
Random r2=new Random()
A 结果不确定
B.r.nextInt()>r2.nextInt()
C.r.nextInt()==r2.nextInt()
D. r.nextInt() <r2.nextInt()
16 下列对Math 类描述错误的一项是() A Math 类在java.lang 包中
B Math.sqrt(num)用于计算一个数num 的平方根
C 支持各种不同的数学函数的方法在Math 类中以静态方法出现
D Math 类包含的数据操作有复数,对数,指数,三角函数 17 有如下类 public class Simple{ public static int i;
}
若 s1,s2 均为Simple 的对象,则() A.s1 ,s2 的i 值 不一定相同
B. s1,s2 的i 值一定不同.
C.s1,s2 的值没有任何关系,但当赋值后均不可改变
D s1,s2 的i 值永远相同. 18. 定义TestStaticBlock 类
public class TestStaticBlock{
static {
System.out.println("在Static 块中");
}
public TestStaticBlock(int i){
System.out.println("在TestStaticBlock 的构造函数中");
}
} 则下面的代码执行后,static 被执行了多少次? A 4
B 0
C 2
D 1 19 读以下代码:
public static void main(String[] args){
Socket [] sockets=new Socket[1024];
point =0;
try{
ServerSocket serverSocket=new ServerSocket(9700);
while(true&&point <1024){
sockets[point++]=serverSocket.accept();
System.out.println("ServerSocket connected");
}
}
catch(Exception e){ } } 对于以上代码描述正确的是() A 该代码建立一个服务器,并且监听9700 端口,可以连接1024 个客户端
B 该代码建立一 个客户端,对同一服务器进行了1024 次连接
C 该代码建立一个客户端,使用9700 端口连接到1024 个服务器上
D 该代码建立一个服务器,对一个客户端进行了
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
2、String是最基本的数据类型吗?
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
3、int 和 Integer 有什么区别
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
4、String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
5、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
7、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
9、Collection 和 Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
10、&和&&的区别。
&和&&都可作为逻辑运算符“与”使用,但是&&是“短路与”,运算时先判断符号前面的表达式的值,如果能够确定整个表达式的值,则不进行符号后面的表达式的运算。
另外,&也可作为位运算符使用。
11、HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
12、final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。