目录
- 一、关键字
- 1.特点:
- 2.注意事项:
- 二、标识符:(掌握)
- 1.特点:
- 2.注意事项:
- 3.java中常见的命名规范:(见名知意)
- 1、包 :包简单理解为文件夹的意思
- 2、类或者接口起名字
- 3、变量或者方法起名字:
- 4、常量起名字
- 三、注释:
- 1.分类:
- 2.作用:
- 四、常量:
- 1、字面值常量
- 2、自定义常量(后面补充)
- 五、有符号数据表示法
- 六、变量
- 七、数据类型
- 1、基本数据类型
- 2、引用数据类型(后面补充)
- 1、整数类型 占用字节数 取值范围
- 2、浮点类型
- 3、字符类型
- 4、布尔类型
- 思考题
- 练习
- 八、JAVA中的运算符
- java中运算符的优先级
- 引入
- 1、关系运算符:
- 2、算数运算符:
- 3、赋值运算符:
- 面试题
- 4、逻辑运算符:
- 5、位运算符
- 6、三目运算符
一、关键字
被java语言赋予特定含义的单词。
1.特点:
组成关键字的字母全部都是小写。
如何识别哪些是关键字呢?
像IDEA这样的高级编辑器,会有高亮显示
2.注意事项:
1、goto和const作为保留字存在,目前暂不使用。
2、类似于IDEA这样的高级编辑器,针对关键字有着特殊的颜色标识
二、标识符:(掌握)
给类,接口,变量,方法等起名字时用的字符序列
1.特点:
1、由英文大小写组成
2、由数字字符组成
3、$和_组成
2.注意事项:
1、不能以数字开头
2、不能用关键字作为标识符
3、在同一个大括号内,不能有重名
4、java中严格区分大小写
3.java中常见的命名规范:(见名知意)
1、包 :包简单理解为文件夹的意思
所有字母都是小写
1)单级目录
举例:bigdata
2)多级目录
举例:com.Java.hello
2、类或者接口起名字
如果名字是由一个单词组成的时候,首字母大写,其余字母小写
如果名字是由多个单词组成,所有的单词首字母大写,其余字母小写
1) 一个单词组成
举例:Student
2) 多个单词组成
举例:HelloWorld
3、变量或者方法起名字:
如果是由一个单词组成,所有字母均小写
如果是由多个单词组成,第一个单词字母全部小写,从第二个单词开始,首字母大写,其余字母小写。
1)一个单词
举例:eat()
2)多个单词的时候
举例:eatBeaf()
4、常量起名字
如果是由一个单词组成,所有字母均大写
如果是由多个单词组成,所有单词字母均大写,并且单词与单词之间用
下划线拼接
1)一个单词组成
举例:NAME
2)多个单词组成
举例:BIGDATA_STUDENT_NAME
三、注释:
注释:用于解释说明程序的文字,不被JVM所识别
1.分类:
1、单行注释
格式: //
2、多行注释:
/* … */
3、文档注释:
* 格式:/** … */
*
* 如何通过文档注释制作一个说明书呢?
* 1、写一个工具类
* 2、在工具类中加入文档注释
* 怎么加?请看ArrayTool中的文档注释
* 加什么东西呢?
* 作者,版本,方法中参数,返回值等等
* 怎么用呢?
* javadoc -d 目录 -author -version ArrayTool.java
2.作用:
1、方便阅读代码
2、帮助排错
四、常量:
在java程序执行过程中其值不可改变的量
1、字面值常量
1)字符串常量
2)整数常量
进制分类:
二进制
八进制
十进制
十六进制
进制转换:
其他进制转换成十进制
十进制转换成其他进制
二进制,八进制,十六进制之间的转换
(8421码)
3)小数常量
4) 字符常量
‘王’
5)布尔常量
6)空常量
2、自定义常量(后面补充)
五、有符号数据表示法
在计算机内,有符号数有3种表示法:原码、反码和补码。(针对二进制来说)
所有数据的运算都是采用补码进行的。
7和-7
原码:就是二进制定点表示法,即最高位为符号位,
“0”表示正,“1”表示负,其余位表示数值的大小。
符号位 数值位
7的原码: 0 0000111
-7的原码: 1 0000111
反码:正数的反码与其原码相同;
负数的反码是对其原码逐位取反,但符号位除外。
7的反码: 0 0000111
-7的反码: 1 1111000
补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
7的补码: 0 0000111
-7的补码: 1 1111001
练习:
1、已知某数X的原码为10110100B,试求X的补码和反码。
原码: 1 0110100
反码: 1 1001011
补码: 1 1001100
2、已知某数X的补码11101110B,试求其原码。
补码: 1 1101110
反码: 1 1101101
原码: 1 0010010
六、变量
概述:在java程序执行过程中,其值可以在一定范围内变化的量叫变量
数学层面的:a=10,b=20, c=a+b
java层面:
1、你想要定义变量的,得有个限定条件
如何限定呢? 数据类型
2、将来我们参与运算的时候,不能直接拿内存中的空间去参与运算。
应该给这个空间起个名字。 变量名
3、仅仅只拿到这个空间,但是里面没有值,这样也是不能够参与运算的,
我们得先赋值,才能参与运算。 初始化值
定义变量的格式:
1)数据类型 变量名 = 初始化值(推荐使用)
2)数据类型 变量名;
变量名 = 初始化值;
使用变量的时候,需要注意哪些问题
1、作用域的问题
变量定义在哪个大括号内,它就在哪个大括号内有效
并且,在同一个大括号内不能同时定义同名的变量
2、在方法内部没有初始化值的变量不能直接使用
你只需要在使用之前赋值就可以了,不一定非要在定义的时候就给值
3、建议一行上只定义一个变量
虽然可以定义多个,但是不建议
七、数据类型
数据类型:Java语言是强类型语言,
对于每一种数据都定义了明确的具体数据类型,
在内存总分配了不同大小的内存空间
char fir = str.charAt(0);//获取字符串的第一个字符
char i = str.charAt(i);//获取字符串的第i个字符
java中数据类型的分类:
1、基本数据类型
byte,short,int,long,float,double,char,boolean
2、引用数据类型(后面补充)
基本数据类型:4种8类
1、整数类型 占用字节数 取值范围
byte 1 -2^7 ~ 2^7-1(-128——127)
short 2 -2^15 ~ 2^15-1(-32768——32767)
int 4 -2^31 ~ 2^31-1(-2.147483648E9
long 8 -2^63 ~ 2^63-1(-9.223372036854776E18
2、浮点类型
float 4 -3.403E38~3.403E38
double 8 -1.798E308~1.798E308
3、字符类型
char 2
4、布尔类型
boolean 1
注意事项:
1、定义long类型的变量数据,末尾要加上L或者l(推荐使用L)
2、小数默认是double类型,整数默认是int类型
3、定义float类型的变量数据,末尾要加上F或者f(推荐使用F)
5、默认转换(小的用大的接收)和强制类型转换(大的用小的接收)
强制类型转换的格式:
目标数据类型 变量名 = (目标数据类型)(要转换的变量)
5、其他
+在java种是一个运算符,一般情况下用来做加法运算的 一般来说,我们在运算的时候,要求参与运算的数据类型要保持一致.
基本数据类型之间存在默认转换和强制类型转换。
默认转换
byte,short,char—int—long—float—double
byte,short,char相互之间补转换,他们参与运算首先转换为int类型
强制转换
目标类型 变量名=(目标类型)(被转换的数据);
byte c = i+b;
byte c = (byte)(i+b)
口诀:
byte,short,char一律自动转换为int
小的用大的接收不用强转
大的用小的接收需要强转
思考题
思考题1:
请问以下的代码有没有问题
double d = 12.34;
float f = d;
d是double类型的数据,无法正常向比它小的数据类型进行转化,要使用强种类型转换才能运行。
思考题2:
看程序说明有没有问题,这两个有什么区别呢?
float f1 = (float)12.34;
float f2 = 12.34F;
区别:f1其实是通过double类型进行强制类型转换过来的
f2本身就是一个float类型
思考题3:
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
解答:
第二句语句会出现问题,b=b1+b2是有问题的。
1、变量相加,首先会看类型问题,
最终把结果的赋值也会去考虑类型问题,因为byte,short,char
他们参与运算首先转换为int类型
2、常量之间相加,首先会做加法运算,然后看这个结果是不是
在接收数据类型的范围内,如果在,就直接赋值,不会报错。
思考题4:
byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?
结果是多少呢?
分析过程:
首先,我们要想知道结果是什么,就得明白计算机内部是
如何计算的。
我们知道计算机中的数据运算都是通过补码进行的。
想要得到补码,就必须知道反码,原码。
而要想知道原码,就必须知道对应的二进制。
练习
1、计算出130这个数据的二进制
整数默认是int类型,占4个字节
00000000 00000000 00000000 10000010
这就是130的原码,也是反码,和补码
2、强制类型转换(做了截取操作)
10000010
这个结果是补码
3、已知补码求原码
符号位 数值位
补码: 1 0000010
反码: 1 0000001
原码: 1 1111110
把原码1111110换算成十进制
64 + 32 + 16 + 8 + 4 + 2 = 126
由于符号位是1,所以结果是-126
八、JAVA中的运算符
java中运算符的优先级
引入
看程序写结果:
System.out.println(‘a’); //a
System.out.println(‘a’+1); //98
System.out.println(“hello”+’a’+1); //helloa1
System.out.println(‘a’+1+”hello”); //98hello
System.out.println(“5+5=”+5+5); //5+5=55
System.out.println(5+5+”=5+5”); //10=5+5
字符串数据和其他数据做+,此时这里的+不是做加法运算,而是
字符串连接符,结果依旧是字符串。
当+两边是数字或者一边是数字,一边是字符,此时的+是做加法运算的。
ASCII:‘0’=48 ‘A’=65 ‘a’=97
1、关系运算符:
==与=的区别:
=是一个赋值运算符,进行赋值操作
a=2;
==是一个关系运算符,进行比较操作
(a==2) ;
==,!=,<,>,<=,>=
关系运算符的结果要么是true要么是false,所以关系运算符的结果
是一个(boolean)布尔类型。
2、算数运算符:
运算:
对常量和变量进行操作的过程称之为运算
运算符:(类似于 + - * /等等)
对常量和变量进行操作的符号称之为运算符
操作数: (类似于2 b ‘a’)
参与运算的数据称之为操作数
表达式:(类似于1+1 ,‘b’+2)
用运算符把常量或者变量连接起来的并且符合java语法的
式子,我们称之为表达式。
不同运算符连接起来的式子体现的是不同类型的表达式
把运算符进行分类:
算术运算符:
+,-,*,/,%(取余),++,- -
注意:1)/符号表示是整除的意思,并且取的结果是商的整数部分。
2)%参与运算的时候, 进行的是除法,但是结果取的是余数。
3)如果我们就想让结果有小数只需要将其中一个变量比变成浮点数类型参与运算就可以了。 System.out.println(3/(4*1.0));
++,- -
++表示的是自增1,单独使用的时候,结果没有任何影响,放前方后结果一样
--表示的是自减1,单独使用的时候,结果没有任何影响,放前放后结果一样
注意:
结合表达式使用的时候,无论是++还是–,放在后面先赋值后做自加或者自减,如果放在前面,是先自加或者自减,然后再赋值。
int a=3,b=4;
int c = a++; int e = ++a;
int d = b++; int f = ++b;
结果 : a = 4; a = 4;
b = 5; b = 5;
c = 3; e = 4;
d = 4; f = 5;
3、赋值运算符:
赋值运算符:
=,+=,-=,*=,/=,%=
最基本的赋值运算符是=
1)= a = b =10; 结果:a=10 b = 10
2)+= int a=10; a+=20; 结果:a=30
3)-= int a=10; a-=20; 结果:a=-10
4)* = int a=10; a* =20; 结果:a=200
5)/= int a=10; a/=20; 结果:a=0
6)%= int a=10; a%=20; 结果:a=10
面试题
short s=1,;s = s+1;
short s=1; s+=1;
上面两个代码有没有问题,如果有,那里有问题
答: 第一个数据类型存在错误,int不能直接转换为short。
s+=1,底层进行了转换,但是不是我们想当然的转化为s = s+1
而是转化成了 s = (s的数据类型)(s+1)
默认包含了强制类型转换。
4、逻辑运算符:
逻辑运算符:
& 、| 、^ 、!、&& 、 ||
特点:
逻辑运算符两边一般是boolean类型的数据或者是表达式。
表达式:
就是用运算符把常量和变量连接起来并且符合java语法的式子,叫表达式
算术运算符:a + b
关系运算符:a == b
赋值运算符:a = b
&&,||
结论:
1、单纯从结果上来看,&&与&的结果是一样的
2、&&又称之为短路与,左边如果是false,结果就是false,不会执行右边的内容
||又称之为短路或,左边如果为true的时候,结果就是true,不会执行右边的内容
注意:
在Java中不可以写成3<x<6,应该写成x>3 & x<6
总结:
&:有false则false
|:有true则true
^:两边相同为false,不同为true
!:将结果反转,true变成false,false变成true
&&: 有false则false, 如果左边是false,右边就不执行,结果为false
||: 有true则true,如果左边是true,右边就不执行,结果为true
5、位运算符
位运算符:是直接对二进制参与运算的(<<,>>,>>>,&,|,^,~)
&,|,^,~
int x = 3;
int y = 4;
System.out.println(x & y); //0
System.out.println(x | y); //7
System.out.println(x ^ y); //7
System.out.println(~x); //-4
分析:
要想进行位运算,就得先知道数据的二进制
3的二进制:11
4的二进制:100
又因为,整数默认是int类型,占4个字节
所以得到3和4的原码:
3的原码,反码,补码:00000000 00000000 00000000 00000011
4的原码,反码,补码:00000000 00000000 00000000 00000100
&位与运算:有0则0
00000000 00000000 00000000 00000011
&
00000000 00000000 00000000 00000100
--------------------------------------------------------
00000000 00000000 00000000 00000000
结果为:0
|位或运算:有1则1
00000000 00000000 00000000 00000011
|
00000000 00000000 00000000 00000100
--------------------------------------------------------
00000000 00000000 00000000 00000111
结果是:7
^位异或运算:相同则0,不同则1
00000000 00000000 00000000 00000011
^
00000000 00000000 00000000 00000100
--------------------------------------------------------
00000000 00000000 00000000 00000111
结果位:7
~位取反运算:按位取反(1变成0,0变成1)
00000000 00000000 00000000 00000011
~
--------------------------------------------------------
11111111 11111111 11111111 11111100
符号位 数值位
补码: 1 1111111 11111111 11111111 11111100
反码: 1 1111111 11111111 11111111 11111011
原码: 1 0001000 00000000 00000000 00000100
结果为:-4
<<,>>,>>>
3 << 2 == 12 0或1为位移后的空位补充
计算得出3的二进制原码,反码,补码
3的原码,反码,补码:00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100
结果是:12
24 >> 2
计算出24的二进制:11000
24的原码,反码,补码:
00000000 00000000 00000000 00011000
00000000 00000000 00000000 00000110(00)
结果是:6
24 >>> 2
计算出24的二进制:11000
24的原码,反码,补码:
00000000 00000000 00000000 00011000
00000000 00000000 00000000 00000110(00)
结果是:6
-24 >> 2
先算出24的二进制:11000
-24的原码:10000000 00000000 00000000 00011000
-24的反码:11111111 11111111 11111111 11100111
-24的补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11111010(00)
补码:11111111 11111111 11111111 11111010
反码:11111111 11111111 11111111 11111001
原码:10000000 00000000 00000000 00000110
结果为:-6
-24 >>> 2
先算出24的二进制:11000
-24的原码:10000000 00000000 00000000 00011000
-24的反码:11111111 11111111 11111111 11100111
-24的补码:11111111 11111111 11111111 11101000
00111111 11111111 11111111 11111010(00)
原码,反码,补码都一样: 00111111 11111111 11111111 11111010
结果为:1073741818
总结:
&: 有0则0
|:有1则1
^: 相同则0,不同则1
~: 取反,1变成0,0变成1
<<: 补码左移,左边多出来的位丢弃,右边用0补齐( 左移n位,数值乘上2的n次方)
>>: 补码右移,右边多出来的位丢弃,左边最高位如果是1则用1补齐,如果是0用0补齐(右移n位,数值除以2的n次方)
>>>: 补码右移,右边多出来的位丢弃,左边无论是0还是1都用0补齐
6、三目运算符
格式
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
执行流程:
1、首先判断关系表达式中的结果,
2、如果说判断关系表达式的结果为true,执行冒号前面的表达式1
3、如果说判断关系表达式的结果为false,执行冒号后面的表达式2
注意事项:
1、关系表达式的小括号不能省略
2、如果后面的表达式只是一个值或者一个变量,小括号可以省略
3、如果后面的表达式需要进行一些运算,小括号不能省略
4、三目运算表达式的结果数据类型由表达式中最高的数据类型接收