java 常用知识

1:关于设置的classpath:
  1) 一般的.jar 文件放在lib目录下。.class 文件放在classes目录下。.java文件放在src目录下。

  2) classpath可以用环境变量里的CLASSPATH设置。也可以用javac -classpath 命令参数设置,有一点注意:用javac -classpath 命令参数会将环境变量里的classpath覆盖掉。除非加上%classpath% ,改变CLASSPATH之后最好重起一下(一般注销一下,或把cmd关掉,再打开就可以了)。

     例如:java  -classpath %classpath%;.;D:/myjava/myjade/lib/jade.jar;

这里的 . 表示当前目录,..表示父目录。

具体的信息可通过加入命令参数 –verbose 察看,

 如:java –verbose  Hello  , javac –verbose  Hello.java.

3) 在一个.java文件里如果有package 命令行,那么设置classpath时就是到package为止。如:package examples.pingagent; examples/pingagent 在d:/myjava/myjade 下,那么将classpath 设为 d:/myjava/myjade即可,不必加上examples.pingagent。如果是jar包,则需要指到jar包的名称。如将classpath 设为 d:/myjava/myjade/mypackage.jar。

 4)如果提示信息提示 bad major version number 。则可能是机器上有多个版本的jdk(sdk),

且执行了底版本的jdk。用java –version 命令可以查看当前执行的jdk版本。在PATH路径里将高版本的%JAVAHOME%/bin放在前面就可以了。

注意:这些都是在windows机器上的经验,因为windows有注册表,所以有些默认设置。

在linux下不可以。

5)在命令行单敲java 命令,可以显示所有命令参数。

6)关于打包,用winrar压缩成.jar文件不行,需用jdk提供的jar命令。使用方法如下

   设 在e:/myapp/src 下有一个zfy 目录,zfy目录里有子目录也有java文件

   若想将zfy目录打包,其包名为my.jar(java improt 命令指定的包与 jar包名无关。只要jar下包括的包名正确就行。如zfy是一个包,它可以被打倒my.jar中,不影响使用)

   在命令行提示符下e:/myapp/src〉下输入jar cvf my.jar  zfy

   如果想将src下所有的东西打包,可输入jar cvf  my.jar  *

7) java 类的搜索顺序:

   执行java 和javac命令时,java基础类(自举类:rt.jar, sunrsasign.jar, jsse.jar,jce.jar ,用java –verbose 命令看到的open的类)有默认的搜索路径:先搜索java和javac所在目录的父目录下的jre 目录下的类文件,既jdk 下的jre/lib里面的类。如果没有,再搜索注册表里面指定的java runtime enviroment java运行环境下的lib目录(这里是C:/Program Files/Java/j2re1.4.1_01/lib).

    所以说classpath要指定的应是用户自己的类和包,和一些java基础类不包括得类,一般jre/lib下包括得类都不用指定。可将JAVA_HOME/lib里面的tools.jar 和dt.jar指定在CLASSPATH里。Tools.jar 包括bin目录包括得命令的源代码,没有tools.jar,javac命令不能运行。不在classpath里指定tools.jar,java 也可以默认的找到。

   用 java –verbose  > info.txt 命令,可将输出内容输出到info.txt文件中

2:变量(句柄)

    当创建一个句柄时,一定要初始化。

  常用的变量创建到堆栈(RAM ,CPU管理)中:char x='a' ;这样存取速度快。

  java类都是创建在堆(RAM,CPU不管理) 中:Character C=new Character('a');

   如果变量时类的字段,则java自动设置其默认值。如果是方法中的变量,则不管,需手动初始化。

  所以最好所有变量都自己初始化。

 3:关于 javac ,javadoc 命令

   如果原文件放在src文件夹下,想将编译后的.class 文件放在 classes文件夹下(两个都在e:/myapp下面), 则使用 javac命令时需使用 –d 参数,

如:javac –d /myapp/classes  MyClass.java 

   使用javadoc 命令可方便的生成.java文件的html帮助文档,放在doc 目录下。

   如:javadoc –d /myapp/doc  MyClass.java

 4 执行包内的文件

    如:在E:/download/xml/tools/javaxml/ch10下有一个这样的文件夹:com/oreilly/xml ,在其下有一个这样的文件LightweightXmlRpcServer.java。

     既该文件的全路经是: E:/download/xml/tools/javaxml/ch10/ com/oreilly/xml/LightweightXmlRpcServer.java.

