基本知识:
1.内存:瞬时(临时)状态下的存储空间,造价高,工业上的设计瓶颈。
2.变量:计算机内存中的一块存储空间,是存储数据的基本单元。
- 整个内存就像酒店,当中包含多个房间。
- 房间的类型有所不同。(数据类型)
- 每个房间都有一个唯一的门牌号。(变量名)
- 房间的住客不同。(值)
定义流程:
先声明:数据类型 变量名;
再赋值:变量名 = 值;
或声明并赋值: 数据类型 变量名 = 值;
public class Test{
public static void main(String[] args){
int money;//开辟整数变量空间
money = 100;//将整数值赋给变量
System.out.println(money);//输出后换行 print仅打印输出,不换行
int age = 20;
System.out.println(age);
}
}
多个同类型变量的声明和赋值(不常用,可读性差): 数据类型 变量名 = 值,变量名 = 值;
注意:变量需要先赋值,再使用,否则报错:尚未初始化。
3.java虚拟机默认分配的物理内存是内存的八分之一。
bit(位)->Byte(字节)->KB->MB->GB->TB->PB->EB->ZB->YB->NB->DB->CB->XB
**
数据类型
**
java中的变量有严格的数据类型区分。在Java中。任何一个值都有其对应类型的变量。
- 基本数据类型
- 整数
- 小数
- 布尔
- 字符
- 引用数据类型
- 字符串
- 数组
- 对象
二进制表现形式:
byte == 8bit 如:十进制 1 = 二进制 0000 0001。(第一个为符号位,0代表正数,1代表负数) -1 = 1111 1111 ;-128 = 1000 0000
整数
类型 | 字节 | 取值范围(二进制) | 取值范围(十进制) |
---|---|---|---|
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(超过int 2147483647的才需要)。
long i = 2147483648;/虽然值在long的范围内,但因这个整数超出了int,而java默认为int,因此会报错。
long i = 2147483648L;/后面加一个L后,即认为这个整数是long类型,运行不会报错。
程序运行过程中,瞬时空间(局部变量表 -Slot 槽,一个槽可以存储 byte short int char boolean … reference,不包含long double,最大空间2^32位。long double用两个槽)
赋值时不必精准匹配什么类型。一般用int就行。byte因代表1字节因此在字节流部分有特别用途。
小数/浮点数
类型 | 字节 | 负数取值范围 | 正数取值范围 |
---|---|---|---|
float | 4字节,单精度 | -3.4E+38~~-1.4E-45 | 1.4E-45~3.4E+38 |
double | 8字节 ,双精度 | -1.7E+308~-4.9E-324 | 4.9E-324~1.7E+308 |
浮点型数值采用科学计数法表示:
2E3 = 2*10^3 结果 2000.0。
为float类型赋值后面+ F(因为浮点型默认类型是double)。
当然,0.0是可以的。
java使用的IEE7E54二进制浮点数算术标准。
double,float不是精确运算,都是近似结果。
float:32bit。 1bit 符号位 8bits指数位 23 bits尾数位。
double: 64bit。 1bit 符号位 11bits 指数位 52bits尾数位。存的都是近似值
也就是为什么int和float都是4字节,而为什么float存储的取值范围更大。
布尔
类型 | 字节 | 取值范围 | 描述 |
---|---|---|---|
boolean | 1字节 | true/false | 仅可描述真或假 |
可直接复制true/false,或一个结果为true或false的表达式
Boolean result = 3 > 2;
java中boolean不能参与算术运算。
字符
类型 | 字节 | 取值范围(无符号数) | 字符编码 |
---|---|---|---|
char | 2字节 | 0~65535 | Unicode字符集(万国码) |
char c1 = 'A';
char c2 = 65;
char c3 = '中';
system.out.println(c3);
system.out.println((int)c3);
Unicode字符集支持ASCII编码
Unicode中每个字符对应一个十进制整数,从而可以多种方式赋值
- 字符赋值:char c1 = ‘A’ ;通过’'描述为字符赋值。
- 整数赋值:char c2 =’ 65’;通过十进制赋值。
- 进制赋值:char c3 = ‘\u0041’;通过16进制数41在字符集中对应的字符赋值。
转义字符
转义字符 | 描述 |
---|---|
\n | 换行符 |
\t | 制表符 |
\ | 反斜线 |
’ | 单引号 |
" | 双引号 |
引用数据类型(字符串)
类型 | 取值范围 | 字符编码 |
---|---|---|
String | 任何""之间的内容 | Unicode字符序列 |
字符串内部是字符数组
可以为空
类型转换
- 自动类型转换
- 两种类型互相兼容
- 目标类型大于源类型
如:short → int → double
short s = 127;
int i = s;
double d = i;
强制类型转换
失去精度:
- 小数强转为整数,如double → int
- 整数强转为整数,大的往小的里面放,如short→byte
double d =12.34;
int i = (int)d;
System.out.println(i);
short m = 130;
byte n = (byte)m;
System.out.println(n);
强制转换规则:
- 整数长度足够,数据完整
- 整数长度不够,数据截断
- 小数强制转整数,小数位丢失
- 字符整数互转,数据完整。
- boolean的取值为true/false 不可与其他类型转换
类型提升
进行算术运算时:
- 两个操作数有一个小数,类型就自动转为double
- 两个操作数没有double,有一个为float,计算结果提升为float
- 如果操作数中没有float,有一个long,计算结果提升为long
- 如果操作数中没有long,有一个为int,计算结果提升为int
- 如果操作数中没有int,均为short或byte,计算结果提升为int
特殊:任何类型与String相加(+)拼接时,其结果自动提升为String
运算符
算术运算符 | 描述 |
---|---|
+ | 相加 |
- | 相减 |
* | 相乘 |
/ | 相除取整 |
% | 相除取余 |
++,–,递增、减1
a++和++a区别:前++的优先级最高,后++的优先级最低,因此前++是先自加再使用而后++是先使用再自加
赋值运算符:等号右边赋值给等号左边
赋值运算符 | 描述 |
---|---|
= | 直接赋值 |
+= | 求和后赋值 |
-= | 求差后赋值 |
*= | 求积后赋值 |
/= | 求商后赋值 |
%= | 求余后赋值 |
关系运算符:两个操作符比较,运行之后等到一个Boolean类型
关系运算符 | 描述 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
逻辑运算符:两个Boolean类型的操作数或者表达式进行逻辑比较
操作符 | 语义 | 藐视 |
---|---|---|
&& | 与(并且) | 同时为真,结果为真 |
|| | 或(或者) | 一个为真,结果为真 |
! | 非(取反) | 真即为假,假即为真 |
三元运算符:将判断的结果赋值给变量
操作符 | 语义 | 描述 |
---|---|---|
?: | 布尔表达式?结果1:结果2 | 当表达式为真,获得结果1,为假获得结果2 |
控制台输入
程序运行中,可在控制台(终端)手动录入数据,再让程序继续运行。
1.导包 import 包名.类名;//将外部class文件功能引入到自身文件中
import java.util.Scanner;
2.声明Scanner类型的变量;
Scanner input = new Scanner(System.in);
System.out.println("请输入一个值:");
int num = input.nextInt();//将控制台获取的一个整数值,赋值给num变量
System.out.println("您输入的值为:" + num );
nextInt()、nextDouble()
next()接收字符串。
next().charAt(0);接收首个字符
String s = input.next();
char c = input.next().charAt(0);
如果输入不匹配的数据,则会产生java.util.InputMismatchException