今天在命令行编译程序的时候遇到这样的一个问题:
使用了未经检查或不安全的操作,要了解详细信息,请使用 -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文件系统的树结构里面,它有一个根"/",然后从根开始有目录和文件,目录中也还有文件和目录。
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(); } } }