1.一个简单程序的编写、编译与运行
编写如下的Main.java
public class Main{
public static void main(String[] args){
System.out.println("Hello World");
}
}
上面的程序有几个要注意的点:
①public 是访问修饰符,用来表示其他程序对Main类的访问级别。
②类名使用驼峰命名法,如HelloWorld
.
③java文件名必须和类名相同。
④JVM在执行一个java文件形成的字节码文件时,其类文件必须包含一个main函数,一个类最多只有一个public static void main
⑤main正常执行的退出码为0,如果要以其他退出码来终止程序,使用System.exit
public class Main{
public static void main(String[] args){
if(args.length==0) {
System.out.println("error");
System.exit(1); //用1终止程序
}
else{
System.out.println("Hello World");
}
}
}
下面使用命令行来编译运行Main.java
值得注意的是,java命令执行class文件时,不能在chapter3目录下直接执行java ./src/Main
,而是要使用-cp来指定Main.class的目录。
2.注释方式
一共3种:
/**
* 这是一个Hello World程序
*/
public class Main{
public static void main(String[] args){
System.out.println("Hello World"); //输出Hello World
/*
我自己是第三种注释方法,1~3行是第一种注释方法(用于形成文档),第6行是第2种注释方法
*/
}
}
3.数据类型
java的数据类型如下所示:
3.1 基本数据类型
关于基本数据类型有几个要注意的点:
①java中的数据类型都是长度固定的,不像C中int可以根据硬件设计为int8、int16、int32,这也是java可以跨平台原因之一。
②数据类型中的前后缀
前缀可以是表示二进制的0b/0B、八进制的0、十六进制的0x/0X;后缀可以是long型的L、float型的f/F、double型的d/D。
public class Main{
public static void main(String[] args){
int a=0b010; //一般不会使用八进制,防止引起混淆
int b=0x010;
float c=0.1f;
double d=0.1d;
System.out.println("a="+a);
System.out.println("b="+b);
//((Object)c)将c转化为一个对象,getClass()取得这个对象的类,使用getSimpleName()方法得到类名,也就是数据类型
System.out.println("c的类型是"+((Object)c).getClass().getSimpleName());
System.out.println("d的类型是"+((Object)d).getClass().getSimpleName());
}
}
③有三个浮点数表示溢出和出错:正无穷大、负无穷大、NaN(数值不固定),分别用Double.POSITIVE_INFINITY
、Double.NEGATIVE_INFINITY
、Double.NaN
表示。注意NaN并不是一个数,不能使用==
来判断这个数是不是NaN.
public class Main{
public static void main(String[] args){
double a=1;
double b=a/0;
double c=-a/0;
double d = Math.sqrt(-1);
if(b==Double.POSITIVE_INFINITY){
System.out.println("error:div 0");
}
else{
System.out.println("b="+b);
}
if(c==Double.NEGATIVE_INFINITY){
System.out.println("error:div 0");
}
else{
System.out.println("c="+c);
}
if(Double.isNaN(d)){
System.out.println("d is a NaN");
}
else{
System.out.println("d is not a NaN");
}
if(d==Double.NaN){
System.out.println("d is a NaN");
}
else{
System.out.println("d is not a NaN");
}
System.out.println("d="+d);
}
}
④浮点数存在舍入误差,无法表示精确数,这是因为浮点数也是由二进制表示的。要使用精确的浮点数运算,使用BigDecimal类。
import java.math.BigDecimal;
public class Main{
public static void main(String[] args){
double a=2.0-1.1;
System.out.println("a="+a);
BigDecimal bd1 = new BigDecimal("2.0");
BigDecimal bd2 = new BigDecimal("1.1");
BigDecimal bd=bd1.subtract(bd2);
System.out.println("bd="+bd);
}
}
⑤UTF-16 编码采用不同长度的代码表示所有 Unico加码点。在基本多语言平面中,每个字符用 16 位表示,通常称为代码单元 ( codeunit);而辅助字符编码为一对连续的代码单元。 采用这种编码对表示的每个值都属于基本多语言平面中未用的 2048 个值范围,通常称为替代区域 ( surrogate area) ( U+0806 U+DBFF 用于第一个代码单元,U+DC69- U+DFFF 用于第二个代码单元)。这样设计十分巧妙,因为我们可以很快知道一个代码单元是一个字符的编码,还是一个辅助字符的第一或第二部分。在 Java中,char 类型描述了采用UTF-16 编码的一个代码单元。强烈建议不要在程序中使用由char类型,除非确实需要处理UTF-16 代码单元。最好将字符串作为抽象数据类型来处理。
⑥下面是常见的char类型的转义字符
⑦整型和布尔型之间是不能相互转化的
public class Main{
public static void main(String[] args){
int a=1;
if(a=1){ //语法错误,a=1返回的是int类型,而不是boolean
System.out.println(a);
}
}
}
3.2 引用数据类型
3.2.1 数组
3.2.2 类
3.2.3 接口
3.2.4 枚举
枚举的意义在于,有时候,一个变量只包含有限的一组值。例如,销售的服装或比萨只有小、中、大和超大这四种尺寸。当然,可以将这些尺寸分别编码为整数 1、2、3.、4 或字符 S、M、 L 、X。但这种设置很容易出错、很可能在变量中保存一个错误的值,所以使用枚举变量。
public class Main{
public static void main(String[] args){
enum Size {S,M,L,XL};
Size size=Size.M;
System.out.println("size="+size);
}
}