2012/2/23
今天在命令行编译程序的时候遇到这样的一个问题:
使用了未经检查或不安全的操作,要了解详细信息,请使用 -Xlint:unchecked 重新编译。
网上查找资料后发现是以下的原因:
在编译java源文件时,你使用的是jdk1.5或以上时,可能出现这个问题。(使用了未经检查或不安全的操作;请使用 -Xlint:unchecked 重新编译。)
原因是jdk1.5里的集合类的创建和jdk1.4里有些区别,主要是jdk1.5里增加了泛型,也就是说可以对集合里的数据进行检查。在jdk1.5以前,如果没有指定参数类型,则JDK1.5编译器由于无法检查给出的参数是否合乎要求,而报告unchecked警告,这并不影响运行。按照提示,编译时指定参数即可取消这样的警告,或者为其制定类型参数。比如:
List temp = new ArrayList ();
temp.add("1");
temp.add("2");
修改为
List <String> temp = new ArrayList <String> ();
temp.add("1");
temp.add("2");
还有一个问题是关于package的,编译以及运行的时候没有指定package的路径,导致一直提示说没有找到相应的类,这个问题当时也是让我纠结了很久啊,水啊!!!
比如代码中添加了package mypackage,那么编译的时候应该是在对应的目录下执行javac mypackage.MyClass.java。
package好比java用来组织文件的一种虚拟文件系统。package把源代码.java文件,.class文件和其他文件有条理的进行一个组织,以供java来使用。package是将文件组织在一颗类似unix,linux文件系统的树结构里面,它有一个根"/",然后从根开始有目录和文件,目录中也还有文件和目录。
2012/2/26
JAVA_HOME:该环境变量的值就是 Java 所在的目录,一些 Java 版的软件和一些 Java 的工具需要用到该变量,设置 PATH 和 CLASSPATH 的时候,也可以使用该变量以方便设置。
PATH:指定一个路径列表,用于搜索可执行文件的。执行一个可执行文件时,如果该文件不能在当前路径下找到,则依次寻找 PATH 中的每一个路径,直至找到。或者找完 PATH 中的路径也不能找到,则报错。Java 的编译命令 (javac),执行命令 (java) 和一些工具命令 (javadoc, jdb 等) 都在其安装路径下的 bin 目录中。因此我们应该将该路径添加到 PATH 变量中。
CLASSPATH:也指定一个路径列表,是用于搜索 Java 编译或者运行时需要用到的类。在 CLASSPATH 列表中除了可以包含路径外,还可以包含 .jar 文件。Java 查找类时会把这个 .jar 文件当作一个目录来进行查找。通常,我们需要把 JDK 安装路径下的 jre/lib/rt.jar (Linux: jre/lib/rt.jar) 包含在 CLASSPATH 中。
2012/2/28
static数据和static方法。
通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例对象。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。可以将方法和变量都声明为static,static成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用一个static变量。
声明为static的方法有以下几条限制:
它们仅能调用其他的static 方法;
它们只能访问static数据;
它们不能以任何方式引用this 或super。
以下是代码示例:
class HelloWorld
{
int a1 = 6;
public static void main(String[] args) {
System.out.print(a1);
/* 成员变量不能直接调用(无法从静态上下文中引用非静态变量a1)*/
}
}
/*编译时报如下错:
HelloWorld.java:7: 无法从静态上下文中引用非静态变量 a1 System.out.print(a1); */
/*1 错误
因为非静态的变量a1没有初始化,改为如下程序*/
class HelloWorld
{
int a1 = 6;
public static void main(String[] args) {
HelloWorld abc=new HelloWorld();
System.out.print(abc.a1);
}
}
//编译通过。
socket 与 多线程
import java.net.*;
import java.io.*;
public class MultiUser extends Thread{
private Socket client;
public MultiUser(Socket c){
this.client=c;
}
public void run(){
try{
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream()); //Mutil User but can't parallel
while(true){
String str=in.readLine();
System.out.println(str);
out.println("has receive....");
out.flush();
if(str.equals("end"))
break;
}
client.close();
}
catch(IOException ex){
/*...*/
}
finally{
/*...*/
}
}
public static void main(String[] args)throws IOException{
ServerSocket server=new ServerSocket(5678);
while(true){
//transfer location change Single User or Multi User
MultiUser mu=new MultiUser(server.accept());
mu.start();
}
}
}