Java核心技术(二)——基本类型

数据类型
整型
类型存储需求取值范围
int4字节-2 147 483 648 ~ 2 147 483 647(正好超过20亿)
short2字节-32 768 ~ 32 767
long8字节-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
byte1字节-128 ~ 127
  • 在Java中,整型的范围与运行Java代码的机器无关。
  • 由于Java程序必须保证在所有机器上都能得到同样的结果,所以各种数据类型的取值必须固定。
  • 而在C和C++中,int和long等类型的大小与目标平台相关。
  • Java中没有无符号类型(unsigned)。
浮点类型
类型存储需求取值范围
float4字节大约 ± 3.402 823 47E+38F (有效数字6~7位)
double8字节大约 ± 1.797 693 134 862 315 70E+308 (有效数字5位)
  • double类型的数值精度是float类型的两倍(也称双精度类型)。
  • 绝大部分程序都采用double。
  • float类型的数值有个后缀F(或f)。没有后缀的浮点数值默认为double类型。
  • 三个特殊的浮点数值:正无穷大(Double.POSITIVE_INFINITY),负无穷大(Double.NEGATIVE_INFINITY),NaN(不是一个数字)(Double.NaN)。
    -可以使用Double.inNaN(x)方法
char类型
  • char类型的字面量值要用单引号括起来。例如:‘A’是编码值为65所对应的字符常量,“A”是包含一个字符A的字符串。
  • char类型的值可以表示为十六进制值,范围从\u0000到\Uffff。

特殊字符的转义系列

转义序列名称Unicode值
\b退格\u0008
\t制表\u0009
\n换行\u000a
\r回车\u000d
"双引号\u0022
单引号\u0027
\反斜杠\u005c
Unicode 和 char 类型
  • 码点(code point)是指与一个编码表中某个字符对应的代码值。
  • 在Unicode标准中,码点采用十六进制,并加上前缀U+。
  • Unicode的码点可以分成17个代码级别(code plane)。
  • 第一个代码级别称为基本的多语言级别,码点从U+0000到U+FFFF,其中包括Unicode代码。
  • 其余的16个级别码点从U+10000到U+10FFFF,其中包括一些辅助字符。
  • 在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元。
  • 在Java中,char类型描述了UTF-16编码中的一个代码单元。
  • 强烈建议不要使用char类型,除非确实需要处理UTF-16代码单元,最好将字符串作为抽象数据类型处理。
boolean 类型
  • boolean类型有两个值:false和true。
  • 整型值和布尔值不能进行转换。
  • 在C++中,数值甚至指针都可以代替Boolean值。在Java中则不能。
变量
  • 在Java中,每个变量都有一个类型(type)。
  • 声明一个变量之后,必须对其进行显式初始化。
  • 关键字 final 指示常量,final 表示这个变量只能被赋值一次。
  • const 是Java 保留的关键字,丹目前没有使用。在Java中必须使用 final 来定义常量。
运算符
  • 在Java中,使用算术运算符+,-,*,/表示加减乘除运算。
  • 当参与 / 运算的两个操作数都是整数时,表示整除除法。否则表示浮点除法。
  • 整数的求余操作用%表示。
  • 整数被0除将会产生异常,而浮点数被0除将会得到无穷大或NaN结果。
  • 自动类型转换:当两个不同类型的操作数进行二元操作时,先要将两个操作数转换为同一种类型,然后再进行计算。如果两个操作数中有一个是double类型,另一个操作数就好转换为double类型。否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。否则,两个操作数都将转换为int类型。
  • 强制类型转换:可以使用圆括号。
位运算符
  • 按位与(&):两位同时为1,结果才为1,否则为0。
  • 与运算特殊用途:
    1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为0的数值相与,结果为零。
    2)取一个数中的指定位。找一个指定位为1,其余位为0的数相与。
  • 按位或(|):只要有一个为1,其值为1,否则为0。
  • 可以用来对一个数据的某些位置置1。
  • 异或运算符(^):两个对象对应位的值不同,则结果为1,否则为0。
