黑马程序员技术交流社区

标题: 每日学五点知识总结(四) [打印本页]

作者: abc784990536    时间: 2015-1-1 12:06
标题: 每日学五点知识总结(四)
16. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

答:不可以。synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程才能获得该锁,重新进入可执行状态。

17. 用Java SOCKET编程,实现简单的Echo功能

如: 客户端从键盘输入 hi (当用户输出exit 退出程序),服务端响应为 hi(服务器要求为多线程)

解:服务器程序:

import Java.io.*;  
import Java.net.*;  
public class MyServer extends Thread{  
private Socket cq ;  
public MyServer(Socket cq)  
{  
this.cq = cq;  
}  
public void run()  
{  
try
{  
BufferedReader in=new BufferedReader(new InputStreamReader(cq.getInputStream()));  
PrintWriter out=new PrintWriter(cq.getOutputStream());  
while(true)  
{  
String str=in.readLine();  
System.out.println(str);  
out.println(“message: “+str);  
out.flush();  
if(str.equals(“exit“))  
break;  
}  
}  
catch(IOException e)  
{  
System.out.println(e.message());  
}  
}  
public static void main(String[] args) throws IOException{  
ServerSocket server=new ServerSocket(8009);  
while(true)  
{  
Socket s=server.accept();  
new MyServer(s).start();  
}  
}  
}
客户端程序:

import Java.net.*;  
import Java.io.*;  
public class MyClient{  
public static void main(String[] args)throws Exception  
{  
Socket server=new Socket(“localhost“,8009);  
BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));  
PrintWriter out=new PrintWriter(server.getOutputStream());  
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));  
while(true)  
{  
String str=br.readLine();  
out.println(str);  
out.flush();  
if(str.equals(“exit“)){  
break;  
}  
System.out.println(in.readLine());  
}  
server.close();  
}  
}
18.

public class OuterClass {  
private double d1 = 1.0;  
//insert code here ~~ line 3  
}
从下列选项中选择两个正确的答案放在 line 3 中(C E)
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();  
}
19. STRING与STRINGBUFFER的区别。
答:STRING的长度是不可变的,一旦一个String对象被创建,包含在这个实例中的内容(“字符串”)不可以被更改,直至这个对象被销毁,因此,指向一个 String对象的变量实质上是一个常量,String对象也被称为常量对象;STRINGBUFFER的长度是可变的,可以通过StringBuffer的append()、insert()、reverse()、setCharAt()、setLength()等方法,可以对这个字符串中的内容修改。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法

20. Java类实现序例化的方法是?
答:Java类要实现序列化,对应的类必须先实现Serializable和Externalizable这两种接口,然后就可以调用ObjectOutputStream的witeObject()方法来保存对象以及通过ObjeatInputStream的readObjeact()方法来读取保存的对象。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2