博文

转帖]JAVA开发者应该去的20个英文网站(2007-03-16 20:29:00)

摘要:
http://www.javaalmanac.com
Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处. 
http://www.onjava.com
O'Reilly的Java网站. 每周都有新文章. 
http://java.sun.com
官方的Java开发者网站 - 每周都有新文章发表. 
http://www.developer.com/java
由Gamelan.com 维护的Java技术文章网站. 
http://www.java.net
Sun公司维护的一个Java社区网站. 
http://www.builder.com
Cnet的Builder.com网站 - 所有的技术文章, 以Java为主. 
http://www.ibm.com/developerworks/java
IBM的Developerworks技术网站; 这是其中的Java技术主页. 
http://www.javaworld.com
最早的一个Java站点. 每周更新Java技术文章. 
http://www.devx.com/java
DevX维护的一个Java技术文章网站. 
http://www.fawcette.com/javapro
JavaPro在线杂志网站. 
http://www.sys-con.com/java
Java Developers Journal的在线杂志网站. 
http://www.javadesktop.org
位于Java.net的一个Java桌面技术社区网站. 
http://www.theserverside.com
这是一个讨论所有Java服务器端技术的网站. 
http://www.jars.com
提供Java评论服务. 包括各种framewor......

阅读全文(3050) | 评论:0

Java、Swing以及面向对象思想(转)(2007-03-16 20:14:00)

摘要: 2007-01-08 21:28:14   来自: 卡卡西 (上海)
  Java是面向对象语言的典范,学习Java的意思不仅仅是指学习Java语言,还要包括无比广阔的Java技术和思想。其他计算机语言如C,你完全可以在学会了C语言之后,说我会C,但在Java这儿却只是个开始。Java的语言很简单,很容易入门,但是真正的Java牛人是拿着Java这把雨伞走遍了 Java技术世界的角角落落的人,他必须有着无比广阔的Java技术和思想。面向对象的语言尤其像Java都有一个极其深厚的平台,语言只是你利用这个平台的工具,而这个平台为基础的技术和思想才是你要不断学习和掌握的。
    
     Swing是Java完美展现了面向对象思想的精华,可以说各种著名的设计模式都可以从其中清晰的找到,所以学习Swing的过程也是提高你面向对象编程技术的过程。甚至你能从中领悟更高层次的编程哲学。当然对于那些不习惯面向对象思想,或者虽然使用面向对象语言却并没有深刻理解的人来说,Swing的确是很复杂,很困难,这是因为这些人还没有从面向过程、回调函数等为主要特征的传统界面工具的思想和习惯中摆脱开来。可以说传统界面开发工具编程思想和习惯严重束缚了他们,使得他们在学习Swing这种极具面向对象精神的工具时觉得很困难。
    
    我记得以前上学时老师说,学习面向对象语言比较慢的人往往是那些C/PASCAL等传统过程语言非常精通的牛人。如果你以前没有传统计算机语言的基础,也许你学习面向对象语言的速度更快。这是因为面向对象语言的模型更能贴切地描述现实世界事物的模型,而传统过程性语言的编程思想往往束缚了你往真实世界转换。
    
    这使我想起金庸小说里面武林高手往往很难练成某项绝顶内功,而身无任何武功基础的主人公却往往能在极短的时间内练成这项武功,就是这个道理:复杂无用的武术招式往往是没有用的,真正的绝顶武功恰恰是最平凡不过的道理,武林高手被虚幻的假相迷惑在以往的招式中,却习惯不了武功的最真实、最简单的道理。
    
     Swing和传统语言的界面工具之间的关系恰恰像面向对象思想与传统面向过程思想之间的关系,如果一个人有太深厚的MFC经历,他往往觉得Swing难以掌握,......

阅读全文(3132) | 评论:0

JAVA多线程详解(2007-03-10 10:55:00)

摘要:一:理解多线程
多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。
多个线程的执行是并发的,也就是在逻辑上"同时",而不管是否是物理上的"同时"。如果系统只有一个CPU,那么真正的"同时"是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。
多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题,将在以后探讨。

