分享

Java基础

 turbow 2015-10-22

一、Java环境变量设置

windows 下配置JDK环境变量:

1. 安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为D:\java\jdk1.5.0_08;

2. 安装完成后,右击“我的电脑”,点击“属性”;

3. 选择“高级”选项卡,点击“环境变量”;

4. 在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”;

5. JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径D:\java\jdk1.5.0_08,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等都需要依*此变量);

6. Path使得系统可以在任何路径下识别java命令,设为:

%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

7. CLASSPATH为java加载类(classorlib)路径,只有类在classpath中,java命令才能识别,设为:

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(要加.表示当前路径)

%JAVA_HOME%就是引用前面指定的JAVA_HOME;

8.“开始”->;“运行”,键入“cmd”;

9. 键入命令“java-version”,“java”,“javac”几个命令,出现画面,说明环境变量配置成功;

linux 下配置JDK环境变量:

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中。

PATH和CLASSPATH都指定路径列表,列表中的各项(即各个路径)之间使用分隔符分隔。在Windows下,分隔符是分号(;),而在Linux下,分隔符是冒号(:)。

在此之前,我们需要做个假设。假设JDK在Windows下的安装路径是C:\jdk\,在Linux下的安装路径是/usr/local/jdk/。那么,安装后的JDK至少会包括如下内容:

1.C:\jdk(/usr/local/jdk)

2.|--bin

3.|--demo

4.|--include

5.|--jre

6.|—lib

Java环境变量在Windows下设置

Windows下使用set命令设置环境变量,为了使每一次启动计算机都设置这些环境变量,应该在系统盘根目录下的autoexec.bat文件中进行设置,如:

10.set JAVA_HOME=C:\jdk

11.set PATH=%JAVA_HOME%\bin;C:\Windows;C:\Windows\Command

12.set CLASSPATH=%JAVA_HOME%\jre\lib\rt.jar;.

有些版本的Windows不能用%变量名%来替换环境变量的内容,那么就只好直接写C:\jdk而不是%JAVA_HOME%了。另外,C:\Windows和C:\Windows\Command是Windows会自动加入路径的,所以可以从设置中去掉。如果在autoexec.bat中已经设置了PATH,那只需要将%JAVA_HOME%\bin加到原来设置PATH的那条语句中就行了。

CLASSPATH也可以根据需要设置或者加入其它的路径,比如你想把自己写的一些类放在C:\java中,就可以把C:\java也添加到CLASSPATH中去,setCLASSPATH=%JAVA_HOME%\jre\lib\rt.jar;C:\java;.。

注意,在CLASSPATH中包含了一个“当前目录(.)”。包含了该目录后,就可以到任意目录下去执行需要用到该目录下某个类的Java程序,即使该路径并未包含在CLASSPATH中也可以。原因很简单:虽然没有明确的把该路径包含在CLASSPATH中,但CLASSPATH中的“.”在此时就代表了该路径。

Java环境变量在Linux下设置

Linux下使用“变量名=变量值”设置变量,并使用export命令将其导出为环境变量。为了使每一次登录都自动设置好这些变量,你需要在~/.bash_profile里或者~./bashrc里进行设置,如

20.export JAVA_HOME=/usr/local/jdk

21.export PATH=$JAVA_HOME/bin:$PATH

22.export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:.

设置PATH时用的$JAVA_HOME是指替换变量JAVA_HOME的值到$JAVA_HOME所在位置。如上句实际就是export PATH=/usr/local/jdk/bin:$PATH。这句中$PATH也是同样的作用,不过这里的PATH是指以前设置的PATH变量的值,而非本次设置PATH变量的值。

注意,在CLASSPATH中包含了一个“当前目录(.)”。包含了该目录后,就可以到任意目录下去执行需要用到该目录下某个类的Java程序,即使该路径并未包含在CLASSPATH中也可以。原因很简单:虽然没有明确的把该路径包含在CLASSPATH中,但CLASSPATH中的“.”在此时就代表了该路径。

二、Java命令行使用

查看参数列表

虚拟机参数分为基本和扩展两类,在命令行中输入 JAVA_HOME/bin/java -help就可得到基本参数列表,在命令行输入 JAVA_HOME/bin/java -X 就可得到扩展参数列表。

基本参数说明

javac –help

image

java -help

image

1. -client,-server

