JDK JRE JVM
- JVM(Java Virtual Machine)虚拟机:使用软件在不同操作系统中,模拟相同的环境。
- JRE(Java Runtime Environment)运行环境:包含JVM和解释器,完整的Java运行环境。
- JDK(Java Development Kit)开发环境:包含JRE + 类库 + 开发工具包(编译器+调试工具)。
注释
// 单行注释
/* */文本注释
转义符
\t \n \ ’ \ "
转义符要用\号
System.out.println("海贼王、\"");
System.out.println("海13456\t\"贼\"78\t王");
输出:
海13456 "贼"78 王
海 "贼" 王
用\t转义符可以很好输出整齐的格式
- 注意了,经常没有加上";“号和字符串输出中的”+"号;
基本数据类型(八大数据类型)
整数: byte short int long 一般输出整型默认位int型
浮点数: float double 一般浮点型默认为double型
布尔型: boolean
字符型: char
能有后缀名的有 long, float, doubt
可以用16进制+L
long num1 = 123456L;
float num2 = 123456F;
double num3 = 123456d;
long l = 1000;可以
float f = 1000;可以
float f1 = 1000.0不可以
原因:1000默认为int型,可以转成float型,但1000.0默认为double,转成float会有损失
整型
整型一般默认为浮点型
byte b1 = 56;
byte b2 = 135;
System.out.println(b1);
System.out.println(b2);
可以看b2的取值大于了其范围了,这时候会报错
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DSsYvLxo-1639058773856)(C:\Users\31386\AppData\Roaming\Typora\typora-user-images\image-20210713192148136.png)]
在这里强行大转小,会出现损失 后面short int 也一样
byte b2 = (byte)135;
输出结果: -121
注意:在赋值阶段,如果所赋的值在其定义类型里(如 byte num = 5),那没问题,但如果赋值大于其范围,那只能强行转换 (如 byte num = (byte)135)
浮点型
浮点型默认为double 与 int 不同 byte、short 中只要符合其范围即可赋值,浮点型要声明其赋值才可
(float f1 = 1546.3164f)
字符型
char c1 = 'a';
int i2 = c1;
double d2 = (double)c1;
System.out.println(c1);
System.out.println(i2);
System.out.println(d2);
输出:
a
97
97.0
注意:char a = ’ ‘在单引号间只能放一个英文、一个中文、或一个数字,在没有’'时,只能输入数字,在超出范围时,输出为? 其对应的赋值可以转换成其他形式如整型、浮点型,具体看上面。在char中,char字符可以转成整型int(不用强转), int、long可以接收char,但short、byte不行,也可以直接转成float、double型
int a = 3 + '5'; //结果为56
char b = 3 + '5'; //结果为8
布尔型
基础数据类型可以互相转换,除布尔型外
运算符
加减乘除 + - * / %
37.2%10 结果为7.2000000,注意只除到整数
会根据类型不同而输出不同的类型
- **整型与浮点型+ - / * 输出结果为浮点型 **
- int + short(或者byte) = int
- int + long = long
- char + int = int
- char + short(或byte) = int
- char 可以转为 int,但int 转不成char
- float + int = float
以此类推
整型运算操作会直接转换成int类型
short s1 = 32767;
short s2 = 32767;
short s3 = s1 + s2;
System.out.println(s3);
结果:不兼容的类型: 从int转换到short可能会有损失
short s3 = s1 + s2;
s1加上s2已经超出了short大小了,会转成int型
short s1 = 1;
short s2 = 2;
short s3 = s1 + s2;
结果:
Error:(7, 23) java: 不兼容的类型: 从int转换到short可能会有损失
short s = 1;
short c = s + 1;
报错:
错误: 不兼容的类型: 从int转换到short可能会有损失
short c = s + 1;
要改为:
short c = (short)(s +1);
System.out.println(c);
注意:
short c = s +(short)1;
不行,因为他要先计算,后面才转型,这样冲突了
short s = 1;
short s1 = s + 1; //报错
s = s + 1 ; //报错
s += 1 ;成功
s = s + 1,在s + 1的时候,结果会被“升格”为int类型。将int高级类型转为低级类型,需要强制转换,所以自然编译不会通过.
s += 1 对于“+=”操作,jvm会自动执行类型操作,等价于 s = (short)(s + 1)
num += 1
num -= 1
num *= 1
num /= 1
和num = num + 1一样
自动类型转换
Java自动的隐含的将每个byte、short或char操作数提升为int类型
如果有一个操作数是long类型,就将整个表达式提升为long类型;
如果有一个操作数是float类型,就将整个表达式提升为float类型;
如果任何一个操作数为double类型,结果将为double类型。
long + double = double
例子1 Java自动的隐含的将每个byte、short或char操作数提升为int类型
short s1 = 5;
short s2 = 6;
short s3 = s1 + s2;
//byte + short = int等等
//short + short = int
关系运算符
布尔型 boolean
== !=
> , < , >=, <=
一目运算符
++a a++
–a a–
前++为先++后执行 后++为先执行后++
(重点)综合性运算结果
int num1 = 6;
int num2 = 6;
num1 += num1*10 + (++num1) + (num1++);
num1 = num1 + num1*10 + (++num1) + (num1++);
6 60 7 7
结果:80
-----------------------------------------------------
num2 += (num2++) + num2*10 + (++num2);
num2 = num2 + (num2++) + num2*10 + (++num2)
6 6 7*10 8
结果:90
这两个练习
//解方程解出 num3 和 num4
int num3 = (num1++)+(++num1)+num1*10;
int num4 = num2*10+(num2++)+(++num2);
System.out.println("num3:"+num3);//94
System.out.println("num4:"+num4);//74
当运算过了自己后i++就会生效, 像 (a++) + a,实际等于a + (a+1)
三目运算
关系表达式?表达式1:表达式2
当关系表达式结果为true的时候,总结果为表达式1,当关系表达式返回false的时候,总结果为表达式2
int a = 100;
int b = 80;
int max = a>b?a :b;
System.out.println(max);