注释:用于解释说明程序的文字
注释分类:
1、单行注释
格式://注释文字
2、多行注释
格式:/* 注释文字 */
3、文档注释
格式:/** 注释文字 */
注释作用
1、对程序进行解释说明:要求代码中,有30%行数都是用来写注释的
2、对程序的思路进行描述
3、对程序进行调试:通过注释的方式,快速定位出现错误的代码位置
关键字概述
1、关键字是被Java语言赋予特殊含义,具有专门用途的单词,比如之前接触的class,public,static,void均为Java已经预设好的。
2、你可以先把Java关键字理解为“命令”!
关键字特点
1、组成关键字的字母全部小写。
2、常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观,所以我们不需要去死记硬背,在今后的学习中重要的关键字也会不断的出来。
Java中的所有关键字展示
注:有两个保留字:goto、const,在当前版本不使用,但是以后是否使用未知。
什么是标识符?
其实在Java程序中,除了关键字以外基本上都是标识符了。
其实标识符就是名称的意思,所有的名称都统称为标识符。
Java中经常要定义类、方法、变量(后面会学习到),在定义他们时总要给它们起名字,这些名字就是标识符。我们要学习的就是标识符的规范。凡是可以自己起名字的地方都叫做标识符。
组成元素
1、英文字符: a-zA-Z
2、数字: 0-9
3、符号: _与$
标识符规范
1、数字不能开头
2、不可以使用关键字
3、严格区分大小写,不限制长度起名时,尽量达到见名知意
4、类名:首字母大写,其他字母小写,若有多个单词,每个单词的首字母大写(后面学习)
5、方法名:第一个单词字母小写,后面的单词首字母大写,其他字母小写
6、变量:一个单词首字母小写。多个单词,从第二个单词开始每个单词首字母大写(驼峰形式)非强制要求,约定俗称的规则
常量就是不变的数据量,例如100就是常量,任何数据量都有其类型,那么100这个常量是什么类型呢?回忆一下基本类型中有四类,分别是整数、小数(浮点数)、字符、布尔。
变量:在程序中可以变化的量称为变量(常量是固定不变的量)
Java中要求一个变量每次只能保存一个数据,必须要明确保存的数据类型。
格式:数据类型 变量名 = 数据值;
例如:int a = 100;
其中int是数据类型,指定了变量只能存储整数,而且指定了存储范围为-2147483648~2147483648。
其中a表示变量名,变量名是标识符,这说明只要是合法的标识符都可以用来做变量名。在程序中可以通过变量名来操作变量。
其中“=100”是给变量赋值,即向a变量中写入100。
注意事项
变量定义后可以不赋值,使用时再赋值。不赋值不能使用
变量不能重复定义,并且赋值时类型得匹配。
变量使用时有作用域的限制。
1.数据类型分类
在生活中数据是有类型的,例如人的姓名是字符串类型,人的年龄是正整数类型。在Java中数据也是有类型的。
Java中数据的类型:
2.基本数据类型
是Java语言中内置的类型,分别是整数类型、浮点类型、字符类型、布尔类型。这四类基本类型是最简单、最基础的类型。
(1)整数类型
十进制表示方式:正常数字 如 13、25等
二进制表示方式:以0b(0B)开头 如0b1011 、0B1001
八进制表示方式:以0开头 如01、07、0721
十六进制表示方式:以0x(0X)开头 数字以0-9及A-F组成 如0x23A2、0xa、0x10
(2)浮点数类型
如1.0、-3.15、3.168等
(3)布尔类型
true、false
(4)字符类型
如'a','A', '0', '家'
字符必须使用’’ 包裹,并且其中只能且仅能包含一个字符。
基本数据类型占用大小和表示范围
四类
八种
字节数
数据表示范围
整型
(精确)
byte
1
-128~127
short
2
-32768~32767
int(默认)
4
-2147483648~2147483647
long
8
-263~263-1
浮点型
(不精确)
float
4
-3.403E38~3.403E38
double(默认)
8
-1.798E308~1.798E308
字符型
char
2
表示一个字符,如('a','A','0','家')
布尔型
boolean
1
只有两个值true与false
数据类型转换
不同类型的变量是否可以在一起运算呢?答案是可以的,但要先进行类型转换再运算。下面我们来学习一下类型转换。
(1)自动类型转换
表示范围小的数据类型(如byte)可以直接转换成范围大的数据类型(如int),这种方式称为自动类型转换。
格式:范围大的数据类型 变量 = 范围小的数据类型值;
(2)强制类型转换
表示范围大的数据类型(如int)不可以转换成范围小的数据类型(如byte),但可以强制转,这种方式称为强制类型转换。
格式:范围小的数据类型 变量 = (范围小的数据类型) 范围大的数据类型值;
转换规律:
各种数据类型按照数据范围从小到大依次列出:范围小的类型向范围大的类型提升:byte<short=char‐‐>int‐‐>long‐‐>float‐‐>double
byte、short、char 运算时直接提升为int,同样的道理,当一个int 类型变量和一个double 变量运算时, int 类型将会自动提升为double 类型进行运算。
注:
浮点转成整数,直接去掉小数点,可能造成数据损失精度。
int 强制转成byte砍掉3个字节,可能造成数据丢失(丢失精度)。
运算符:对常量和变量进行操作的符号称为运算符
表达式:用运算符把常量或者变量连接起来符号java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。
&& 短路与
特点:符号左边是false,右边不运算
|| 短路或
特点: 符号左边是true,右边不运算
结论:实际开发中都是使用短路与&&和短路或||,因为效率更高
格式:数据类型 变量名 = 布尔类型表达式?值1:值2
计算方式: 布尔类型表达式值是true时,三元运算符整体值为值1,赋值给变量。
布尔类型表达式值是false时,三元运算符整体值为值2,赋值给变量。
任何信息在计算机中都是以二进制的形式保存的,”&”、“|”、“^”除了可以作为逻辑运算符也可以作为位运算符。位运算是直接对二进制进行运算。他们对两个操作数中的每一个二进制位都进行运算。例如int是由32个二进制数组成,因此使用位运算符可以对整数值的二进制数进行运算。按位操作符用来操作整数基本数据类型中的单个比特(bit),就是二进制,按位操作符会对两个参数中对应的位(bit)执行布尔运算,最终生成一个结果。按位操作符来源于C语言面向底层的操作,Java设计的初衷是嵌入式电视机机顶盒,所以面向底层的操作也保留了下来。
1.&运算
& 参加运算的两位数都为1,&运算符结果才为1,否则就为0。
例如:6&3
00000000
00000000
00000000
00000110
6
00000000
00000000
00000000
00000011
3
00000000
00000000
00000000
00000010
& =2
2.|运算
| 参与运算的两位都为0,|运算的结果才为0,否则就为1。
00000000
00000000
00000000
00000110
6
00000000
00000000
00000000
00000011
3
00000000
00000000
00000000
00000111
| =7
3.^运算
^只有参加运算的两位不同,^运算的结果才为1,否则就为0。
00000000
00000000
00000000
00000110
6
00000000
00000000
00000000
00000011
3
00000000
00000000
00000000
00000101
^ =5
4.~运算
就是取反,二进制只有1和0,取反就是如果为1,取反就是0,如果是0,取反就是1。
0000-0000
0000-0000
0000-0000
0000-0110
6
1111-1111
1111-1111
1111-1111
1111-1001
取反 -7
结论:当参与取反的数值是正数时,把对应的值加上负号,再-1;
当参与取反的数值是负数时,把对应的值加上负号,再-1;
负数的表现形式就是对应的正数取反,再加1。负数的最高位肯定是1。
例如
(1)左移 (算术移位)
3<< 2 是如何在计算机里是实现的?
首先将3转换为2进制,
00000000
00000000
00000000
00000011
3 的二进制
00000000
00000000
00000000
000011
左移2位,砍掉高位
0000 0000
0000 0000
0000 0000
0000 1100
低位补0
结果是12,所以3<<2 =12;
结论:左移就相当于乘以2的位移个数次幂.
(2)右移
6>>2
00000000
00000000
00000000
00000110
6的二进制
000000
00000000
00000000
00000001
右移10被砍掉
00000000
00000000
00000000
00000001
高位补0
结果是1,所以6>>2 =1;
结论:一个数往左移越移越大,往右边移越来越小.
推论
3<<2=12; 3<<1=6 ; 3<<3=24;
3*4=12 ; 3*2=6; 3*8=24;
3*22=12; 3*21=6 3*23 =24;
结论往左移几位就是乘以2的几次幂。
右移规律
6>>2=1 ;6>>1=3 ;
6/4=1 ; 6/2=3 ;
右移两位就是除以 2的2次方,右移一位就是除以 2的一次方。
总结 :>> 是除以2的移动位数次幂
<< 是乘以2的移动位数次幂
用处:最快的运算是位运算。
(3)无符号右移 (逻辑移位)
通过演示发现右移时高位就空了出来, >> 右移时高位补什么要按照原有 数据的最高位来决定。
1111-1111 1111-1111 1111-1111 1111-1010 -6>>2
1111-1111 1111-1111 1111-1111 1111-0010
最高位补什么要看原有最高位是什么
那么使用>> 后原来是最高位1 的那么空出来的最高位还是1 的,是0的还是0。
如果使用>>> 无论最高位是0还是1 空余最高位都拿0 补,这就是无符号右移。
1111-1111 1111-1111 1111-1111 1111-1010 -6>>>2
001111-1111 1111-1111 1111-1111 1111-10
结果是;1073741822
方法一
public class Test{ public static void main(String[] args){ int a = 1; int b = 2; int temp = a; a = b; b = temp; System.out.println(a); System.out.println(b); } }方法二
public class Test{ public static void main(String[] args){ int a = 1; int b = 2; a = a+b; b = a-b; a = a-b; System.out.println(a); System.out.println(b); } }方法三
public class Test{ public static void main(String[] args){ int a = 1; int b = 2; b = a+b - (a=b); System.out.println(a); System.out.println(b); } }方法四
//要交换的两个数不能相等 public class Test{ public static void main(String[] args){ int a = 1; int b = 2; a = a^b; b = a^b; a = a^b; System.out.println(a); System.out.println(b); } }