-
了解Java语言
Java并不仅仅只是一门语言,它更加表现为一个计算机语言开发平台。由于Java语言是解释型语言,它经由JVM虚拟机解释后运行。故Java的代码是完全跨平台的,不需要对代码做出任何修改,就可以运行在不同的系统之上。因此Java是跨平台,解释性,通用的计算机语言。
依照惯例,第一个Java程序应该是Hello World程序,如下所示:
public class HelloWorld
{
public static void main(String args[ ])
{
System.out.println("Hello World!");
}
}
暂时,我只关注public static void main(String args[])这句话,在C/C++语言中,main()函数是留给操作系统的接口,因此程序从main()函数开始执行;而在Java中main()这个函数(Java可能更喜欢称为方法)是留给JVM的(因为它是解释性语言)的接口,JVM找到这个接口后,从这儿开始执行程序。至于前面的修饰符和返回值可以猜一猜,正如C/C++一样,public表明main是公共的(必须是公共的,否则JVM没法访问main),static表明main是静态的(正如C++一样,类的公共静态成员函数在没有类对象的时候是可以调用的,Java这里也是这样做的,否则没有对象,无法调用该方法,因此main必须是公共静态成员函数,暂时这么叫吧!)可能由于JVM没有返回值,所以是void.而main函数的参数是命令行下会用到的。大体上和C/C++一致,毕竟是类C语言。但是从这里也可以看出,Java的语法是完全面向对象的,所以它没有C++那么复杂。
-
变量和数据类型
Java语言的标识符由字母,数字,下划线以及美元符号($)组成,但是不能以数字开头。
Java还保留了const和goto两个关键字,这两个关键字用于以后可能的版本扩展。现阶段我们不能使用它们。
Java使用final关键字定义常量,例如:final double PI = 3.14;这样就定义了常量PI来表示圆周率。
Java的整数类型分为下面4种,由于Java本身是无关于机器和系统的,故其数据类型的大小总是恒定的。java默认的整数数据类型是int。
Java有两种数据类型来表示浮点型数据,分别是float和double。它们的位数和取值范围见下表。Java默认的浮点数数据类型是double。Java的float类型数据必须在后面加上f或者F,表明它是float类型,否则将会发生错误。例如:
final float PI = 3.14F; //必须加上F,否则是错误的
Java使用关键字char来定义字符类型,Java支持的是Unicode字符集,它是一种通用的编码方案,比较流行的实现方案有两种,分别是UTF-8和UTF-16。在JVM虚拟机中,采用了UTF-16,故char类型占据了2字节,但是实际上有些字符的编码更大,它需要两个char类型才能表示,故某些会占据4字节。例如:
char ch = 'A'; //字符A
char a = '
'; //回车换行
char a = 'u6211'; //这个编码是汉字“我”
//Unicode编码都是以字母u开头,然后加上一个数字,这个数字就是字符对应的Unicode编码
Java相比于C语言,它对布尔数据类型更加重视,故Java中提供了专门的布尔数据类型:boolean。
Java数据类型之间的转换分为两种,自动类型转换和强制类型转换。
自动类型转换:它遵从位数少的数据类型自动转换成为位数多的数据类型。例如:
short a = 10;
int b = a; //short自动转换成int
float n = 3.14;
double m = n; //float自动转换成为double
//整形和浮点型之间是整形自动转换成浮点型
强制类型转换:自动类型转换是位数少的自动转换成位数多的,那么位数多的想转换成为位数少的就必须使用强制类型转换。强制类型转换的语法格式和C语言是一致的:(type) value;例如:
int num1 = 123456789;
byte num2 = (byte)num1;
System.out.println("num2 is "+num2);
上面的打印结果是21,由于byte是1字节的整数类型,故其模值是256。123456789 -(482253 x 256) = 21;故打印结果是21.所以在使用强制类型转换的时候需要注意数据是否会丢失或者是出错。这个问题必须要小心。如果是浮点数强制类型转换为整数,那么会将小数给丢掉。
实际上由于默认的数据类型是int,其实我们再给上面的short类型赋值的时候,系统进行了隐含的强制类型转换。但是浮点型是不存在这种情况的,因为float数据类型必须显式指出。
-
运算符和表达式
Java的运算符和C/C++基本上是一样的,有+,-,*,/,还有%(取余)。Java还把+通过运算符重载,作为了字符串连接符。-也可以用了表示负数。
还有自增(++)和自减(--),它们的使用和C/C++是完全一样的。
关系运算符有相等(==),大于(>),小于(<),大于等于(>=),小于等于(<=),不等于(!=)。它们的使用和C/C++也是一样的。唯一的例外是boolean数据类型,它们只能比较是否相等,不能进行其他的关系运算。
位运算符有按位与(&),按位或(|),按位取反(~),按位异或(^),这些操作和C/C++并没有不同。当然还有移位运算符。位左移(<<),位右移(>>)。Java相比于C/C++增加了无符号整数右移运算符(>>>),它在右移的过程中是使用0来填充(不分正数和负数),所以对于正数而言,>>>和>>操作结果将是一致的,但是对于负数而言则是不同的,它将把一个负数变成正数,而且将会变得很大。(Java没有无符号数,因此这里的无符号右移就是这样的叫法而已)例如:
int num = -123;
num = num >>> 3;
System.out.print(num);
输出结果是:536870896。目前还没想到这个操作的用途。
逻辑运算符,在Java里逻辑运算符分为两类,非短路逻辑运算符和短路逻辑运算符。而且在Java里,这个逻辑运算符是只能对boolean对象使用,不像C语言那样可以对int使用。
非短路逻辑运算符:与(&),或(|),非(!)三种。这个和C语言不一样,用法是类似的。
短路逻辑运算符:与(&&),或(||)这两种是存在短路效应的,这个和C语言的一致。
Java还继承了C/C++的三目运算符:expression?statement1:statement2;使用它在某些qin情况下可以高效的代替的if-else语句,使得代码看起来更加简洁。
Javabi表达式的结合性以及运算符的优先级和C/C++基本一致。当我不清除运算符优先级的时候,使用圆括号就好了。这样总是能避免一些不该出现的逻辑错误,这是个好习惯。