java特性和优势
- 简单性
- 面向对象
- 可移植性
- 高性能
- 分布式
- 动态性
- 多线程
- 安全性
- 健壮性
JDK JRE JVM
JDK 最大 包着以下两个
Java Development Kit
JRE
Java Runtime Environment
JVM
JAVA Virtual Machine
数据类型
-
强类型语言
-
- 要求变量的使用有严格符合规定,所有变量都必须先定义后才能使用
-
弱类型语言
-
Java的数据类型分为两大类
- 基本类型(primitive type)
- 引用类型(reference type)
数据类型
基本类型(primitive type)
- 数值类型
整数类型 | 字节大小 | 范围 |
---|---|---|
byte | 1 | -128-127 |
short | 2 | -32768-32767 |
int | 4 | -2147483648-214748364 |
long | 8 | -9223372036854775808-9223372036854775807 |
浮点类型 | 字节大小 |
---|---|
float | 4 |
double | 8 |
字符类型char | 2 |
- boolean类型:占1位其值只有true和false两个
整数拓展: 进制 二进制ob 十进制 八进制0 十六进制0X
输出
int i = 10; 10
int i = 010; //八进制0 8
int i = 0x10; //十六进制0X 0~9 A~F 16 16
int i = 0x11; 17
浮点数拓展 银行业务怎么表示? 钱
-
BigDecimal 数学工具类
-
float 有限 离散 舍入误差 大约 接近但不等于
-
double
-
最好完全避免使用浮点数进行比较
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
输出
f==d //false
float d1 = 23131654351F;
float d2 = d1 + 1;
输出
d1==d2 //true
-
字符拓展
char c1 = 'A'; char c2 = '中'; 输出 c1 = A (int)c1 = 65 //强制转换 c2 = 中 //强制转换 (int)c2 = 20013 //强制转换
- 所有的字符本质还是数字
- 编码 Unicode 表: (97 = a 65 = A)2字节 0 - 65536 Excel 2 16 = 65536
- U0000 UFFFF
- 所有的字符本质还是数字
char c3 = '\u0061';
输出
c3 = a;
转义字符
- \t 水平制表符
- \n 换行
输出
Hello\tWorld = Hello World
Hello\nWorld = Hello
World
对象 从内存分析
输出
String sa = new String("hello world");
String sb = new String("hello world");
sa = sb //false
String sc = "hello world";
String sd = "hello world";
sc = sd //true
什么是字节
- 位(bit): 是计算机内部数据 储存的最小单位,11001100是一个八位二进制数。
- 字节(byte): 是计算机中 数据处理 的基本单位, 习惯上用大写 B 来表示,
- 1B(byte,字节)= 8bit(位)
- 字符: 是指计算机中使用的字母 数字 字和符号
类型转换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSXNw8pl-1596557159876)(C:\Users\10560\AppData\Roaming\Typora\typora-user-images\image-20200804233646771.png)]
注意点
- 不能对布尔值进行转换
- 不能把对象类型转换不相干的类型
- 在把高容量转换到低容量的时侯,强制转换 //比如int i = 1; 输出((byte)i)
- 转换的时侯可能存在内容溢出,或者精度问题!
JDK7 新特性,数字之间可以下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years; //-1474836480,计算的时侯溢出了
long total2 = money*years; //默认是int,转换之前已经存在问题了?
long total3 = money*((long)years); //先把一个数转换为long
输出才正常