二:在Java中实现多线程
我们不妨设想,为了创建一个新的线程,我们需要做些什么?很显然,我们必须指明这个线程所要执行的代码,而这就是在Java中实现多线程我们所需要做的一切!
真是神奇!Java是如何做到这一点的?通过类!作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程,我们以后的讨论都将围绕这个类进行。
那么如何提供给 Java 我们要线程执行的代码呢?让我们来看一看 Thread 类。Thread 类最重要的方法是 run() ,它为Thread 类的方法 start() 所调用,提供我们的线程所要执行的代码。为了指定我们自己的代码,只需要覆盖它!
方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:
public class MyThread extends Thread {
int count= 1, number;
public MyThread(int num) {
number = num;
System.out.println("创建线程 " + number);
}
public void run() {
while(true) {
System......

阅读全文(2409) | 评论:0

JAVA SOCKET 编程(3)(2007-03-10 10:48:00)

摘要:服务器Sockets
列表9.2是一个服务器应用程序的一部分.
列表9.2 一个简单的服务器程序
/**
* 一个监听端口并提供HTML文档的程序.
*/
class SimpleWebServer {
public static void main(String args[])
{
ServerSocket serverSocket = null;
Socket clientSocket = null;
int connects = 0;
try
{
{
// 建立一个服务器socket
serverSocket = new ServerSocket(80, 5);
while (connects < 5)
{
// 等待连接
clientSocket = serverSocket.accept();
//服务连接
ServiceClient(clientSocket);
connects++;
}
serverSocket.close();
}
catch (IOException ioe)
{
System.out.println("Error in SimpleWebServer: " + ioe);
}
}
public static void ServiceClient(Socket client)
throws IOException
{
DataInputStream inbound = null;
DataOutputStream outbound = null;
try
{
// 得到IO
inbound = new DataInputStream( client.getInputStream());
outbound = new DataOutputStream( client.getOutputStream());
//格式化输出(回应头和很少的HTML文档)
StringBuffer buffer = PrepareOutput();
String inputLine;

阅读全文(2763) | 评论:0

JAVA SOCKET 编程(2)(2007-03-10 10:46:00)

摘要:在Java中面向连接的类有两种形式,它们分别是客户端和服务器端.客户端这一部分是最
简单的,所以我们先讨论它.
列表9.1列出了一个简单的客户端的程序.它向一个服务器发出一个请求,取回一个HTML文
档,并把它显示在控制台上.
9.1一个简单的socket客户端
import java.io.*;
import java.net.*;
/**
* 一个简单的从服务器取回一个HTML页面的程序
* 注意:merlin是本地机器的名字
*/
public class SimpleWebClient {
public static void main(String args[])
{
try
{
// 打开一个客户端socket连接
Socket clientSocket1 = new Socket("merlin", 80);
System.out.println("Client1: " + clientSocket1);
// 取得一个网页
getPage(clientSocket1);
}
catch (UnknownHostException uhe)
{
System.out.println("UnknownHostException: " + uhe);
}
catch (IOException ioe)
{
System.err.println("IOException: " + ioe);
}
}
/**
*通过建立的连接请求一个页面,显示回应然后关闭socket
*/
public static void getPage(Socket clientSocket)
{
try
{
// 需要输入和输出流
DataOutputStream outbound = new DataOutputStream(
clientSocket.getOutputStream() );
DataInputStream inbound = new DataInputStream(
clientSocket.getInputStr......

阅读全文(2864) | 评论:0

JAVA SOCKET编程(1)(2007-03-10 10:44:00)

摘要:
Sockets有两种主要的操作方式:面向连接的和无连接的.面向连接的sockets操作就像一
部电话,他们必须建立一个连接和一人呼叫.所有的事情在到达时的顺序与它们出发时的
顺序时一样.无连接的sockets操作就像是一个邮件投递,,没有什么保证,多个邮件可能在
到达时的顺序与出发时的顺序不一样.
到底用哪种模式是邮应用程序的需要决定的.如果可靠性更重要的话,用面向连接的操作
会好一些.比如文件服务器需要他们的数据的正确性和有序性.如果一些数据丢失了,系统
的有效性将会失去.一些服务器,比如间歇性地发送一些数据块.如果数据丢了的话,服务
器并不想要再重新发过一次.因为当数据到达的时候,它可能已经过时了.确保数据的有序
性和正确性需要额外的操作的内消耗,额外的费用将会降低系统的回应速率.
无连接的操作使用数据报协议.一个数据报是一个独立的单元,它包含了所有的这次投递
的信息.把它想象成一个信封吧,它有目的地址和要发送的内容.这个模式下的socket不需
要连接一个目的的socket,它只是简单地投出数据报.无连接的操作是快速的和高效的,但
是数据安全性不佳.
面向连接的操作使用TCP协议.一个这个模式下的socket必须在发送数据之前与目的地的
socket取得一个连接.一旦连接建立了,sockets就可以使用一个流接口:打开-读-写-关闭
.所有的发送的信息都会在另一端以同样的顺序被接收.面向连接的操作比无连接的操作
效率更低,但是数据的安全性更高.
SUN一直是网络建设的支持者,所以在Java中支持sockets就不足为奇了.实际上,Java降低
了建立一个sockets程序的难度.每一个传输模式都被封装到了不同的类中.面向连接的类
将会首先被我们讨论.
......

阅读全文(3406) | 评论:0

关于文件操作的一点细节(引用别人的)(2007-03-06 09:11:00)

摘要:
/* --------------------------------------------- ** Test File Function ** author: smileonce 2005-06-16 */ #include <stdio.h> int freadline(FILE * f, char * buf); int main(int argc, char* argv[]) { FILE * f; int i; char buf[255]; // write some number to a file for testing. f = fopen("F:\\tmp\\FileSy\\Debug\\testfile.txt", "w"); for (i=0; i<10; i++) fprintf(f, "origin : %d\n", i); fclose(f); // test ... f = fopen("F:\\tmp\\FileSy\\Debug\\testfile.txt", "r+"); for (i=0; i<5; i++) { freadline(f, buf); printf("%s\n", buf); } fseek(f, 0L, SEEK_CUR); //use this to refresh the file, //same function as fflush(), fgetpos(), fsetpos(). for (i=5; i<8; i++) fprintf(f, "replace: %d\n", i); fclose(f); return 0; } // read a line from file stream int freadline(FILE * f, char * buf) { int count=0, ch; while((ch=fgetc(f)) != EOF) if (ch != '\n') buf[count++] = (char)ch; else break; buf[count++] = '\0......

阅读全文(3582) | 评论:0

通用JAVA安装步骤(2007-03-02 16:12:00)

摘要: 安装JDK
  
  从http://Java.sun.com/下载jdk-1_5_0_04-windows-i586-p.exe
  
  安装到指定路径,我选择D:\jdk1.5.0
  
  配置环境变量:
  
  Java_HOME: D:\jdk1.5.0
  PATH: D:\jdk1.5.0\bin;
  CLASSPATH: .;D:\jdk1.5.0\lib\tools.jar;
  D:\jdk1.5.0\jre\lib\rt.jar;
  
  安装WTK
  
  从http://Java.sun.com/下载j2me_wireless_toolkit-2_2-windows.exe
  
  安装到指定路径,我选择D:\WTK22
  
  安装Eclipse
  
  从http://www.eclipse.org/下载eclipse-SDK-3.0.1-win32.zip和
  
  NLpack-eclipse-SDK-3.0.x-win32.zip(语言包)
  
  解压缩eclipse-SDK-3.0.1-win32.zip即可,我的路径:D:\MyDevelopTools\eclipse
  
  解压缩NLpack-eclipse-SDK-3.0.x-win32.zip,得到features和plugins两个文件夹,把里面的文件分别拷入eclipse中相应的目录下即可
  
  安装Tomcat
  
  从http://jakarta.apache.org/下载jakarta-tomcat-5.5.9.zip
  
  解压缩jakarta-tomcat-5.5.9.zip即可
  
  配置环境变量:
  
  Tomcat_Home: D:\MyDevelopTools\tomcat-5.5.9
  
  PATH: D:\MyDevelopTools\tomcat-5.5.9;
  
  在eclipse中配置J2ME开......

阅读全文(7598) | 评论:3