java 学习笔记

java 学习笔记

基础知识

  1. 编写Java程序时,应注意以下几点:
    • 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。
    • 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
    • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
    • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。
    • 主方法入口:所有的Java 程序由public static void main(String []args)方法开始执行。
  2. Java标识符

    Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。关于Java标识符,有以下几点需要注意:

    • 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
    • 首字符之后可以是任何字符的组合
    • 关键字不能用作标识符
    • 标识符是大小写敏感的
    • 合法标识符举例:age$salary_value__1_value
    • 非法标识符举例:123abc、-salary
  3. Java修饰符

    像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

    • 可访问修饰符 : default, public , protected, private
    • 不可访问修饰符 : final, abstract, strictfp
  4. 源文件声明规则 当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。
    • 一个源文件中只能有一个public类
    • 一个源文件可以有多个非public类
    • 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。如果一个类定义在某个包中,那么package语句应该在源文件的首行。
    • 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
    • import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明
  5. 内置数据类型

    Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型

    • byte:
      • byte数据类型是8位、有符号的,以二进制补码表示的整数;
      • 最小值是-128(-2^7);
      • 最大值是127(2^7-1);
      • 默认值是0;
      • byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;
      • 例子:byte a = 100,byte b = -50。
    • short:
      • short数据类型是16位、有符号的以二进制补码表示的整数
      • 最小值是-32768(-2^15);
      • 最大值是32767(2^15 – 1);
      • Short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一;
      • 默认值是0;
      • 例子:short s = 1000,short r = -20000。
    • int :
      • int数据类型是32位、有符号的以二进制补码表示的整数;
      • 最小值是-2,147,483,648(-2^31);
      • 最大值是2,147,483,647(2^31 – 1);
      • 一般地整型变量默认为int类型;
      • 默认值是0;
      • 例子:int a = 100000, int b = -200000。
    • long:
      • long数据类型是64位、有符号的以二进制补码表示的整数;
      • 最小值是-9,223,372,036,854,775,808(-2^63);
      • 最大值是9,223,372,036,854,775,807(2^63 -1);
      • 这种类型主要使用在需要比较大整数的系统上;
      • 默认值是0L;
      • 例子: long a = 100000L,Long b = -200000L。
    • float:
      • float数据类型是单精度、32位、符合IEEE 754标准的浮点数;
      • float在储存大型浮点数组的时候可节省内存空间;
      • 默认值是0.0f;
      • 浮点数不能用来表示精确的值,如货币;
      • 例子:float f1 = 234.5f。
    • double:
      • double数据类型是双精度、64位、符合IEEE 754标准的浮点数;
      • 浮点数的默认类型为double类型;
      • double类型同样不能表示精确的值,如货币;
      • 默认值是0.0d;
      • 例子:double d1 = 123.4。
    • boolean:
      • boolean数据类型表示一位的信息;
      • 只有两个取值:true和false;
      • 这种类型只作为一种标志来记录true/false情况;
      • 默认值是false;
      • 例子:boolean one = true。
    • char:
      • char类型是一个单一的16位Unicode字符;
      • 最小值是’\u0000’(即为0);
      • 最大值是’\uffff’(即为65,535);
      • char数据类型可以储存任何字符;
      • 例子:char letter = ‘A’。
  6. Java常量 常量在程序运行时,不会被修改的量。 在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:
       final double PI = 3.1415927;

    虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。

Maven生命周期

Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install 这样的命令是通用的。我想,一定是吸收了许多项目的经验,Maven才能定义出如此完善的模型。

 

Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是:

  • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  • Site Lifecycle 生成项目报告,站点,发布站点。

我再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

 

知道了每套生命周期的大概用途和相互关系以后,来逐个详细看一下每套生命周期,Clean和Site相对比较简单,先解释一下。

 

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有点绕?要知道有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:

  • pre-clean  执行一些需要在clean之前完成的工作
  • clean  移除所有上一次构建生成的文件
  • post-clean  执行一些需要在clean之后立刻完成的工作

mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。

 

下面看一下Site生命周期的各个阶段:

  • pre-site     执行一些需要在生成站点文档之前完成的工作
  • site    生成项目的站点文档
  • post-site     执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy     将生成的站点文档部署到特定的服务器上

这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

 

最后,来看一下Maven的最重要的Default生命周期,绝大部分工作都发生在这个生命周期中,这里,我只解释一些比较重要和常用的阶段:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources     复制并处理资源文件,至目标目录,准备打包。
  • compile     编译项目的源代码。
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources     复制并处理资源文件,至目标测试目录。
  • test-compile     编译测试源代码。
  • process-test-classes
  • test     使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • prepare-package
  • package     接受编译好的代码,打包成可发布的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install     将包安装至本地仓库,以让其它项目依赖。
  • deploy     将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

基本上,根据名称我们就能猜出每个阶段的用途,关于其它阶段的解释,请参考http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html