字符串
  • Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做String。
  • 每个用双括号括起来的字符串都是String类的一个实例。
  • Java语言允许使用+号拼接字符串。
  • 当将一个字符串与一个非字符串的值进行拼接时,后者将被转换成字符串。
  • 任何一个Java对象都可以转换成字符串。
  • String类没有提供用于修改字符串的方法。所以String类对象被称为不可变字符串。
  • 可以通过拼接创建新的字符串。
  • 不可变字符串的优点是编译器可以让字符串共享。
  • 可以使用String类的substring方法来提取字符串。
  • 可以使用equials方法检测两个字符串是否相等。
  • 可以使用equalsIgnoreCase方法检测两个字符串是否相等而不区分大小写。
  • 不能使用==运算符检测两个字符串是否相等。这只能确定两个字符串是否放置在同一个位置上。
  • 空串 “” 是长度为0的字符串。可以使用 if(str.length() == 0) 或 if(str.equals("") 检查一个字符串是否为空。
  • 空串是一个Java对象,有自己的串长度(0)和内容(空)。
  • string变量还可以存放一个特殊的值,名为null,表示目前没有任何对象与该变量关联。
  • StringBuilder类可用于构建字符串,效率较直接拼接高。
    输入输出
  • 打印输出到标准输出流(控制台窗口)可以调用 System.out.println。
  • 读取标准输出流,则首先需要构造一个Scanner对象,并与标准输出流System.in关联。然后再使用Scanner类的各种方法进行操作。
	Scanner in = new Scanner(System.in);
	System.out.print("What is your name?");
	String name = in.nextLint();//读取行
	string firstName = in.next();//读取一个单词,以空白符作为分隔符
	int age = in.nextInt();//读取一个整数
  • 因为输入是可见的,所以Scanner类不适用于从控制台读取密码,可以使用console类。

用于printf的转换符

转换符类型举例转换符类型举例
d十进制整数159s字符串Hello
x十六进制整数9fc字符H
o八进制整数237b布尔True
f定点浮点数15.9h散列码42628v2
e指数浮点数1.89e+01tx或Tx日期时间已经过时,改为java.time类
g通用浮点数-%百分号%
a十六进制浮点数0x1.fccdp3n与平台有关的行分隔符-
  • 要对文件进行读取,需要用File对象构造一个Scanner对象
 Scanner in = new Scanner(Paths.get("myfile.txt"),"UTF-8");
  • 要写入文件,需要构造一个PrintWriter对象。然后使用print、println、printf命令。
 PrintWriter out = new PrintWriter("myFile.txt","UTF-8");//如果文件不存在,创建该文件。
控制流程
  • Java也是使用条件语句和循环结构确定控制流程。
  • 条件语句:if ( condition ) statement;
  • 循环语句:while ( condition ) statement;
  • do/while 循环:do statement while ( condition );
  • for 循环是支持迭代的一种通用结构,利用每次迭代后更新的计数器或类似的变量来控制迭代次数。
  • for 语句的3个部分应该对同一个计数器变量进行初始化、检测和更新。
  • for…each 循环:for( varibale : collection ) statement;
  • 多重选择:switch … case 语句。
  • 中断控制流程语句:continue ; break.
  • 大数值:BigInteger类实现了任意精度的证书运算;BigDecimal实现了任意精度的浮点数运算。
  • 需要使用大数值类中的 add 和 multiply 方法来进行运算。
  • Java中没有提供运算符重载功能。
数组
  • 数组是一种数据结构,用了存储同一类型值的集合。
  • 通过一个整型下标可以访问数组中的每一个值。
  • int[] a = new int[100]; == int a[] = new int [100];
  • 创建一个数字数组时,所有元素都初始化为0。boolean数组的元素会初始化为false。对象数组的元素则初始化为null。
  • 通过array.length获取数组中的元素个数。
  • 一旦创建数组,就不能再改变它的大小。
  • 如果经常需要在运行过程中扩展数组的大小,应该使用数组列表。
  • for each 循环: for (variable : collection ) statement
  • 在Java中,允许将一个数字变量拷贝给另一个数字变量。这时,两个变量将引用同一个数组。
  • 要将一个数组的所有值拷贝到一个新的数组中,可以使用Arrays类的copyOf方法。
  • Java数组与C++数组在堆栈上有很大区别,但基本上与分配在堆上的数组指针一样。
int[] a = new int[100]; // Java
不同于
int a[100];//C++
而等同于
int* a = new int[100];// C++
Java中的[]运算符被预定义为检查数组边界,而且没有指针运算,即不能通过a加1得到数组的下一个元素。
命令行参数
  • Java程序中有一个带String arg[]参数的main方法。这个参数表示main方法将接收一个字符串数组,也就是命令行参数。
	public class Message
	{
		public static void main(String[] args)
		{
		……
		}
	}
	如果使用下面这种方式运行程序
	java Message -g cruel world
	args数组将包括下列内容
	args[0]:"-g"
	args[1]:"cruel"
	args[2]:"world"
数组排序
  • 可以使用Arrays类中的sort方法对数值型数组进行排序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值