目录
一、用IDEA写Java程序
二、Java中数据类型
布尔类型变量
字符串类型变量
final 关键字修饰的常量
三、 理解类型转换
四、理解数值提升
int和long的混合运算
byte 和 byte 的运算
五、Java中的运算符
1.算术运算符
2.关系运算符
3.逻辑运算符
逻辑与 ——&&
逻辑或 ——||
逻辑非 !
短路求值
4.位运算符
按位与 &:
按位或 |:
按位取反 ~:
按位异或 ^:
5.移位运算
6.运算符优先级
一、用IDEA写Java程序
上一节我们简单认识了Java的main函数,并了解了用记事本如何书写简单的Java程序。
但是用记事本写只是方便我们了解Java程序编译运行的原理,我们真正还是要选择合适的编译工具。
这节我们选择用最常用的工具——IDEA来写Java程序。
(用之前记得先配置好相应的环境)
IntelliJ IDEA的下载的地址:IDEA官网。
1.进入主页面点击左上角:file>new>project
2.取合适的项目名称,选好路径
3.选择 src>New>Java Class
4.取一个合法的类名 回车即可开始写Java程序
5.编写Java程序。
6.最后只要点代码左边绿色的开始键 或者 单击鼠标右键选择run行即可运行。
二、Java中数据类型
Java中基本数据类型细分为:
(这个水印挡住字了,不过话说还不知道怎么去水印QAQ)
回归正题,上节说到布尔类型变量——
布尔类型变量基本语法格式:
boolean 变量名 = 初始值;
代码示例:
boolean value = true;
System.out.println(value);
注:1.boolean 类型的变量只有两种取值,true 表示真, false 表示假。
2. Java 的 boolean 类型和 int 不能相互转换,不存在 1 表示 true, 0 表示 false 这样的用法。
3. boolean 类型有些 JVM 的实现是占 1 个字节,有些是占 1 个比特位,这个没有明确规定。
字符串类型变量基本语法格式:
String 变量名 = "初始值";
代码示例:
String name = "zhangsan";
System.out.println(name);
注:1.和上面的类型不同, String 不是基本类型, 而是引用类型。
2.字符串中的一些特定的不太方便直接表示的字符需要进行转义。
1、 字符串的 + *** 作, 表示字符串拼接:(注意:俩字符串拼接,打印结果中间没有空格)
public class testdemo { public static void main(String[] args) { String a = "hello"; String b = "world"; String c = a + b;//打印结果为helloworld 中间无空格 System.out.println(c); } }
2、字符串和整数进行拼接:
public class testdemo { public static void main(String[] args) { String str = "result = "; int a = 10; int b = 20; String result = str + a + b; System.out.println(result);// 执行结果:result = 1020 } }
归纳:当Java在输出时,先碰到 "字符串"+ 的时候,就会默认后面都执行字符串拼接 *** 作;如果第一个不是字符串,则先执行正常的运算。
【例如上述代码改成:System.out.println(a+b+str),则输出“30result=”】
final 关键字修饰的常量一旦被final修饰,则在程序运行的过程中,不能再次被修改。即在程序编译时,就已经确定其值了。
(而变量,则是在程序运行过程中才能知道里面的是几)
三、 理解类型转换
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有严格的校验。
先看一个例子:
结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行。
类比理解一下:假如有水杯1、水杯2。
水杯1的容量大于水杯2。
则将水杯2的水倒入水杯1是保证能被装下的,(即绝对不会超出范围,不会报错),而水杯1的水倒入水杯2则不一定能被完全装下。
结论:
1. 强制类型转换可能会导致精度丢失。如刚才的例子中,赋值之后, 10.5 就变成 10 了,小数点后面的部分被忽略。
2. 强制类型转换不是一定能成功,互不相干的类型之间无法强转。(例如布尔值与整型之间不能转换,这与C语言有很大区别,Java中的布尔值只有true和false,没有1或0的表示形式)
四、理解数值提升 int和long的混合运算
结论:
当 int 和 long 混合运算的时候,int 会自动提升成 long,得到的结果仍然是 long 类型,需要使用 long 类型的变量来接收结果。如果非要用 int 来接收结果, 就需要使用强制类型转换。
byte 和 byte 的运算
结论:byte和byte都是相同类型,但是居然出现编译报错。虽然a和b都是byte,但是计算a+b会先将a和b都提升成int,再进行计算,得到的结果也是int,这是赋给c,就会出现上述错误。
由于计算机的CPU通常是按照4个字节为单位从内存中读写数据。如byte和short这种低于4个字节的类型,会先提升成int,再参与计算。
正确的写法:(要用强制类型转换)
byte a = 10; byte b = 20; byte c = (byte)(a + b); System.out.println(c);五、Java中的运算符 1.算术运算符
- 基本四则运算符 + - * / %
- 增量赋值运算符 += -= *= /= %=
- 自增/自减运算符 ++ --
需要额外注意的是,
- 除法中 int/int结果还是int,无论你是否用double接收。
-
int a = 1; int b = 2; System.out.println(a / b); // 结果为 0
- 0不能作为除数。
- % 表示取余, 不仅仅可以对 int 求模, 也能对 double 来求模。
关系运算符主要有六个: == != < > <= >=
注意:关系运算符的表达式返回值都是:boolean 类型。
3.逻辑运算符逻辑运算符主要有三个: && || !
逻辑与 ——&&规则: 两个 *** 作数都为 true, 结果为 true, 否则结果为 false。
int a = 10; int b = 20; int c = 30; System.out.println(a < b && b < c);//输出为true逻辑或 ——||
规则: 两个 *** 作数都为 false, 结果为 false, 否则结果为 true。
int a = 10; int b = 20; int c = 30; System.out.println(a < b || b < c); //输出为true逻辑非 !
规则: *** 作数为 true, 结果为 false; *** 作数为 false, 结果为 true。(注:这是个单目运算符,仅有一个 *** 作数)
短路求值&& 和 || 遵守短路求值的规则。
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true
由上面例子能看出,要是计算到右侧表达式,则一定会报错,可是结果却没有报错,说明压根没有执行到右侧的表达式就已经得出结果了。
结论:
1. 对于&&,如果左侧表达式值为false,则表达式的整体的值一定是false,无需计算右侧表达式。
2.对于||,如果左侧表达式值为 true,则表达式的整体的值一定是true,无需计算右侧表达式。
4.位运算符位运算符主要有四个:& | ~ ^
按位与 &:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0。
int a = 10; int b = 20; System.out.println(a & b);
进行按位运算, 需要先把 10 和 20 转成二进制, 分别为 1010 和 10100,再进行对应位的比对,最后转为十进制输出。
按位或 |:如果两个二进制位都是 0,则结果为 0,否则结果为 1。
(运算方式同上)
注意:当 & 和 | 的 *** 作数为整数(int, short, long, byte) 的时候,表示按位运算,当 *** 作数为 boolean 的时候,表示逻辑运算。
按位取反 ~:如果该位为0,则转为 1,如果该位为 1,则转为 0。
int a = 0xf; System.out.printf("%xn", ~a);
注意:
0x前缀的数字为十六进制数字。十六进制可以看成是二进制的简化表示方式。一个十六进制数字对应4个二进制位。0xf 表示十进制的15, 也就是二进制的1111。
按位异或 ^:如果两个数字的二进制位相同,则结果为0,相异则结果为1。
5.移位运算移位运算符有三个:<< >> >>>
左移 <<:最左侧位不要了,最右侧补0。
右移 >>:最右侧位不要了,最左侧补符号位(正数补0, 负数补1)。
无符号右移 >>>:最右侧位不要了,最左侧补0。
结论:
1. 左移 1 位, 相当于原数字 * 2 ;左移 N 位, 相当于原数字 * 2 的N次方。
2. 右移 1 位, 相当于原数字 / 2 ;右移 N 位, 相当于原数字 / 2 的N次方。
3.由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替。
6.运算符优先级如下表所示。可以稍微记忆一点,一般写程序直接要先的打上括号即可,优先级一般只有部分考试题目会用到。
to be continue →
欢迎大家互相探讨交流补充 欢迎捉虫!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)