一、关键字
被Java语言赋予了特殊的含义,用做专门用途的字符串和单词
关键字一共50个,其中const和goto是保留字(reserved word)。
true,false,null不在其中,它们看起来像关键字,其实是字面量,表示特殊的布尔值和空值。
二、标识符
Java中变量、方法、类等要素命名时使用的字符序列
换句话说,凡是可以自己命名的地方都叫做标识符,比如说:类名、方法名、变量名、包名、常量名。
标识符命名规则:
-
由26个英文字母大小写,0-9 ,_或 $ 组成
-
数字不可以开头。
-
不可以使用关键字和保留字,但能包含关键字和保留字。
-
Java中严格区分大小写,长度无限制。
-
定义标识符时,要注意“见名知意”
-
如果不按规则来,会发生编译报错!
三、变量
-
变量是程序中不可或缺的组成单位,是最基本的存储单元
-
变脸的理解:内存中的一个存储区域,该区域的数据可以再同一类型范围内不断变化。
-
构成变量三要素:数据类型、变量名、存储的值。
-
变量的声明与赋值(或者初始化)
1.数据类型
Java中的变量按照数据类型来分类:
-
基本数据类型(8种)
-
整形:byte\short\int\long
-
浮点型:float\double
-
字符类型:char
-
布尔类型:boolean
-
-
引用数据类型
-
类(class)
-
数组(array)
-
接口(interface)
-
枚举(enum)
-
注解(annotation)
-
记录(record)
-
2.说明
1.变量都有其作用域,变量只在作用域内是有效的。
2.在同一个作用域中不能声明两个同名的变量
定义赋值好一个变量后,可以通过变量名的方式进行调用或计算。
3.基本数据类型
3.1整型变量
类型 | 占用存储空间 | 表述范围 |
---|---|---|
byte | 1字节(byte)=8位(bit) | -128~127 |
short | 2字节(byte)=16位(bit) | -2^15~2^15-1 |
int | 4字节(byte)=32位(bit) | -2^31-2^31-1 |
long | 8字节(byte)=64位(bit) | -2^63-2^63-1 |
注意
-
定义long类型变量时,赋值时需要以“l”或者”L"作为后缀
-
在平时开发中,Java程序中通常声明为int类型,除非不足以表示较大的数,超出了int类型的表数范围,才是用long,所以Java中默认整形常量为 int类型。
-
字节、位
-
字节是计算机中用于计算存储容量的基本单位。一个字节等于8个bit。
-
位是数据存储的最小单位。在二进制中,每一个0或者1就是一个位,也叫作bit。
-
计算机存储单位转换关系
-
8bit=1Byte
-
1024Byte=1KB
-
1024KB=1MB
-
1024MB=1GB
-
1024GB=1TB
-
3.2浮点型变量
-
浮点型常量的两种表示方式:
-
十进制数形式。如:5.12 512.0f .521(必须要有小数点)
-
科学技术发表现形式:5.12e2 512E2 100E-2
-
-
float:单精度,尾数可以精确到7位有效数字,赋值时需要以“f"或”F"作为后缀,但很多情况下很难满足需求。
-
double:双精度,精度是float的两倍。在Java开发中,通常浮点型默认为double型。
3.3 字符类型(char)
-
char类型数据用来表示通常意义上字符(占2个字节)
-
Java中的所有字符都是用Unicode编码,所以一个字符可以用于存储一个字母、一个汉字,或书面语中的一个字符。
-
字符型变量的三种表现形式:
-
//表示形式1:使用一对''单括号进行表示,内部有且仅有一个字符 char c1="李"; char c2="a"; char c3="#"; //错误 //char c6=''; //char c7='ab';
-
//表示形式2:直接使用Unicode值来表示字符常量。 char c8='\u0036';
-
//表示形式3:使用转义字符 char c9='\n'; char c10='\t';
-
//表现形式4使用具体字符对应的数值(比如ASCII码) char c11=97;//a char c12='1';//49 char c13=1;//SOH
-
3.4 布尔类型
-
布尔类型只有两个取值true,false
-
boolean bo1=true; boolean bo2=false;
-
-
经常使用在流程控制语句。(条件判断、循环结构)
-
我们一般不谈boolean类型占用存储空间大小。但是真正在内存中分配的话还是4个字节。
4.基本数据类型见得运算规则
-
基本数据类型中可以做运算的有7种,不包含boolean类型
-
运算规则包括:
-
自动类型提升
-
强制类型转换
-
1.自动类型提升
-
规则:当容量小的变量和容量大的变量做运算时,结果自动转换为容量大的数据类型
-
byte 、short、char---->int--->long--->float--->double
-
byte、short类型的变量之间做运算,结果为int类型
-
这里的容量大小并不是数据类型占用内存空间大小,而是指的是表数范围大小
-
-
一般情况
-
int i1=20; long l1=i1; float f1=l1; //20.0 byte b1=12; short s1=10; int i2=b1+s1; //22
-
2.强制类型转换
rules:
-
如果需要将容量大的类型转换为容量小的类型,需要使用强制类型转换
-
强制类型转换需要使用强转符:()。在()内可以指明要转换为的数据类型
-
一般情况:
-
long d1=90; int i1=(int)d1; //90 long l1=123; short s1=(short)s1; //123
-
-
精度损失
-
double d2=12.3; int 12=(int)d2 //12 int i5=128; byte b1=(byte)i5 //-128
-
byte b2=12; method(b2); } public static void method(int num){ //int num=12;自动类型提升 }
-
long l2=12L; method((int)l2); } public static void menthod(int num){ }
-
3.基本数据类型与String的运算
-
String属于引用数据类型,俗称字符串,可以以一对双引号的方式进行赋值。
-
String声明的字符串内部,可以包含0个,1个或多个字符
-
String str1="有了目标,走起来才有感觉"; System.out.println("str1")//str1 System.out.println(str1)//有了目标,走起来才有感觉
-
String str2="a"; char c1='a'; //两者区别是str2变量时引用类型,c1是字符类型,两者完全没有交集。只不过是他们的值恰巧都只有一个字符a。
-
-
String与基本数据类型变量间只能用连接符“+”做连接运算,运算结果是String类型。
-
int num1=10; boolean b1=true; String str4="咳咳"; System.out.println(str4+b1); //true咳咳 String str6=str4+b1+num1; //咳咳true10 //注意:运算式从左往右运算,所以num1+b1会编译报错 //String str7=num1+b1+str4;
-
如何将String类型的变量转换为基本数据类型
String str1="10"; System.out.println(str1); //10 int num1=Integer.parseInt(str1);//使用Integer类 System.out.println(num1);//10
-
-
变量与字符串课后练习
-
String name="杨理"; int age=23; String sex="男"; double weight=80; boolean isMarried=false; String phoneNumber="199905xxxxx"; String info="姓名:"+name+"\n年龄:"+age+"\n性别:"+sex+"\n体重:"+weight+"\n是否已婚:"+isMarried+"\n手机号为:"+phoneNumber; System.out.println(info); // 姓名:杨理 // 年龄:23 // 性别:男 // 体重:80.0 // 是否已婚:false // 手机号为:199905xxxxx
-
四、进制
1 二进制
-
计算世界中只有二进制,计算机中存储和运算的所有数据(比如说:数字、字符、图片、声音、视频等)都要转换为二进制。
int num2=980;//十进制 (0~9) int num3=0b0101;//二进制 (0~1) int num4=0X89e;//十六进制 (0~9,a-f) int num5=07656;//八进制 (0~7) System.out.println(num2); //980 System.out.println(num3); //5 System.out.println(num4); //2206 System.out.println(num5); //4014
-
进制键间的相互转换举例
二进制 | 八进制 | 十进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
10 | 2 | 2 | 2 |
11 | 3 | 3 | 3 |
100 | 4 | 4 | 4 |
101 | 5 | 5 | 5 |
110 | 6 | 6 | 6 |
111 | 7 | 7 | 7 |
1000 | 10 | 8 | 8 |
1001 | 11 | 9 | 9 |
1010 | 12 | 10 | a或A |
1011 | 13 | 11 | b或B |
1100 | 14 | 12 | c或C |
1101 | 15 | 13 | d或D |
1110 | 16 | 14 | e或E |
1111 | 17 | 15 | f或F |
10000 | 20 | 16 | 10 |
计算机数据的存储使用二进制补码形式存储
-
正数最高位0,负数最高位是1
-
正数的话三码合一,即源码、反码、补码相同
-
如何找到负数的原码?
-
负数符号位是1,将原码除符号位全部取反可得到这个数的反码,将这个数的反码加上1可以得到这个数的补码。
-
一般情况下给的是负数补码
-
2.各进制之间的转换
-
二进制转8进制
-
二进制转16进制
-
八进制、十六进制转二进制
3 -128在内存中怎么存?
int a=128; byte b=(byte)a; System.out.println(b);//-128
五、运算符
运算符是一种特殊的符号,用来表示数据的运算、赋值和比较等。
1.算数运算符
-
除法
System.out.println(12/5*5);//10
-
取模
//取模以后,结果与被模数的符号相同 int i2=12; int i3=-5; System.out.println(i2%i3);//2 //num1%num2==0 //经常用来判断某个数num1是否能过整除另外一个数num2 /* 判断num1是否为整数 num%2==0; */
//+:连接符,只适用于String与其他类型的变量间的运算,而运算结果也是String类型。
-
(前)++、(后)++、(前)--、(后)--
int a1=20; int c1=a1++; //先运算后自增1 System.out.println(a1+" "+c1);//a1=21 c1=20 int a2=20; int c2=++a2; //先自增1后运算 System.out.println(a2+" "+c2);//a2=21 c2=21
练习
//输出三位数的每位数字 int num=697; System.out.println("数的百位是:"+num/100); System.out.println("数的十位是:"+(num%100)/10); System.out.println("数的个位是:"+num%10);
2.赋值运算符
分类:
= += -= *= /= %=
-
在进行= += -= *= /= %=操作时,不会改变变量本身的数据类型。
byte b1=10; b1+=5 //15 //b1=b1+5 //编译报错
3.比较运算符(关系运算符)
分类:
4.逻辑运算符
5.位运算符
6.条件运算符
六、企业真题
1.高效的计算2^8
使用左移(<<)位运算符,可以以2<<3或8<<1进行计算
2.&和&&的区别
首先&和&&都属于逻辑运算符,都表示的是“且"的关系,且两边都为true时,结果才为true。
但&&左边为false时,不会在去判断右边,而&(逻辑与)会判断右边的值。
在平时开发中,更多的用到&&(短路与)
3.Java开发中计算金额时使用什么数据类型?
不能使用float或double,因为精度不高。
一般使用BigDecimal类替换,可以实现任意精度的数据的运算。
4.char型变量中能不能存储一个汉字,为什么?
可以的。char型的变量只能存储一个字符,而char使用的是unicode字符集,其中包含了世界范围内的所有字符。