首先,需要明确的是Java已经不是一门简单的语言,也不是一门可以速成的语言了,而是一门功能强大,体系复杂的语言,需要花很大精力才能掌握并精通的语言。其次,Java即使在Web开发领域,也不等于仅SSH(Struts+Spring+Hibernate),这三种框架的流行,使多数程序员浮于开发的表面,不能深入进去,同时是Java在Web开发领域被PHP、Python甚至Node.js所超越的原因。最后,Java语言目前功能强大,但是如果要充分利用Java语言,不止是写配置文件简单操作一下数据库,就需要从底层来理解Java的运行机理,正像做C语言的需要理解硬件、操作系统、编译原理、汇编语言之后才能精通C语言,Java语言也一样,你需要理解JVM、ByteCode等底层机制。

本人用Java语言写过十年左右的程序,但是感觉还是属于Hello World层次,因此希望通过这个系列文章,重新学习和掌握Java语言。

这里首先说一下JDK的使用,用Eclipse或Netbeans惯了,绝大多数Java程序员都只会在IDE中进行开发,但是有很多开源项目,一般都是基于命令行编译的,大多采用Ant或Maven,所以要掌握Java语言,必须习惯命令行开发模式。在实际中,绝大多数Java程序员都不能只用JDK写出Hello World!

首先,建立一个项目的目录结构:

proj

    bin

    src

其中在src中存源码,在bin中保存类文件,在proj目录下进行编译及运行,要求包名为:com.bjcic.learn

首先在src目录下建立目录,com\bjcic\learn,然后在learn目录下新建一个文件TestApp.java,用任意一款编辑器打开,我用的是开源的Notepad++,将文件格式更改为utf-8无BOM格式,因为我们想在任意OS中都能显示中文。

输入如下内容:

package com.bjcic.learn;

public class TestApp {
public static void main(String[] args) {
System.out.println("Hello World");
}
}

打开Dos窗口,进入proj目录,输入如下命令(%JAVA_HOME%为你JDK的安装目录):

%JAVA_HOME%\bin\javac -cp . -d bin src\com\bjcic\learn\TestApp.java

这里用到了javac中两个最常用的选项,-cp是在你有类库需要包含时才需要,-d后面跟的路径是编译生成的class文件存放的目录。

然后是运行程序:

%JAVA_HOME%\bin\java -cp bin com.bjcic.learn.TestApp

至此,一个简单的Hello World总算是运行起来了,但是还是有问题的。程序中用System.out.println来输出,因为这个是一行一行进行处理的,没有进行缓冲处理,所以在实际程序中如果习惯这种用法,那么将非常影响性能。那么如果想输入信息,需要采用什么方式呢?答案是采用log4j或JDK自带的logger。

package com.bjcic.learn;

import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.Handler;
import java.util.logging.FileHandler;
import java.io.IOException;

public class TestApp {
private static Logger logger = Logger.getLogger(TestApp.class.getName());
private static Handler fh = null;
public static void main(String[] args) {
System.out.println("Hello World");
try {
fh = new FileHandler("mylog.txt");
} catch (IOException ex) {
System.exit(0);
}
logger.addHandler(fh);
logger.setLevel(Level.WARNING);
logger.log(Level.WARNING, "title", "p=1");
logger.log(Level.FINE, "title1", "p=2");
}
}

编译运行该程序会在proj目录下生成mylog.txt文件,里边有XML格式的日志内容。


当然,大多数情况下,我们都不使用JDK自带的Logger,而是使用log4j甚至slf4j。所以还需要研究一下怎样使用第三方类库。

首先下载最新版log4j:​​http://logging.apache.org/log4j/2.x/​​ ,将文件解压,在proj目录下新建lib目录,将\log4j-api-2.0-beta3.jar和log4j-core-2.0-beta3.jar拷到该目录下。

在bin目录下编辑log4j2.xml,在文件中输入如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
</Console>
</appenders>
<loggers>
<logger name="org.apache.log4j.xml" level="info"/>
<root level="debug">
<appender-ref ref="STDOUT"/>
</root>
</loggers>
</configuration>


编译该程序:

%JAVA_HOME%\bin\javac -cp .;lib\log4j-api-2.0-beta3.jar;lib\log4j-core-2.0-beta3.jar -d bin src\com\bjcic\learn\TestApp.java
运行该程序:
%JAVA_HOME%\bin\java -cp bin;lib\log4j-api-2.0-beta3.jar;lib\log4j-core-2.0-beta3.jar com.bjcic.learn.TestApp