Java 基础(1)——基本数据类型和编码
Java路程从今天开始!
首先,从最简单的Java程序说起:一段输出 Hello Java的程序。
1 public class Hello{ 2 public static void main(String[] args){ 3 System.out.println("Hello Java!"); 4 } 5 }
// out: Hello Java
一、简单应用看Java
1. Java是区分大小写的 (case sensetive)
绝大部分语言是区分大小写的,如C/C++,python。为什么要说这个呢?因为确实有不区分大小写的,如SQL语句,bat命令。
SQL: SELECT * FROM t_user WHERE id=?
2. 类名以大写字母开头,多个单词组成,采用大驼峰命名法
如:UserDao、InsertSortMethod、DispatcherServlet 等等
3. 源代码的文件名必须和公共类的名字相同
上面写的类为 Hello 类,标识为 public,保存该类文件的文件名必须是该文件中声明为 public 的类,即该文件名必须是 Hello.java。
4.java虚拟机会在指定的文件中找到 main方法来执行,因此 main 方法必须声明为 public的
二、Java数据类型
Java是强类型的语言,即变量的类型必须明确,和C/C++一样。弱类型的语言如 python、javascript 。强类型的语言便于分配内存,也便于明确对象的职责与功能,易维护,便于编写大型的程序。
1. 基本数据类型(4大类,8小类)
1.1 整型:java的整型都是有符号的,且大小与平台无关,便于移植。
- byte: 1字节 ———— -27 ~ 27-1
- short: 2字节 ———— -215 ~ 215-1
- int: 4字节 ———— -231 ~ 231-1
- long: 8字节 ———— -263 ~ 263-1
注意:
- 3000l: L、l指明为long类型
- 0x\0X:十六进制
- 0:八进制
- 0B\0b: 二进制
- 1_000_000: 字面量加下划线,便于阅读
1.2 浮点类型:
double 类型的精度是 float 类型的2倍,所以叫双精度型。
- float: 4字节 ———— 大约±3.402 803 47E+38(有效位数6~7位)
- double: 8字节 —— 大约±1.797 693 134 862 515 70E+308(有效位数15位)
-
l float类型要加f\F,否则默认为double型
l 可以采用十六进制表示浮点数
l 特殊浮点数:
² 正无穷大
² 负无穷大
² NaN不是一个数字
看一个变量是不是数字,不能采用 x == Double.NaN,应该采用Double.isNaN(x)。
1.3 char字符:
- 采用单引号,‘a’
- \uxxxx :可以表示Unicode字符
- 转义字符在解析代码之前就进行转化
1.4 boolean类型
- 只有 true 和 false,不像C等,可以用非0的数标识 true
- boolean型和整数类型之间不能进行转化
- if(x=0)不能通过编译,表达式的值是整数,不能转化为boolean。在C\C++则允许这种表达。
补充:Unicode和char类型
计算机采用数字信号的方式来进行运算,因而计算机只能识别二进制串。二进制串对于人来说是不友好的,因此将人类自然语言的元素和二进制串联系起来是最为朴素不过的想法了,这就是编码的思想。最初这项工作发生在美国,他们将特定的二进制串与特定的字符建立一一映射的关系,这个记录表就是ASCII表。随着计算机的普及,越来越多的国家需要将他们的语言翻译成对应的二进制码。每个国家如果都采取自己的方案,如西欧的 ISO-8591-1,俄罗斯的KOI-8,中国的GBK、GB2312、GB18030等,那么不同国家之间的交流就可能会发生冲突,即同一个码可能对应着不同的字符。
为了同一对世界上的字符进行编码,于是就有了Unicode编码(统一码、万国码)。Unicode不是具体的编码方案,它只是规定了特定字符对应的数字编号,即码点(code point)。
例如:'孔' 对应的数字编号是23380,十六进制表示就是0x 5B 54。
这里定义关系是逻辑表示,是针对我们人来说。起初Unicode采用2字节对字符进行编码,也就是说总共能对65535个字符进行编码。Unicode是编码方案,是逻辑上的定义。具体的UTF-8、UTF-16是在计算机上的具体实现。
对于2字节的Unicode方案,最简单的实现就是将每一个字符都以2字节存放在计算机内存中,存入的数值就是Unicode对应的数字编号。
例如:'孔' 对应的数字编号是23380,其在内存中就存为 0x 5B 54,'h'对应的编号为104,其在内存中就存为0x 00 68。
这样的方案看起来好像很简单好用,其实不然。
第一:空间的大量浪费,对于只是使用字母的欧美国家,256个字符(即一个字节)可能就足够它们的使用了,另一字节上则都为0。如果采用这种方案,意味着他们只能使用一半的内存,且网络传输时信息率就降为一半,这对于他们来说肯定是难以接受的。
第二:随着越来越多的国家的字符加入,需要编码的字符已经远远超过65535了,若果采用4字节能表示 429,4967,295个字符。这样的化浪费的空间就更大了。
所以出现了UTF-8,这种变字长的编码方案:即有的字符用1个字节表示,有的字符用2个字节,有的用3个等等。
如:0xxxxxxx 这样的编码表示单字节字符,即如果系统识别到该字节的第一个bit为0,就知道它是一个字节表示的字符。
110xxxxx 10xxxxxx 这样的编码表示双字节的字符,即系统识别到该字节的前3个bit是110后,它读完本字节后会再读取一个字节,将这两个字节视为一个字符去查找码表。
1110xxxx 10xxxxxx 10xxxxxx 类似的三字节字符。
即出现 0 表一字节,出现2个1表示两节字,出现3个1表示三字节。
现行的Unicode码是从U+000000~U+10FFFF,其中U+0000~U+FFFF这个代码级别是多语言级别,和2字节的编码是一样的。在此之外还有16个代码级别:
U+10000~U+1FFFF
U+20000~U+2FFFF
...
U+F0000~U+FFFFF
U+100000~U+10FFFF

浙公网安备 33010602011771号