本文是课上资料的总结非原创没有转载地址
目录
Java语言基础
1.变量
变量的概念
概念:计算机内存中的一块存储空间,是存储数据的基本单元。
组成:数据类型 变量名 值
定义流程
- 声明:
数据类型 变量名;
int money; // 开辟整数变量空间
- 赋值:
变量名 = 值;
money = 100; // 将整数值赋给变量
注意:Java是请类型语言,变量的类型必须与数据的类型一致。
定义方式
- 先声明,后赋值:
数据类型 变量名;
变量名 = 值; - 声明并赋值:
数据类型 变量名 = 值; - 多个同类型变量的声明与赋值:
数据类型 变量1, 变量2, 变量3 = 值3, 变量4, 变量5 = 值5;
2.数据类型
Java中的变量具有严格的数据类型区分。(强类型语言)
基本数据类型(整数)
类型 | 字节 | 取值范围(二进制) | 取值范围(十进制) |
---|---|---|---|
byte | 1字节 | -2 ^ 7 ~ 2 ^ 7 - 1 | -128 ~ 127 |
short | 2字节 | -2 ^ 15 ~ 2 ^ 15 - 1 | -32768 ~ 32767 |
int | 4字节 | -2 ^ 31 ~ 2 ^ 31 - 1 | -2147483648 ~ 2147483647 |
long | 8字节 | -2 ^ 63 ~ 2 ^ 63 - 1 | -9223372036854775808 ~ 9223372036854775807 |
注意:int位整数的默认类型,如需为long类型赋值,需要在值的后面追加“L”
基本数据类型(小数/浮点数)
类型 | 字节 | 负数取值范围 | 正数取值范围 | 精度(从第一个非0数字开始算) |
---|---|---|---|---|
float | 4字节 | -3.4E+38 ~ -1.4E-45 | 1.4E-45 ~ 3.4E+38 | 7,8位(第8位不准确) |
double | 8字节 | -1.7E+308 ~ -4.9E-324 | 4.9E-324 ~ 1.7E+308 | 15,16位(第16位不准确) |
浮点型数值采用科学计数法表示:
注意:double为浮点数的默认类型,如需为float类型赋值,需要在值的后面追加“F”
double存的值是近似值
基本数据类型(布尔)
类型 | 字节 | 取值范围 | 描述 |
---|---|---|---|
boolean | 1字节 | true/false | 仅可描述“真”或者“假” |
- 可以直接赋值true / false
- 也可赋值一个结果为true / false的表达式
注意:Java中的boolean不能参与算数运算
基本数据类型(字符)
类型 | 字节 | 取值范围(无符号数) | 字符编码 |
---|---|---|---|
char | 2字节 | 0~65535 | Unicode字符集(万国码) |
- Unicode字符集支持ASCII编码(美国标准信息交换码)。
- Unicode中每个字符都对应一个十进制整数,从而可以使用多种方式赋值。
- 字符赋值:
char c1 = 'A';
(通过’'描述为字符赋值) - 整数赋值:
char c2 = 65;
(通过十进制数65在字符集中对应的字符赋值) - 进制赋值:
char c3 = '\u0041';
(通过十六进制数41在字符集中所对应的字符赋值)
- 字符赋值:
ASCII码表
转义字符
如何给char赋特殊字符,如单引号’、双引号”
为解决这一问题,Java采用了转义字符来表示单引号和一些特殊符号,如下表。
转义字符 | 描述 |
---|---|
\ n | 换行符 |
\ r | 回车符(回到行的开始位置) |
\ t | 缩进(制表位) |
\ \ | 反斜线 |
\ ’ | 单引号 |
\ " | 双引号 |
引用数据类型(字符串)
类型 | 取值范围 | 字符编码 |
---|---|---|
String | 任何“ ”之间的字面值 | Unicode字符序列 |
思考
赋值语句 | 对/错 |
---|---|
byte a = 128; | × 超出取值范围 |
short b = 65; | √ |
short c = -32000; | √ |
float d = 12.34; | × 浮点数默认为double类型,此时应加F或f |
char e = ‘65’; | × 字符只能有一个 |
char f = 65; | √ 可直接赋值为整数 |
char g = b; | × short可能为负数 |
boolean h = “true”; | × true / false为Java保留字,直接使用 |
String i = " 123"; | √ 空格也是字符 |
3.运算符
运算符
算数运算符:
两个操作数进行计算
操作符 | 描述 |
---|---|
+ | 加、求和 |
- | 减、求差 |
* | 乘、求积 |
/ | 除、求商 |
% | 模、求余 |
算数运算符:
一元运算符(只有一个操作数)(重点难点)
操作符 | 描述 |
---|---|
++ | 递增,变量值+1 |
- - | 递减,变量值-1 |
注意:当运算符在在操作数后面时(X++)一定要看成一个整体
赋值运算符:
等号右边赋值给等号左边
操作符 | 描述 |
---|---|
= | 直接赋值 |
+= | 求和后赋值 |
-= | 求差后赋值 |
*= | 求积后赋值 |
/= | 求商后赋值 |
%= | 求余后赋值 |
关系运算符:
两个操作数进行比较
操作符 | 描述 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
逻辑运算符:
两个boolean类型的操作数或表达式进行逻辑比较
操作符 | 语义 | 描述 |
---|---|---|
&& | 与(并且) | 两个操作数,同时为真,结果为加 |
| | 或(或者) | 两个操作数,有一个为真,结果为真 |
! | 非(取反) | 意为“不是”,真即是假,假即是真 |
三元运算符:
将判断后的结果赋值给变量
操作符 | 语义 | 描述 |
---|---|---|
? : | 布尔表达式 ? 结果1 : 结果2 | 当表达式结果为真,获得结果1 当表达式结果为假,获得结果2 |
表达式
- 使用运算符链接的变量或字面值,并可以得到一个最终结果。
- 例如:
- i + 2;
- int a = 3; a - 2;
- int b = 10; int c = 20; b * c; c / b;
- short d = 100; int e = 200; d > e; d <= e;
- …
优先级
4.类型转换
自动类型转换
- 两种类型相互兼容
- 目标类型大于源类型
short s = 123;
int i = s; // 自动转换成功,编译通过
强制类型转换
- 两种类型相互兼容
- 目标类型小于源类型
short s = 123;
byte b = (byte)s; // 强换:(目标类型)值
强制类型转换规则
- 整数长度足够,数据完整。
例:int i = 100; byte b = (byte)i; //b=100
- 整数长度不够,数据截断。
例:int i = 10000; byte b = (byte)i; //b=16(符号位变化,可能变为负数)
- 小数强转整数,数据截断。
例:double d = 2.5; int i = (int)d; //i = 2(小数位舍掉)
- 字符整数互转,数据完整。
例:char c = 65; int i = c; //i=65
- boolean的取值为 true / false,不可与其他类型转换。
5.类型提升
自动类型提升
- 进行算数运算时:
- 两个操作数有一个为double,计算结果提升为double。
- 如果操作数中没有double,有一个为float,计算结果提升为float。
- 如果操作数中没有float,有一个为long,计算结果提升为long。
- 如果操作数中没有long,有一个为int,计算结果提升为int。
- 如果操作数中没有int,均为short或byte,计算结果仍旧提升为int。
- 特殊:任何类型与String相加(+)时,实为拼接,其结果自动提升为String。
6.控制台输入
- 程序运行中,可在控制台(终端)手动录入数据,再让程序继续运行。
- 导包语法:import 包名.类名; //将外部class文件功能引入到自身文件中。
- 使用顺序:
- 导入java.util.Scanner;。
- 声明Scanner类型的变量。(创建实例对象–后面讲到)
- 使用Scanner类中对应的函数(区分类型):
.nextInt();
//获得整数.nextDouble();
//获得小数.next();
//获得字符串.next().charAt(0);
//获得单个字符
注意:
.charAt(0);
严格意义上讲是String类中的方法,后续讲到。- 如果输入不匹配的数据,则会产生
java.util.InputMismatchException
异常错误。
总结
- 变量
计算机内存中的一块存储空间,是存储数据的基本单元。 - 数据类型
基本数据类型(8种)、引用数据类型(String、数组、类–对象、接口、枚举、注解等)。 - 运算符
算数运算符、赋值运算符、关系运算符、逻辑运算符。。。 - 类型转换
自动类型转换、强制类型转换。 - 类型提升
数字间的常规类型提升,字符串的特殊类型提升。 - 控制台录入(控制台输入)
引入工具包、声明Scanner、调用对应函数接收控制台录入数据。
面试题
public class Demo {
public static void main(String[] args) {
double d1 = 1.4;
double d2 = 0.5;
double d3 = 0.9;
double d4 = (d1-d2) / d3;
System.out.println("d4" = d4);
// 输出多少?解决方法后期会说(BigDecimal)
// d4 = 0.9999999999999999(最后一位不准确)
double c1 = 0.0/0.0;
System.out.println("c1" = c1);
// 输出多少?
// c1 = NaN(不是一个数)
double c2 = 1.0/0.0;
System.out.println("c2" = c2);
// 输出多少?Infinity——无穷
// c2 = Infinity
double c3 = - 1.0/0.0;
System.out.println("c3" = c3);
// 输出多少?
// c3 = -Infinity
}
}