一、标识符
作用:在java中的标识符就是用来给java中的一些类、方法、变量、包命名的。
命名规则:以美元符号$、_下划线、字母开头,后跟$、_下划线、字母、数字的任意组合。不能以数字开头,大小写敏感,长度无限制,不可以是java中的关键字。
注意:标识符中的字母:包括了中英文。由于Java中没有采用通常语言使用的ASCII字符集。而是采用了unicode这样的标准的国际字符集。储存的数量更多。
二、关键字/保留字
在标识符中不能以java中的关键词作为类等的命名。Java关键字是Java语言保留供内部使用的,如class用于定义类。
abstract | assert | boolean | break | byte | case |
catch | char(character) | class | const | continue | default |
do | double | else | extends | final | finally |
float | for | goto | if | implements | import |
instanceof | int | interface | long | native | new |
null | package | private | protected | public | return |
short | static | strictfp | super | switch | synchronized |
this | throw | throws | transient | try | void |
volatile | while |
|
|
|
|
三、变量
3.1变量的含义
一个老板有一个100W平的房间,让工匠将这个100W平的大房间分成若干个下啊哦房间,并且每个房间的墙面是活动的。原则是每个小房间只能住进一个客户,当有一家三口的客户入住时,就将3个小房间的墙面活动开,使3个房间融合再一起,一家三口既能住在一起,又保持了每个房间只能住一个客户的原则。并将这个3个小房间融合在一起的房间叫做荷花厅。在这之中老板就是操作系统,客户就是程序员,荷花厅就是变量名,每个小房间就是内存单元(每个内存单元只能存一个字节)。当程序员想要多个内存单元一起用时,操作系统就把这几个内存单元合起来,程序员则需要给这些内存单元取一个名字,即变量名。
3.2定义变量的方法
int a = 10 ; |
变量名首字母小写,第二个单词首字母大写(骆驼法),当我们定义一个变量时,程序员不成文的规定将变量名定位: i 、j 、k 。变量只能赋一个值。储存这个10的内存就叫a,即a是变量名,代表内存空间。a是一个变量他的值可以是10也可以赋别的值给它,但是在一个作用域只能申明一个a。
JAVA中不能不赋值使用变量,一定要先申明时就赋值。当你需要先申明一个变量但是不着急赋值的时候,可以先赋值-1,来储存一个值,以免系统报错,在后面的代码中再替换。
变量只存在于定义的作用域内,一旦出了这个作用域这个变量就不存在了。
四、常量
final int a = 10 ; |
JAVA中常量分为两种:字面常量、符号常量。一种意思,就是一个值,这个值本身,我们可以叫它常量,举几个例子:整数常量:123、实数常量:3.14、字符常量:’a’、逻辑常量:true\false、字符串常量:”helloworld”。这是说法的问题,比如7这个数,我们就可以说“一个int类型的常量7”。一种意思,Eg:final int aaa = 1;。常量表示不可变的变量,然后只要赋值之后,就不能改变了,就不能再次被赋值了。Eg:aaa赋值了1,那么aaa的值是绝对不能再被更改了,只能是1。这就是常量。
五、数据类型
JAVA中只有两大数据类型:原始型(基本数据类型)(byte.short.long.int.float.double.char.boolean)和引用型(class、interface、数组)。
//声明字节型数据 将11的值赋给b变量 byte b = 11; //声明一个短整型数据 short s = 22; //声明一个整型数据 int i = 33; //声明一个长整型数据 long l = 123456789L; //声明一个char型数据 chat c = ‘a’; //声明一个double型数据 double d = 33.192; //声明一个float型数据 float f = 33.123f; |
Java是一种强类型语言,常量是有数据类型的,变量都必须声明其数据类型。boolean型只有是否(true、false)这两个值。
浮点类型的数据默认的类型double,将一个double类型的字面常量之赋给一个float变量时需要在其后加“f”,“F”。
在java中,整数的字面常量值是int类型,在将一个超过int类型范围的字面常量赋给一个long类型的变量时,需要注意,在字面常量值后加“l”或者“L”。
char类型的数据可以接收一个没有定义类型的整数的字面常量值,在编译阶段会编译为一个对应unicode表中的字符。在java中允许出现转义字符。就是将一个特殊的字符通过特殊的方式改变了该字符原有的意义。
六、运算符
运算符分为算术运算符、关系运算符、赋值运算符、逻辑运算符四大类。
6.1算术运算符
一元运算符:++ 、-- ,二元运算符:+、-、*、/(整型除整型,结果为整型5/2=2)、%(模:取余数5%3=2,模数不能为0,小数模小数为小数本身,负数取模无意义,小数float型不取模),三元运算符:表达式1?表达式2:表达式3; 先计算表达式1的结果,只要可以得到一个boolean类型的值即可,如果结果为true,则执行表达式2,反之执行表达式3。
ASCll(AmericanStandardCodeforInfomationInterchange)美国信息交换标准码:赋以128个字符唯一值的标准,包括上、下档的字母,数字,标点符号。 a-z是97-122,A-Z是65-90,0-9是48-57。
一元运算符在单独运算是写前写后无所谓(a++ 与 ++a 相同),但是在复合使用时,++写后是先使用后自增,++写前是先自增后使用。
+号有三种意义:相加、连接符、正号。
6.2赋值运算符有
+= 、 -= 、 *= 、 /= 、 %=。
6.3关系运算符
> 、 >= 、 < 、 <= 、 == 、 !=(不等于)。最终结果为boolean型。一般配合if语句来使用。变量什么时候使用什么时候定,这样不占用内存。程序中的断言就是数学中的假定。
6.4逻辑运算符
&& (逻辑与)、 ||(逻辑或) 、 !(非) 。也是boolean型。与的优先级高于或。!(非),即真变假,假变真。‘2’+‘2’=100,因为0在ascll码中是48,2是50,这里用单引号括起来的是字符2,字符2的编码是50,所以是50+50=100。如果是“2”+“2”则=22。&&、||与&、|的区别:前者&&当左边为假时不再执行右边代码,结果为假。||当左边为真时不再执行右边代码,结果为真。提高效率。
6.5运算符优先级问题
优先级 | 运算符 | 类 | 结合性 |
1 | () | 括号运算符 | 由左至右 |
1 | [] | 方括号运算符 | 由左至右 |
2 | !、+(正号)、-(负号) | 一元运算符 | 由左至右 |
2 | ~ | 位逻辑运算符 | 由左至右 |
2 | ++、-- | 递增与自减运算符 | 由左至右 |
3 | *、/、% | 算术运算符 | 由左至右 |
4 | +、- | 算术运算符 | 由左至右 |
5 | <<、>> | 位左移、右移运算符 | 由左至右 |
6 | >、>=、<、<= | 关系运算符 | 由左至右 |
7 | ==、!= | 关系运算符 | 由左至右 |
8 | &(位运算符AND) | 位逻辑运算符 | 由左至右 |
9 | ^(位运算符XOR) | 位逻辑运算符 | 由左至右 |
10 | |(位运算符OR) | 位逻辑运算符 | 由左至右 |
11 | && | 逻辑运算符 | 由左至右 |
12 | || | 逻辑运算符 | 由左至右 |
13 | ?: | 条件运算符 | 由右至左 |
14 | == | 赋值运算符 | 由右至左 |
七、类型转换
7.1自动转换
在类型兼容的情况下,小类型可以自动转为大类型。Boolean型不能自动转换,与任何一个类型都不兼容。1字节等于8位。转换的大小顺序:byte-char(1字节)-short-int(4字节)-float-double / int-long-double(8字节)
int a = 10; double b = 12.5; char c = 'a'; b = a ; |
这里b是double型8字节,a是int型4字节,那么将a这个小盒子的东西给b大盒子的东西,大盒子b可以装下,在这里a自动转换成double型。所以编译不会报错。同理将char型的c也能放进b。但是如a=b,则会编译报错,因为b是大盒子8字节,放不进小盒子a,不能完成自动转换类型。
7.2强制类型转换
int num1 = sc.nextInt(); int num2 = sc.nextInt(); float result = num1/(float)num2; |
这里result是一个folat型变量,但是num1和num2都是整型变量,则需要将这两个其中一个变量强制转换成float型即可。整数除以浮点数得到的是整数,进行了自动转换,同理,整数除以浮点数得到的是浮点数。
int a = 5; double b =12.5; //将double类型的b强制转换成int型后,将b的值赋给a,但并没有改变b的值。所以打印出来的a=12,b=12.5。 //浮点型数据强制转换成整型后,不会保留小数,也不会四舍五入,12.1会转换成12,12.9一样转换成12。 a = (int)b ; //操作系统对二进制的操作是最快的(拓展)。 //<<是移位运算符,向左移。>>是向右移。将a向左移一位,a的赋值是3,3的二进制数是 int a = 3; a = a << 1; //这里int是4字节,就是4*8=32位。在二进制中一共有32位。int a = 3 那么这个3就是00000011前面再加上24个0。将a左移1位就变成了00000110。这时候的00000110前面加24个0就表示的是6。用移位的方法可以最快做出“a的2倍”的运算。a*2虽然也能求出a的两倍但是效率很低。移位是直接通过2进制运算,操作系统对于二进制的运算是最快的。 |
7.3总结
赋值运算中:大=小 将进行自动转换,相等 不发生转换,小=大 需要强制转化为小类型。算术运算符:在算术运算符中找到最大的byte-->short-->int-->long-->float-->double,byte short中的特例,只要字面值不超过所复制的类型范围即可正常赋值。扩展运算符隐含了强制类型转换 不光是底层编译快的而已。所以s=s+1 不直接等价于 s+=1;而是根据s的类型来的。