Java 数据类型
Java语言是一种严格的"类型化"语言,这意味着每个变量都必须有一个声明好的类型
- 基本数据类型:整数(byte、short、int、long)、浮点数(float、double)、字符类型(char)、布尔类型(boolean)
- 对象数据类型:Java 类的实例对象类型
基本数据类型
- byte(字节型):计算机中1字节一般来说占8位
- char(字符型):占2字节,也就是16位
- short(短整型):占2字节,也就是16位
- int(整型):占4字节,也就是32位
- long(长整型):占8字节,也就是64位
- float(单精度实型):小数点后面保留7位有效数字,占32位
- double(双精度实型):小数点后面保留15位有效数字,占64位
- boolean(布尔型):占1字节,8位
1. float类型:
数值有个后缀——F,如果没有后缀F,那么默认double。double类型的数值也可以使用后缀D。当这些数字遇到取值范围错误时,会发生上溢(Overflow[ˌoʊvərˈfloʊ]);而在遇到被零初始,会发生下溢(Underflow[ˈʌndərˈfloʊ])
2. 字符类型: char
双引号则表示一个字符串,它是Java的一个对象类型String,并不是数据类型。在 Java中除了用这个 \u的形式来表示字符外,还可以使用换码序列来表示特殊字符
\b 退格 \u0008
\t Tab制表 \u0009
\n 换行 \u000a
\r 硬回车 \u000d
\" 双引号 \u0022
\' 单引号 \u0027
\ 反斜杠 \u005c
拓展
// 进制转换
十进制基本成员:0、1、2、3、4、5、6、7、8、9
八进制基本成员:0、1、2、3、4、5、6、7
十六进制基本成员:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
八进制转十进制
八进制 345 转换成十进制数为: 5 x 8^0 + 4 x 8^1 + 3 x 8^2
十六进制数45转换成十进制数为: 5 x 16^0 + 4 x 16^1
// 取值范围
- byte(字节型):-2^7~2^7的整数
- char(字符型):-2^15~2^15的整数
- short(短整型):-2^15~2^15的整数
- int(整型):-2^31~2^31的整数
- long(长整型):-2^63~2^63的整数
- float(单精度实型):-2^31~2^31的实数
- double(双精度实型):-2^63~2^63的实数
- boolean(布尔型):true,false
对象数据类型
Java是面向对象的程序设计语言,因此Java的数据类型中包括了对象数据类型。
String world = "World"; // 字符串对象
Date time = new Date(); // 日期对象
HelloWorld inst = new HelloWorld(); // HelloWorld实例对象
| 基本数据类型 | byte | short | int | long | float | double | char | boolean |
|---|---|---|---|---|---|---|---|---|
| 对象数据类型 | Byte | Short | Integer | Long | Float | Double | Character | Boolean |
引用数据类型
Java中的所有对象都要通过对象引用访问。对象引用是指向对象存储所在堆中的某个区域的指针,所有的对象数据类型都属于引用数据类型
引用类型和基本数据类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和基本数据类型用做某个类的实例数据时所指定的默认值。对象引用实例变量的默认值为 null,而基本数据类型实例变量的默认值与它的类型有关
数组数据类型
Java数组(array)是动态创建的索引对象,数组只能索引数组的实例或者 null
Java 运算符
- 算术运算符:+ 、 - 、 * 、 / 、 %
- 赋值运算符:+=、 -=、 *=、 /=、%=
- 自增/减运算符:++、 --
- 关系运算符:==、 >、 <、>=、<=
- 逻辑运算符:&&、 ||、 !、^
赋值运算符
赋值运算符就是用来为变量赋值的。最基本的赋值运算符就是等号 "="。
+= -> X += 5 -> X = X + 5
-= -> X -= 5 -> X = X - 5
*= -> X *= 5 -> X = X * 5
/= -> X /= 5 -> X = X / 5
%= -> X %= 5 -> X = X % 5
自增/减运算符
自增运算符的作用是使变量加1, 而自减运算符的作用则是使变量减1
X ++ -> X += 1 -> X = X + 1
X -- -> X -= 1 -> X = X - 1
如果在变量的后面,则是执行了这个语句之后,再使自己加 1。
如果在变量的前面,则是先使自己加 1,然后再执行这个语句。
关系运算符
1. ==: 比较两个对象是否相等
2. >:大于
3. <:小于
4. >=:大于等于
5. <=:小于等于
逻辑运算符
逻辑运算符又称为布尔运算符,用来处理一些逻辑关系的运算符,它经常应用于流程控制。在逻辑运算世界中,只有两种值:真(true) 或 假(false)
1. 与运算符(&&)
2. 或运算符(||)
3. 非运算符(!)
4. 异或运算符(^)
运算符的优先级
| 描述 | 级别 | 运算符 |
|---|---|---|
| 最高优先级 | 1 | [] () |
| 一元运算符 | 2 | ++、--、! |
| 算术运算符 | 3 | *、/、% |
| 算术运算符 | 4 | +、- |
| 关系运算符 | 5 | <、<=、>=、> |
| 等于运算符 | 6 | == 、!= |
| 逻辑运算符 | 7 | &&、||、!、^ |
| 赋值运算符 | 8 | =、+=、-=、*=、/=、%= |
Java 方法
定义方法
访问说明符 [修饰符] 返回值类型 方法名 ([参数列表])
访问说明符
public:如果一个方法将其访问说明符定义为public,那么这个方法能够被所有的外部类访问
protected[prəˈtektɪd]:只有外部类是这个方法类所在类的子类才能访问它
private[ˈpraɪvət]:所有的外部类都无法访问这个方法
默认:如果一个类与该类所在类同属一个包,那么就可以访问这个方法
修饰符
修饰符在方法的定义中是可选项,用来为方法设置一些特殊的属性
可用修饰符:abstract、static、final、native、synchronized
返回值类型
当一个方法被调用时,它可以返回一个值给方法的调用者。可以通过定义方法的"返回值类型"来规定它返回的值的数据类型。这个数据类型可以是任何一个有效的Java数据类型,如果没有返回值则使用void。
方法名
方法名可以由字母字符、数字、标点组成
方法名必须以字母字符、"$"、"_"开头
方法名不能与Java语言的保留字重名
参数列表
参数列表在方法的定义中也是可选项,它的作用与函数的参数类似
对于一个方法,还有一个特殊的定义,那就是"签名",它是由给定方法的名字和参数组成的。(相当于service和impl的关系?)
方法的3种类型
转换 型:调用这种方法,将修改内部变量的值。
访问 型:调用这种方法,将返回内部变量的值。
效果 型:调用这种方法,通常不返回任何值,而是执行了某个动作。
方法的参数传递
值调用(call-by-value)
这个方法将一个参数的值复制到子程序的形式参数里。因此,子程序参数的变化并不会影响到用于调用的参数
引用调用(call-by-reference)
在这种方法中,把一个参数(不是参数的值)的引用传递给形式参数,在子程序里,这个引用用于对调用中指定的实际参数进行访问,这意味着形式参数的变化会影响到用于调用子程序的参数
在Java中,当向方法传递一个基本数据类型时,传递的是一个值。当传递的是一个对象时,则按引用传递
引用传递时,方法内部对该参数的修改将会影响到外部传递进来的参数对象
方法的递归调用
int fact(int n) {
int res;
if (n == 1) return 1;
res = fact(n-1) * n;
return res;
}
main 方法
在Java中,程序从 main()方法开始执行。
main()方法被声明为 public static,以便由在类的外部声明的代码和类的任何对象建立之前调用。
# 疑问 传递命令行参数向运行递归的程序传递信息?
循环与流程控制
if 条件语句
if (条件) 语句;
if (条件) { 代码块 }
if (条件) 语句; else 语句;
if (条件) { 代码块 } else { 代码块 }
if (条件) 语句; else if (条件) 语句; else 语句;
if (条件) { 代码块 } else if (条件) { 代码块 } else { 代码块 }
switch 分支语句
switch (int 或 char 类型变量) {
case value:
...
break;
case value2:
...
break;
case value3:
...
break;
default:
...
break;
}
for 循环控制语句
for (初始化语句; 条件语句; 控制语句) {}
程序执行到for语句时,初始化语句首先执行
然后对条件语句求值,如果条件值为 true,则执行括号后的代码块
控制语句在代码块执行后执行
再次对条件语句求值,如果条件仍然为true,则代码块再一次被执行,紧跟着执行控制语句。
while 与 do···while
1. while 语句
如果循环开始后无法预知代码块将要执行的次数则使用 while
while (条件语句) { };
2. do···while 语句
do {} while (条件语句);
break、continue、label[ˈlābəl] 和 return 控制语句
break:当在循环执行过程中遇到break语句时,循环立即终止,程序执行被重定向到紧跟在循环之后的那行代码
continue:退出循环的当前迭代而不终止整个循环的执行,将程序执行重定向到循环顶端而不完成当前已经在运行中的迭代
label:在Java语言中,goto语句被抛弃了,但是它引入了一直新的机制——标号(lable); 正常的break只退出一层循环,你可以用标号你想退出哪一条语句。
return:退出该循环并返回一个值。返回值的数据类型必须循环声明中的返回值类型一致,如果申明为 void 类型,则不返回任何值