Java核心技术之第三章——Java的基本程序设计结构

定义类名(骆驼/驼峰命名法):以大写字母开头的名词。如果名字由多个单词组成,每个单词的第一个字母都应该大写,如FirstSample。

Java中的main方法必须是静态的。关键字void表示这个方法没有返回值,与C/C++不同的是main方法没有为操作系统返回“退出代码”。如果希望在终止程序时返回其他代码,那就需要调用System.exit方法。

注释:                 

  //(注释单行)                            /* ..........*/(注释多行)                               /**.............*/(用来自动地生成文档)

注意:在Java中,/*  */注释不能嵌套。也就是说,不能简单地把代码用/*和*/括起来作为注释,因为这段代码本身可能也包含一个*/     

数据类型

在Java中有四种整型,byte(1字节),short(2字节),int(4字节),long(8字节)

在Java中有两种浮点类型,float(单精度浮点,4字节,有效位数为6~7位)和double(双精度浮点,8字节,有效位数为15位)。可以使用十六进制表示浮点数值。(如0.125为2的-3次方,可以表示成0x1.0p-3。p表示指数,采用十进制表示;尾数采用十六进制表示)

float类型的数值有一个后缀F或f(如:3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D或d。

浮点数值不适用于无法接受舍入误差的金融计算中。例如,2.0-1.1得到的结果是0.8999999999999999而非0.9,是因为浮点数值采用二进制系统表示,而在二进制中无法准确地表示分数1/10。这就好像十进制无法精确地表示分数1/3一样。(如果在数值计算中不允许有任何舍入误差就应该使用java.math包中的BigInteger和BigDecimal类。)

使用静态的valueOf方法可以将普通的数值转换为大数值:

BigInteger a = BigInteger.valueOf(100);

需要注意的是:不能使用我们所熟悉的算术运算符(如:+和*)处理大数值,而需要用类中的add和multiply方法详情看API。

如果想对浮点数进行舍入(四舍五入)运算,以便得到最接近的整数,就需要使用Math.round方法:

double x = 9.997;
int nx = (int)Math.round(x);
//现在,变量nx的值为10

当调用round时候,仍然需要使用强制类型转换(int),因为round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用强转才能将long类型转换成int类型

char类型

char类型,可用于表示单个字符,有些Unicode字符甚至可以用char值表示。因此,强烈建议不要再程序中使用char类型,除非确实需要处理UTF-16代码单元。最好将字符串作为抽象数据类型处理。

char类型的值可以表示为十六进制值,范围从\u0000到\Uffff。如:\u03C0表示希腊字母π

转义字符的转义序列都可以出现在加引号的字符字面量或字符串中,如‘\u2122’或‘Hello\n’。转义序列\u还可以出现在加引号的字符常量或字符串之外(而其他所有转义序列不可以)如:

public static void main(String\u005B\u005D args)
//        \u005B是[的编码
//        \u005D是]的编码

一定要小心注释中的\u

//\u00A0 is a newLine

会产生一个语法错误,因为读程序时\u00A0会替换为一个换行符。

//Look inside c:\users

也会产生一个语法错误,因为\u后面并未跟着4个十六进制数。因此,写路径时候需要用\\而非\

 

Unicode和char类型

码点是指与一个编码表中的某个字符对应的代码值。在Unicode标准中,码点采用十六进制书写,并加上前缀U+,如U+0041就是拉丁字母A的码点。Unicode的码点可以分成17个代码级别。第一个代码级别称为基本的多语言级别,码点从U+0000到U+FFFF,其中包括经典的Unicode代码;其中的16个级别码点从U+10000到U+10FFFF,其中包括一些辅助字符

UTF-16编码采用不同长度的编码表示所有Unicode码点。在基本的多语言级别中,每个字符用16位表示,被称为代码单元;辅助字符采用一对连续的代码单元进行编码。这样构成的编码值落入基本的多语言级别中空闲的2048字节内,通常被称为替代区域[U+D800~U+DBFF用于第一个代码单元,U+DC00~U+DFFF用于第二个代码单元]。这样设计可以让我们从中迅速地知道一个代码单元是一个字符的编码还是一个辅助字符的第一或第二部分。

在Java中,char类型描述了UTF-16编码中的一个代码单元。

变量初始化

声明一个变量之后,必须用赋值语句对变量进行显式初始化千万不要使用未初始化的变量

在Java中可以将声明放在代码中的任何地方,最好尽可能地靠近变量第一次使用的地方

常量

在Java中,利用关键字final表示常量。

关键字final表示这个变量只能被赋值一次。一旦被赋值,就不能再更改。习惯上,常量名使用全大写。

在Java中,若希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量

注意:类常量的定义位于main方法的外部

运算符

整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NAN结果

字符串

子串

String类的substring方法可以从一个较大的字符串提取出一个子串。

String greeting = "Hello";
String s = greeting.substring(0,3);
//创建了一个由字符“Hel”组成的字符串。

包前不包后的优点:容易计算子串的长度。字符串s.substring(a,b)的长度为b-a。如,子串“Hel”的长度为3-0=3

拼接

如果需要把多个字符串放在一起,用一个定界符分界,可以使用静态join方法:

String all = String.join("/","S","M","L","XL");
System.out.println(all);
//输出:S/M/L/XL

不可变字符串

String类没有提供用于修改字符串的方法。由于不能修改Java字符串中的字符,所以在Java文档中将String类对象成为不可变字符串。

如果希望将greeting的内容修改为“Help!”,可以先提取需要的字符,然后再拼接上替换的字符串:

String greeting = "Hello";
greeting = greeting.substring(0, 3)+"p!";
System.out.println(greeting);
//输出:Help!

不可变字符串有一个优点:编译器可以让字符串共享。可以想象将各种字符串存放在公共的存储池中,字符串变量指向存储池中相应的位置。如果复制一个字符串变量,原始字符串与复制的字符串共享相同的字符。

检测字符串是否相等

//可以使用equals方法检测两个字符串是否相等。
String greeting = "Hello";
String a = "HI";
System.out.print(greeting.equals(a)+“ ”);
System.out.print("Bye".equals(greeting)+“ ”);
//检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法
System.out.print("Hello".equalsIgnoreCase("hello"));
//输出:false false true

一定不要使用==运算符检测两个字符串是否相等!因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的;当然,引用字符串常量来创建字符串变量的方法除外。换言之,这个运算符只能够确定两个字符串是否放置在同一个位置上。

如果虚拟机始终将相同的字符串共享,就可以使用==运算符检测是否相等。但实际上只有字符串常量是共享的,而+或substring等操作产生的结果并不是共享的。

空串与Null串

空串""是长度为0的字符串。可以调用以下代码检查一个字符串是否为空:

if(str.length ==0)
//或者
if(str.equals(""))

空串是一个Java对象,有自己的串长度(0)和内容(空)。String变量还可以放一个特殊的值,名为null,这表示目前没有任何对象与该变量关联。因此,如果在一个null值上调用方法,会出现错误。

//检查一个字符串既不是null也不为空串
//首先要检查str不为null
if(str!=null&&str.length()!=0)
发布了50 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/leilei107/article/details/94029143