![](https://csdnimg.cn/release/download_crawler_static/4556822/bg3.jpg)
第二步,我们用JDK的javac.exe文件编译我们的Java源程序,由于JDK是国际版的,在编译的时候,如
果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作系统默认采
用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的
file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们
的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。然后,javac把转
换后的unicode格式的文件进行编译成.class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,
紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文
件。对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们
源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为UNICODE格式了。
这一步中,对于 JSP 源程序文件是不同的,对于 JSP,这个过程是这样的:即 WEB 容器调用 JSP 编译
器,JSP 编译器先查看 JSP 文件中是否设置有文件编码格式,如果 JSP 文件中没有设置 JSP 文件的编码格
式,则 JSP 编译器调用 JDK 先把 JSP 文件用 JVM 默认的字符编码格式(也即 WEB 容器所在的操作系统的
默认的 file.encoding)转化为临时的 Servlet 类,然后再把它编译成 UNICODE 格式的 class 类,并保存在临
时文件夹中。如:在中文 win2k 上,WEB 容器就把 JSP 文件从 GBK 编码格式转化为 UNICODE 格式,然
后编译成临时保存的 Servlet 类,以响应用户的请求。
第三步,运行第二步编译出来的类,分为三种情况:
A、 直接在 console 上运行的类
B、 EJB 类和不可以直接运行的支持类(如 JavaBean 类)
C、 JSP 代码和 Servlet 类
D、 JAVA 程序和数据库之间
下面我们分这四种情况来看。
a) 直接在 console 上运行的类
这种情况,运行该类首先需要 JVM 支持,即操作系统中必须安装有 JRE。运行过程是这样的:首先 java
启动 JVM,此 时 JVM 读出操作系统中保存的 class 文件并把内容读入内存中,此时内存中为 UNICODE 格
式的 class 类,然后 JVM 运行它,如果此时此类需要接收用户输入,则类会默认用 file.encoding 编码格式
对用户输入的串进行编码并转化为 unicode 保存入内存(用户可以设置输入流的编码格式)。程序运行后,
产生的字符串(UNICODE 编码的)再回交给 JVM,最 后 JRE 把此字符串再转化为 file.encoding 格式(用户
可以设置输出流的编码格式)传递给操作系统显示接口并输出到界面上。