这两个参数用于设置虚拟机使用何种运行模式,client 模式启动比较快,但运行时性能和内存管理效率不如 server 模式,通常用于客户端应用程序。相反,server 模式启动比 client 慢,但可获得更高的运行性能。
在 windows上,缺省的虚拟机类型为 client 模式,如果要使用 server模式,就需要在启动虚拟机时加-server 参数,以获得更高性能,对服务器端应用,推荐采用 server 模式,尤其是多个 CPU 的系统。在 Linux,Solaris 上缺省采用 server模式。

2. -hotspot

含义与 client 相同,jdk1.4 以前使用的参数,jdk1.4 开始不再使用,代之以 client。

3. -cp

运行Java要使用类的全名来运行。如果遇到文件夹,则需要-cp设置到顶级包下面,例如:

200811121226497087275

4. -classpath

虚拟机在运行一个类时,需要将其装入内存,虚拟机搜索类的方式和顺序如下:Bootstrap classes,Extension classes,User classes

Bootstrap 虚拟机自带的 jar 或 zip 文件,虚拟机首先搜索这些包文件,用System.getProperty("sun.boot.class.path")可得到虚拟机搜索的包名
Extension 位于 jre/lib/ext 目录下的 jar 文件,虚拟机在搜索完 Bootstrap后就搜索该目录下的 jar 文件。用System. getProperty("java.ext.dirs”)可得到虚拟机使用Extension 搜索路径
User classes 搜索顺序为当前目录、环境变量 CLASSPATH、-classpath

告知虚拟机搜索目录名、jar 文档名、zip 文档名,之间用分号;分隔。例如当你自己开发了公共类并包装成一个 common.jar 包,在使用 common.jar 中的类时,就需要用-classpath common.jar 告诉虚拟机从 common.jar 中查找该类,否则虚拟机就会抛出 java.lang.NoClassDefFoundError异常,表明未找到类定义。在运行时可用 System.getProperty(“java.class.path”)得到虚拟机查找类的路径。

使用-classpath 后虚拟机将不再使用 CLASSPATH 中的类搜索路径,如果-classpath 和 CLASSPATH 都没有设置,则虚拟机使用当前路径(.)作为类搜索路径。推荐使用-classpath 来定义虚拟机要搜索的类路径,而不要使用环境变量 CLASSPATH 的搜索路径,以减少多个项目同时使用 CLASSPATH 时存在的潜在冲突。例如应用 1 要使用a1.0.jar 中的类 G,应用 2 要使用 a2.0.jar 中的类 G,a2.0.jar 是 a1.0.jar 的升级包,当a1.0.jar,a2.0.jar 都在 CLASSPATH 中,虚拟机搜索到第一个包中的类 G 时就停止搜索, 如果应用1应用2的虚拟机都从CLASSPATH中搜索,就会有一个应用得不到正确版本的类G。

javac -classpath .;jar01.jar;jar02.jar;……;jarN.jar class_name.java :使用-classpath选项,指定了在编译Java源代码时,用到类库的位置。一般用于该类库不在当前CLASSPATH的环境变量中。

5. -D<propertyName>=value

在虚拟机的系统属性中设置属性名/值对,运行在此虚拟机之上的应用程序可用。当虚拟机报告类找不到或类冲突时可用此参数来诊断来查看虚拟机从装入类的情况。

200811121226497391728    
7. -verbose:gc

在虚拟机发生内存回收时在输出设备显示信息,格式如下: [Full GC 268K->168K(1984K), 0.0187390 secs],该参数用来监视虚拟机内存回收的情况
8. -verbose:jni

在虚拟机调用 native 方法时输出设备显示信息,格式如下:[Dynamic-linking native method HelloNative.sum ... JNI] 该参数用来监视虚拟机调用本地方法的情况,在发生 jni错误时可为诊断提供便利。

9. -version

显示可运行的虚拟机版本信息然后退出。

10. –showversion

显示版本信息以及帮助信息。 


扩展参数说明

javac –X

image

java -X

image    
1. -Xmixed 
设置-client 模式虚拟机对使用频率高的方式进行 Just-In-Time 编译和执行,对其他方法使用解释方式执行。该方式是虚拟机缺省模式。
2. -Xint 
设置-client模式下运行的虚拟机以解释方式执行类的字节码,不将字节码编译为本机码。
3. -Xbootclasspath:path
4. -Xbootclasspath/a:path 
5. -Xbootclasspath/p:path 
改变虚拟机装载缺省系统运行包 rt.jar 而从-Xbootclasspath 中设定的搜索路径中装载系统运行类。除非你自己能写一个运行时,否则不会用到该参数。
/a:将在缺省搜索路径后加上 path 中的搜索路径。
/p:在缺省搜索路径前先搜索 path 中的搜索路径。 
6. -Xnoclassgc 
关闭虚拟机对 class 的垃圾回收功能。 
7. -Xincgc
启动增量垃圾收集器,缺省是关闭的。增量垃圾收集器能减少偶然发生的长时间的垃圾回收造成的暂停时间。但增量垃圾收集器和应用程序并发执行,因此会占用部分 CPU 在应用程序上的功能。
8. -Xloggc:<file> 
将虚拟机每次垃圾回收的信息写到日志文件中,文件名由 file 指定,文件格式是平文件,内容和-verbose:gc 输出内容相同。
9. -Xbatch 
虚拟机的缺省运行方式是在后台编译类代码,然后在前台执行代码,使用-Xbatch参数将关闭虚拟机后台编译,在前台编译完成后再执行。
10. -Xms<size>
设置虚拟机可用内存堆的初始大小,缺省单位为字节,该大小为 1024 的整数倍并且要大于1MB,可用 k(K)或m(M)为单位来设置较大的内存数。初始堆大小为 2MB。
例如:-Xms6400K,-Xms256M
11. -Xmx<size>
设置虚拟机内存堆的最大可用大小,缺省单位为字节,该值必须为 1024 整数倍,并且要大于 2MB。可用 k(K)或 m(M)为单位来设置较大的内存数。缺省堆最大值为 64MB。
例如:-Xmx81920K,-Xmx80M
当应用程序申请了大内存运行时虚拟机抛出 java.lang.OutOfMemoryError: Java heap space 错误,就需要使用-Xmx 设置。
12. -Xss<size>
设置线程栈的大小,缺省单位为字节。与-Xmx 类似,也可用 K 或 M 来设置较大的值。通常操作系统分配给线程栈的缺省大小为 1MB。
另外也可在 java 中创建线程对象时设置栈的大小,构造函数原型为 Thread(ThreadGroup group, Runnable target, String name, long stackSize)。
13. -Xprof
输出 CPU 运行时的诊断信息
14. -Xfuture
对类文件进行严格格式检查,以保证类代码符合类代码规范。为保持向后兼容,虚拟机缺省不进行严格的格式检查。
15. -Xrs
减少虚拟机中操作系统的信号(singals)的使用。该参数通常用在虚拟机以后台服务方式运行时使用(如 Servlet)。
16. -Xcheck:jni
调用 JNI 函数时进行附加的检查,特别地虚拟机将校验传递给 JNI 函数参数的合法性,在本地代码中遇到非法数据时,虚拟机将报一个致命错误而终止。使用该参数后将造成性能下降。

三、其他命令行使用

1. jar

image

jar命令行格式为:

jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名,其中{ctxu}是jar命令的子命令,每次jar命令只能包含一个子命令。

使用JDK的jar命令打包,会自动在压缩包中生成一个META-INF目录,其中有一个MANIFEST.MF文件。使用jar命令进行如下压缩:

jar cf test.jar test

test.jar 压缩包中,包含一个test文件夹和一个META-INF文件夹,其中有一个MANIFEST.MF文件。

2. Windows/Linux下引用jar包,并用javac/java编译运行

1> Windows

假设要引用的jar放在D:/test目录下,名字为t1.jar, java源文件放在D:/test/src目录下,名字为t2.java。

编译:

javac -cp d:/test/t1.jar d:/test/src/t2.java

运行:

java -cp d:/test/t1.jar;d:/test/src t2

注意,分号后面没有空格,否则报错。

需要注意的是,如果java源文件是有package的,比如package是com.example, 源文件为com.example.t2.java.

比如文件的存储目录为: D:/test/src/com/example/t2.java, 然后比如t1.jar放在D:/test/lib/ 下面, 那么javac编译的时候要在D:/test/目录下进行。

可以用-d选项指定.class的生成位置。

javac -cp d:/test/lib/t1.jar;classes;. -d classes src/com/example/t2.java

2> Linux

假设jar包放在/home/bill目录下,名字为t1.jar,java源文件放在/home/bill/src目录下,名字为t2.java

编译:

javac -cp /home/bill/t1.jar /home/bill/src/t2.java

如果是引用多个jar,那么用冒号分开。

运行:

java -cp /home/bill/t1.jar:/home/bill/src t2

注意,这里是冒号分隔符,并且后面没有空格。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多