该文件内有 package com.oreilly.xml行,既指定了该文件的包。

     如果要执行该类需这样编译: 首先进入 E:/download/xml/tools/javaxml/ch10

     执行: javac com/oreilly/xml/LightweightXmlRpcServer.java

     执行: javac com.oreilly.xml.LightweightXmlRpcServer  [args]

  一些其他java 编译命令:

    1)javac   -classpath lib/axis.jar;lib/jaxrpc.jar localhost/axis/Hello_jws/*.java

    2) java -Djava.ext.dirs=lib -cp . localhost.axis.Hello_jws.Main

5 正确使用"包"

在使用包的过程中有很多需要注意的小细节,这里把常见的问题都列举如下:

1、对类路径的设置通常有两种方法:

i)在系统的环境变量中设置,设置方法依据平台而变;

ii)以命令参数的形式来设置。

如:javac -classpath d:/jdk1.4.2/lib d:/cjm/edu/test/TestFile.java
java -classpath .;d:/jdk1.4.2/lib; d:/cjm  edu.test.TestFile

注意:i)javac和java命令有很大区别,可以这样区分,javac是一个平台命令,它对具体的平台文件进行操作,要指明被编译的文件路径。而java是一个虚拟机命令,它对类操作,即对类的描述要用点分的描述形式,并且不能加扩展名,还要注意类名的大小写。

ii)有一个很奇怪的问题,即javac命令后面的classpath默认包含当前目录(符合windows的习惯),可是在java命令后面的classpath却不包含当前目录,所以在它的classpath中一定不能忘了加上当前目录的描述,即加上"."。

2、在java程序中对类路径的描述用"."分隔,而且也有当前目录的概念。如要运行图1中的TestFile必须指明为 edu.test.TestFile。但是如果在类TestFile中要调用和它在同一目录中的TestString,则不必指明目录前缀。

3、在java程序中所有使用到的类都应该清楚的指明这个类的查找路径。一般有两种方法指明:

i)在程序的开始使用import关键字指明。如类TestFile中要用到FileInputStream类,则在程序头中加入import java.io.FileReader; 或import java.io.*;

ii)在程序中用到FileReader类处直接写完整路径,如: java.io.FileFileReader fin = new java.io.FileReader("filename");

注意:java.lang包总是被默认导入的。

4、类的目录结构一定要和类中第一句"包声明"一致。如类TestFile.class对应的.java文件的第一句必须包含:package edu.test;

确保类的存放路径和类中指明的"包路径"一致的方法一般有两种:

i)编写.java文件时存放的目录事先确定好,如TestFile.java就直接放在edu/test目录下,然后用下面的语句编译:

javac  -classpath d:/jdk1.4.2/lib d:/cjm/edu/test/TestFile.java
当编译完成后,产生的TestFile.class文件会出现在编译命令中java文件的描述路径中。即出现在d:/test/edu/test中

ii)通过-d参数的使用来编译程序。如使用下面的语句来编译:

javac  -d  d:/cjm  d:/temp/TestFile.java
将在-d后指定的目录d:/cjm下面自动按照packagek中指定的目录结构来创建目录,并且将产生的.class文件放在这个新建的目录下,即在d:/cjm下面建立/edu/test目录,然后产生的TestFile.class放在d:/cjm/edu/test目录下。

5、为了便于工程发布,可以将自己的类树打成.jar文件。如将图1中的edu下面的所有类文件打成一个.jar文件,可以先转到d:/cjm目录,再用下面的命令:

  jar -cvf test.jar edu/
这时会在d:/test下产生一个test.jar文件,此.jar文件中包含edu/下的完整目录结构和文件。使用这个.jar文件时,只需在classpath中指明.jar文件的存放路径即可。

6、对其它资源的使用,如图标文件,文本等资源文件的使用必须要注意,查找资源文件不应从类文件所在的目录开始,而是应该从package指定的类路径的起点开始(图1中从edu所在目录开始)。如图1中看到的文本文件word.txt在resource下面,而类文件TestFile.class在edu/test下,在TestFile.class中要使用到resource中的word.txt,要按如下操作:

fin= new FileReader("resource/word.txt");
而不应该是:fin= new FileReader("../../resource/word.txt");

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/coolriver/archive/2004/07/06/35424.aspx

你可能感兴趣的:(java 常用知识)