JasonWang's Blog

关于Maven

什么是Maven

Maven是一个自动化构建工具,最开始只适用于Java项目,后来逐渐支持C#,Ruby等项目的构建。Maven使用XML格式文件来描述一个项目的依赖,被称为Project Object Model(POM)。一个pom.xml描述了一个项目所有的配置,包括项目信息,项目所依赖的包等等。

Maven可以从一个或者多个代码仓库里(Maven 2 Central Repository)动态下载Java库文件以及插件,并将其保存到本地的仓库里(缓存),从而实现依赖的更新。

自动构建:https://en.wikipedia.org/wiki/Build_automation

《Effective Java》摘记

第一遍看完感觉没有学到什么,又看了一遍,然后自己找了些实例对比着理解了书上的要点,算是对Java编程有了更多的认识。以下是 《Effective Java 2nd edition》的摘记。

Consider static factory methods instead of constructors

相比构造函数,静态工厂方法有哪些优点了?首先,静态工厂方法有自己的名字,这可以增强程序的可读性;其次,静态工厂方法每次调用时,不用创建新的对象实例;第三,静态工厂方法可以返回其返回类型的任何子类型对象。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

public final class Boolean implements java.io.Serializable,
Comparable<Boolean>
{

public static final Boolean TRUE = new Boolean(true);

public static final Boolean FALSE = new Boolean(false);

....
//根据boolean值返回相应的Boolean对象
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}

}

如何在Java中调用C_C++方法

有时,需要在Java中直接调用本地(native)方法,把一些耗时的操作使用效率更高C/C++实现。在Java中调用本地方法通常被称为Java Native Interface(JNI)。那么,什么时候需要用到JNI了?

  • 需要在底层实现耗时更小、更快的程序
  • 在Java中需要调用本地代码库
  • 需要使用平台相关但Java标准库文件不支持的特性

接下来,我们就来看一看,如何在Java中通过JNI来调用本地方法?

Java程序编译过程

Java编译过程

一般,C/C++程序的编译过程可以分为5个步骤(见下图):Preprocessing(预处理),Parsing(解析), Translation(翻译),Assembling(汇编),Linking(链接)。

Java程序具有平台无关性,其在Java Virtual Machine(JVM)上执行,因此编译过程与C/C++大不相同:Java程序首先由编译器翻译成包含了Bytecode(字节码)的.class文件,程序执行时,由类加载器(class loader)将该类的字节码加载到JVM中,JVM会解释执行相应的Bytecode。