1.数据类型
类型 | 存储空间 | 取值范围 |
---|---|---|
int | 4字节 | -~+ |
short | 2字节 | |
long | 8字节 | |
byte | 1字节 | |
float | 4字节 | |
double | 8字节 | |
char | 2字节 | |
boolean | 1位 | true/false |
在Java中,整型范围与运行的Java代码的机器无关。解决了软件从一个平台移植到另一个平台,或在不同操作系统之间移植带来的诸多问题。与此相反,C和C++需要针对不同的处理器选择最为高效的整型,在不同处理器下的存储空间是不一样的。由于Java程序必须保证在所有机器上运行得到相同的结果,所以Java的各种数据类型取值范围必须固定。注意,Java没有无符号形式unsigned
的数据类型。
注意浮点数有舍入误差,原因是浮点数采用二进制系统表示,二进制系统无法精确地表示1/10。这就好像十进制无法精确表示分数1/3一样。如果计算中不允许有任何舍入误差,就应该使用BigDecimal
(大数)类。
转义序列 | 名称 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
" | 双引号 | \u0022 |
’ | 单引号 | \u0027 |
\ \ | 反斜杠 | \u005c |
注意:注释中的\u容易引发错误。
Unicode
打破了传统字符编码机制的限制。在其出现之前,有许多不同的标准:美国的ASCII
、西欧语言中的ISO 8859-1
、俄罗斯的KOI-8
、中国的GB 18030
和BIG-5
等。由于标准不一,不同的编码方案下就会对应不同的字母,还有编码长度可能不同。在20世纪80年代,开始设计了Unicode
,当时认为2字节代码足以对全世界的所有字符进行编码,并且有足够的空间留给未来扩展。但是,由于汉语,日语等表意文字的引入,16位的char类型已经不够用了。(强烈建议不要在程序中使用char类型)
在C/C++中,值0相当于布尔值false,非0值相当于布尔值true;而在Java中不是这样!
2.变量
Java中的变量名必须以字母为开头,以字母或数字构成的序列。在这里“字母”和“数字”的表示范围更大。字母包括下划线_
和在某种语言中表示字母的任何Unicode
字符,数字也是如此。==空格,‘+’==这种字符不行,变量名中所有字符都有意义,且大小写敏感,长度无限制,但是取变量名还是要遵循一定规则,方便理解,阅读。另外,Java中变量的声明可以放在代码中任何地方。
2.1常量
Java中用关键字final
指示常量,使用方法如下:
public class Contants
{
static final BOX = 10;//希望某个常量可以在一个类中的多个方法使用,通过static final定义,成为类常量
public static void main(String[] arg)
{
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("Paper size in centimeters:"+paperWidth * CM_PER_INCH + "by" + paperHeight * CM_PER_INCH);
}
}
3.字符串
标准Java类库中提供了预定义类String
。当一个字符串和一个非字符串拼接时,后者被换成字符串。注意Java中的字符串和C++中的不一样,C++中可以将字符串看成一个字符型数组,而Java中不是如此!在Java中字符串的字符不能单个修改!可以修改字符串变量 让它引用另外一个字符串。Java字符串大致类似与char*指针,举个例子:
char* greeting = "Hello";
char* temp = malloc(6);
strncp(temp,greeting,3);
strncp(temp+3,"p!",3);
greeting = temp;
检测字符串是否相等不能用==
,要用equals()函数,用s.equals(t)
判断字符串s
和t
是否相等。
空字符串不等于Null串,空串是长度为0的字符串,Null串没有和任何对象关联,要检查是否为Null串用if(str==null)
。注意:Null串不能调用String方法,会出错。
码点与码点单元:待更新。。。
在线API文档查看:
4.输入输出
Scanner类在java.util.*
包中。当时用的累不是定义在java.lang
包中时,要用import
导入进来。例如:
import java.util.*;
要想通过控制台输入,首先要构造一个Scanner对象,并与标准输入流System.in
相关联。
Scanner in = new Scanner(System.in);
System.out.print("What's your name?");
String name = in.nextline();//这里调用方法按需求而定
Java SE 5.0 的格式化输出沿用了C语言的printf
方法。例如:
System.out.printf("%8.2f",x);
//8:在输出中字符数最少为8,字符数少于8在整数部分前面加空格,多于8整数部分正常输出
//2:小数部分最多输出2个字符,多出的四舍五入
文件的输入输出:
Scanner in = new Scanner(Paths.get("myfile.txt","UTF-8"))
//文件路径要用双反斜杠,这里指定了读取文本的字符编码
PrintWriter out = new PrintWriter("myfile.txt","UTF-8");
//如果不存在文件,就创建文件,这里out能像System.out一样调用方法
5.数组
创建数组:
int[] a = new int[100];
创建一个数字数组,所有元素都初始化为0,boolean数组元素初始化为false。对象数组初始化为null。与C/C++一样,Java中数组创建之后,长度就不能改变了。
foe each循环在数组中的使用:
for (int element : a)
System.out.println(element):
数组初始化:
int[] small Primes = { 2, 3, 5, 7, 11, 13 };
数组拷贝:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers , luckyNumbers .length);
注意:Java中[ ]运算符被预定义为检查数组边界,==没有指针运算,==不能通过a加1得到数组的下一个元素。*(a+1)
深拷贝与浅拷贝问题值传递还是引用传递。
命令行参数:
在使用main()方法时,都会用到String arg[]
,当一个Message类按照如下方式运行时:
java Message -g cruel world
args 数组将包含下列内容:
arg[0]:"-g"
arg[1]:"cruel"
arg[2]:"world"