20.int 和 Integer 有什么区别
答案:int是基本类型。Integer是引用类型。Integer可以把String转换成int。
21.运行时异常与一般异常有何异同?
答案:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
22.说出一些常用的类,包,接口,请各举5个?
答案:常用类-System,ArrayList,FileInputStream,Thread,Socket.
常用的包-java.io,java.util,java.sql,java.javax.naming,java.NET
常用接口-Collection,Connection, Cloneable, Comparable, Serializable
23.说出ArrayList,Vector, LinkedList的存储性能和特性.
答案:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
24.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
注:因为这4个线程共享J,所以线程类要写到内部类中。
加线程:每次对j加一。
减线程:每次对j减一。
public class TestThreads
{
private int j=1;
//加线程
private class Inc implements Runnable
{
public void run()
{
for(int i = 0;i < 10;i++)
{
inc();
}
}
}
//减线程
private class Dec implements Runnable
{
public void run()
{
for(int i = 0;i < 10;i++)
{
dec();
}
}
}
//加1
private synchronized void inc()
{
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
//减1
private synchronized void dec()
{
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
//测试程序
public static void main(String[] args)
{
TestThreads test = new TestThreads();
//创建两个线程类
Thread thread = null;
Inc inc = test.new Inc();
Dec dec = test.new Dec();
//启动4个线程
for(int i = 0;i < 2;i++)
{
thread = new Thread(inc);
thread.start();
thread = new Thread(dec);
thread.start();
}
}
}
25.数组转换问题。
Object[] object = new Person[2];
Person [] person = new Person [3];
person = (Person [])object;//可以转换
int[] i = new int[2];
long[] l = new int[3];
i = (long[])l;//不可以转换
26.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。
Server.java:源代码
import java.Net.*;
import java.io.*;
class Server
{
public Server()
{
BufferedReader br = null;
PrintWriter pw = null;
try
{
ServerSocket server = new ServerSocket(8888);//建立服务器端
Socket socket = server.accept();//监听客户端
//得到该连接的输入流
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//得到该连接的输出流
pw = new PrintWriter(socket.getOutputStream(),true);
//先读后写
String data = br.readLine();
System.out.println(data);//输出到控制台
pw.println(data);//转发给客户端
}catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
//关闭读写流
br.close();
pw.close();
}catch(Exception e)
{}
}
}
public static void main(String[] args)
{
Server server = new Server();
}
}
Client.java:源代码
import java.net.*;
import java.io.*;
class Client
{
public Client()
{
BufferedReader br = null;
PrintWriter pw = null;
try
{
Socket socket = new Socket("localhost",8888);//与服务器建立连接,服务器要先启
//得到Socket的输入与输出流
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream(),true);
//先写后读
pw.println("Client:你好!");
String data = null;
while(true)
{
data = br.readLine();
if(data!=null) break;
}
System.out.println(data);
}catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
br.close();
pw.close();
}catch(Exception e)
{}
}
}
public static void main(String[] args)
{
Client c = new Client();
}
}
27.谈谈final, finally, finalize的区别。
答案:final 用于声明属性,方法和类,分别表示属性不可变,注意:如果是基本类型说明变
量本身不能改变,如果是引用类型,说明它不能指向其他的对象了。但对象还是可以改变
的。方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示无论是否出现异常总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
28.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
答案:可以继承其他类或完成其他接口,在swing编程中常用此方式。
29.Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
答案:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例
被实例化。而通常的内部类需要在外部类实例化后才能实例化。
30.&和&&的区别。
答案:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
另外,&也可以用于逻辑运算,与&&的区别在于&是非短路运算符,&&是短路运