JDK目录主要结构以及主要文件
使用JAVA的第一步当然是下载JDK了,在我第一次学习java时,只管下载jdk,然后配置环境变量,今天是JAVA回炉重铸的第一天,现在我准备好好研究研究JDK里面的门道。本文使用JDK1.7。
下图是我的JDK目录:
可以看到里面有:
(1)bin文件夹
(2)db文件夹
(3)include文件夹
(4)jre文件夹
(5)lib文件夹
(6)src.zip压缩文件以及其他单独文件。
(1)bin文件夹:
放置JDK包含的一些开发工具执行文件,典型的比如:java.exe,javac.exe,javadoc.exe,这里联想到我们配好环境变量后编译,.java文件,和执行.class文件的指令.在dos输入:javac xxx.java指令,其实就是调用javac.exe对.java文件执行编译,输入java xxx,就是调用java.exe文件去执行编译好的class文件,我们之所以需要配置环境变量,是因为如果我们不配置,系统只能在jdk/bin目录下才可以执行javac,java等指令,而我们需要的实在任何地方都可以执行相关指令,于是我们把jdk/bin目录加入到Path环境变量里面,系统在当前目录找不到java.exe时,就在path中寻找到java.exe.之后我还将会继续深入研究jdk环境变量的配置方法。
注:相关工具和作用:
javac.exe – Java语言编译器
java.exe – Java应用程序启动器
javadoc.exe – Java API 文档生成器
apt.exe – java 注释处理器
appletviewer.exe – java applet 小程序查看器
jar.exe – java文件压缩打包工具
jdb.exe – Java 调试器.
javah.exe – C 头文件和stub生成器,用于写本地化方法,例如生产JNI样式的头文件
javap.exe – class文件 反编译工具
extcheck.exe – 用于检测jar包中的问题
(2)db文件夹:
纯Java开发的数据库Derby,是一个开源的100%Java开发的关系数据库,就是myeclipe自带的那个数据库哦。
(3)include文件夹:
包含c语言头文件,支持java本地接口与java虚拟机调试程序接口的本地编程技术,此目录下面是一些供C语言使用的标题文件(header file),有点不太懂这个目录,下来继续研究下。
(4)jre文件夹:
jre是java runtime environment的缩写,意为java程序执行时期的环境。此目录是Java运行时环境的根目录,包含java虚拟机,运行时的类包和java应用启动器,但不包含开发环境中的开发工具。它下面有bin子目录,包括平台所用工具和库存的可执行文件和DLL文件,在这个目录下依旧可以看到java.exe这个文件,而且我们配置环境变量是一般是把jre/bin目录配置进去,运行.class文件,这个java.exe和之前在jdk/bin/java.exe有没有什么区别?或者可不可以不配这个环境变量?我将会继续在之后自己动手尝试。lib子目录包括java运行环境的代码库、属性设置和资源文件,默认安装目录,安全管理。
(5)lib文件夹:
lib是library的缩写,意为JAVA类库或库文件,是开发工具使用的归档包文件。
(6)src.zip:
JDK7.0平台源码,下图是我解压后的目录结构
可以轻易的发现c语言代码,然后就什么都搞不懂了>_
java基本字符类型与c/c++区别
java的基本类型说来很简单,int,boolean,byte,short,char,long,float,double再加上一个大数运算用到的BigDecimal,BinInteger。今天在实验室做项目时,遇到了一个问题,就是设计数据库的同学设计表的时候设置id字段的number的最大位数为30,然后我使用myclispe,直接映射成对象(Hibernate),映射之后,问题出来了,id字段直接映射成了BigDecimal类型,然后和师兄师姐开始了对java数据类型所占位数的讨论,之后又扩展到c++基本类型,发现自己掌握的都不好,而且才发现java这一块和c/c++的区别,所以今晚回到寝室,整理一下,记录,深化学习。
(1)java 的基本类型
其实java的基本类型很简单,因为所占位数是固定的(boolean除外)
boolean 这个说法很多,JVM官方文档的意思是:单个的boolean 类型变量在编译的时候是使用的int类型,占4个字节。而对于boolean 类型的数组时,在编译的时候是作为byte array来编译的所以boolean 数组里面的每一个元件占一个字节。
byte 1个字节
short 2个字节
char 2个字节
int 4个字节
long 8个字节
float 4个字节
double 8个字节
除此之外,简单介绍下BigDecimal类型
BigDecimal:java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。BigDecimal用于大数的带小数运算。
BigInteger:用于大数的大数整数运算。其他同上。
回到我们项目的问题上面,因为Oracle数据库的number类型30位,是指十进制数字,可以达到30位,而一个int类型占4个字节,32位二进制,所以int型的取值范围应该为 -2^32<=int<=2^32-1,而这个十进制数远没有30位,同理double最多处理16位,而为了处理32为十进制,所以只能选择BigDecimal。
(2)c/c++的基本类型
哈哈!~~c/c++的基本类型就没这么简单了,因为他们的所占位数是可变的。下面说两个概念:
字节:八位就是一个字节,是固定概念。
字长:是指计算机一次能处理的二进制数据的长度,是一个非固定的概念。例如,8位计算机的字长为8,即一个字节, 32位计算机的字长位32,即4个字节,同理,64位计算机的字长为64,即8字节。
下面是C语言对每种数据类型长度的规定:
(a). short和long类型的长度不相同
(b). int类型通常同具体机器的物理字长相同
(c). short通常是16bits, int通常是16bits or 32bits每种编译器可以根据硬件的不同自由确定, 但是short和int必须最少是16bits, 而long类型必须最少是32bits, 并且short必须比int和long类型要短。
其他:sizeof() 运算符返回的是一种数据类型中所包含的字节数(bytes), AnsiC规定sizeof(char)必须返回1,但是sizeof()函数只是返回当前编译器的位数,不能代表操作系统或者硬件的位数,比如64位系统,可以装32位complier。
所以根据上面的内容:
1、char:该类型始终是一个字节,即8位。
2、int:通常一个字长
3、short:通常半个字长
4、long:一个或2个字长(在32位机器中为一个字长)。
5、float:为一个字长
6、double:两个字长
7、long double:为三个或四个字。
9、指针:同int
所以以此类推:
16位编译器
char :1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int: 2个字节
unsigned int : 2个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
32位编译器
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 理论应该8字节 ,但是现在很多64位编译器还是设置int为4字节。
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节