Java核心技术卷一 学习笔记(2)
在书中的第二章节是Java编程环境的搭建以及jdk的下载,ide的配置等,这些内容基本没有什么好说的,直接看第三章的Java基本的程序设计结构,这章的内容实际上是比较关键的,虽然看似较为简单,但涉及到了java语言的基本规范,编译过程,数据类型等,这些东西每个语言都有所区别,不能因为有一定基础就跳过或略读。
最简单的Java程序分析
下面贴一最简单的Java程序,只发送一条消息到控制台
public class FirstSample
{
public static void main(String[] args)
{
System.out.println("We will not use 'hello world!' ");
}
}
这个程序虽然很简单,但如我们所知,所有Java程序都有此结构,现在我们逐行来细细研究一下:
代码规范
关键字public称为访问修饰符(access modifier),用于控制程序的其他部分对这段代码的访问级别,和C++中类中的定义是十分相似的。而关键字class表明
了Java程序中全部内容都包含在类中,在Java语言中,类是构建所有Java程序和applet的构建块,Java的全部内容都需放在类中。
class后跟类名。Java中类名的定义必须由字母开头,后面可以跟字母和数字的组合,长度没有什么限制,但不能用Java的保留字。
Java类的标准命名规范为骆驼命名法
Java中源代码的文件名必须与公共类的名字相同,并且使用.java作为扩展名。
编译过程
在编译过程中,以上面程序为例,在编译这段代码之后会得到一个包含这个类字节码的文件,java编译器会将字节码文件命名为FirstSample.class,并存储在源文件的同一目录下,编译完后可以使用 java FirstSample运行此程序,当然运行结果会是一段我们输入的字符。
java中的一些规范
运行已编译的程序时,Java虚拟机总是会从指定的类中的main方法的代码开始执行,所以在类的源文件中必须有一个main方法,且根据(Java语言规范)[http://docs.oracle.com/javase/specs]。
main方法必须声明为public。
在Java语言中,和在C++中一样,用大括号来划分程序部分。
作为学习过C++程序的一员,对Java类的理解应该会好理解一下,Java的所有函数都是某个类的方法。因此,Java的main方法必须有一个shell类。
Java中的main方法必须是静态的,void类型表示没有返回值,所以不用返回退出码。
public static void main(String[] args)
{
System.out.println("We will not use 'hello world!' ");
}
现在对这个语句进行研究:
在这里我们使用了System.out对象且调用了它的println方法。注意,点号(.)用于调用方法,Java中通用的调用为object.method(parameters)。和C++一样,都是用双引号界定字符串。注释也是很类似的。
数据类型
Java中有八种基本的数据类型,其中4种整型,2种浮点类型,一种字符类型char,和判断值boolean类型。
整型
Java中提供了四种整型,即int,short,long,byte,其中int类型最为常用,而要表达地球人口这样的较大数就需要用到long类型,而byte和short常用于特定的场合,比如底层文件处理或者存储空间很宝贵的大数据。
在C和C++中,int和long等类型的大小与目标平台相关。而Java中所有数值类型所占字节数与平台无关。且Java没有任何unsigned的int,long,short或byte类型。
浮点类型
Java中有两种浮点类型为float和double分别占4字节和8字节。double所表示的数值精度为float的两倍。
浮点数不适用于无法接受舍入误差的金融运算,如果在数值计算中不允许有任何舍入误差,应使用BigDecimal类。
char类型
此类型原本用于表示单个字符,不过在如今有些Unicode字符可以用一个char值来描述,有些则需两个char值。
char类型的字面量值要用单引号括起来,例如’A’为编码值为65的字符常量。与”A”不同,这是一个包含字符A的字符串。
Unicode和char类型
Unicode打破了传统的字符编码机制的限制,在其出现之前各国有许多不同的标准,就产生了两个问题:
1.对于任意给定的代码值,在不同编码方案下可能对应不同的字母;
2.采用大字符集的语言其编码长度可能有所不同。
设计Unicode的初衷便是要解决这些问题。当时人们认为两个字节的代码宽度足以对世界上任何语言的所有字符进行编码,但最终还是因为大量的汉语系文字
中的表意文字,目前16位的char类型已无法满足描述所有Unicode字符的需要。
boolean类型
包括两个值true和false,来判定逻辑条件,整型和布尔值不能进行相互转换。
变量与常量
和C++类似,Java也用变量来存储值,常量就是值不变的变量,通常会用final修饰。
枚举类型
当变量的取值只在一个有限的集合内,可以自定义枚举类型。枚举类型包括有限个命名的值。
enum Size { SMALL , MEDIUM , LARGE , EXRA_LARGE};
之后会进行枚举类的详细介绍。
运算符
算数运算符
此处与其他语言类似,而要注意使用strictfp关键字标记的方法必须使用严格的浮点运算来生成可再生的结果。
数学函数与常量
在Math类中,包含了各种各样的数学函数。在编写不同类型的程序时,可能需要的函数也不同。
double x = 4 ;
double y = Math.sqrt(x) ;
System.out.println(y) ; //prints 2.0
以上位Math应用的举例。使用更多其中的功能可参考Java对应版本的API文档。
数值类型间的转换
当用一个二元运算符连接两个值时,要将两操作数转为一种类型再进行计算。
强制类型转换
有时将double转为int时会丢失信息,这种转换要通过强制类型转换(cast)来完成,强制类型转换语法:
double x = 4.99 ;
int n = (int) x ;
结合复制和运算符
此处与C++类似,举个栗子,x+=4;大家大概就明白意思了。