----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
关键字:关键字、标识符、常量和变量、数据类型、类型转换、算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符、if语句、switch语句
2.1 关键字
定义:被java赋予了特殊含义的单词,例如,class、public等。
特点:所有字母都是小写。
种类
定义数据类型:class、interface、int、char、boolean、void
定义数据类型值:true、false、null
定义流程控制:if、else、switch、case、default、while、do、for、break、contiune、return
定义访问权限修饰符:private、protected、public
定义类、函数、变量修饰符:abstract、final、static、synchronized
定义类与类之间的关系:extends、implements
定义建立实例、引用实例及判断实例:new、this、super、instanced
异常处理:try、catch、finally、throw、throws
包:package、import
其他修饰符:native、stricp、translent、volatlle、assert
2.2 标识符
在程序中定义的一些名称,比如,类名。
组成:有26个字母的大小写和数字(0—9)构成,另有“_”、“$”
标识符规则:1.数字不能开头。
2.不能用关键字。关键字首字母大写可以,但尽量不要用。main不是关键字,但却被虚拟机识别,所以也不能用。
Java中严格区分大小写。起名字最好有意义,增加阅读性。
名称规范:
1.包名:多单词组成时,所有字母小写。例如,xxxyyzzz。
2.类名、接口名:多单词组成时,所有单词的首字母大写。例如,XxxYyyZzz。
3.变量名、函数名:多单词组成时,第一个单词首字母小写,第二个单词开始首字母大写。例如,xxxYyZzz。
4.常量名:所有字母都大写。多个单词用下划线连接。例如XXX_YY_ZZZ。
2.3 注释
单行注释、多行注释和文档注释。见《Day01笔记》
2.4 常量和变量
常量定义:java中固定不变的数值。和变量无关。都可以通过println命令直接打印出来,除了null。
分类:
1.整数常量,所有整数。例如,73、84等。
2.小数常量,所有小数。例如,2.3、225.8等。
3.布尔型常量,只有两个值:true和false。
4.字符常量,将一个数字、字母、符号、汉字或空用(’’)标识出来。没有负数。
5.字符串常量,将一个或多个字符用(” ”)标识,可以空。
6.null常量,只有一个数值:null。适用于引用型数据类型。
对于整数常量,java共有四种表现形式:二进制、八进制、十进制和十六进制。八进制用0开头,十六进制用0x开头。
任何数据(文档、图片、视频等)在计算机中都是以二进制的形式存在的。二进制由电信号的开关演变而来,用0和1表示。不同的组合代表不同的现实中的数据,例如a、b、2、汉字等。这个固定对应的表称之为“编码表”。随着技术的发展,二进制表示的信息越来越多,例如,声音、图片、视频等。
用8个0或1表示最小的一个单位,字节。
一个整数在内存中也是二进制的,但是用大串的0和1组成的数据使用很麻烦。所以将二进制中的三位用一位表示,成了八进制;四位用一位表示,成了十六进制。“附件”中的“计算器”具有不同进制之间转换的功能。
十进制——》二进制:除以2后的商再除以2,依次循环至商为0,余数即为二进制。
二进制——》十进制:乘以2的幂的过程。一个字节最大是255,所以IP地址最大是255。二进制运算,和十进制一样,逢2进1。
先将十进制转换成二进制,再转换成其他进制。例如,90—》01011010—》0x5A。三个二进制位最大为7,可以成为八进制的一位。同理,十六进制。以二进制为基础,换算起来很方便。
负数的二进制:对正的二进制取反(0变1,1变0)加1(二进制)。例如,6=00000110,-6=11111010。负数最高位都是1,取反得来;正数最高位是0。
变量
将不确定的数据进行存储。就是在内存中开辟一个空间,存放一个变化的值,通过操作空间来改变这个值。类似数学中的未知数。变量的概念:
1. 内存中的一个存储空间。
2. 该空间有自己的名称(变量名)和类型(数据的类型)。
3. 该空间的数据可以在同一类型范围内不断变化。
通过明确数据类型、变量名称和数据(初始值)来开辟空间。
定义变量的意义:
1. 用来不断存放同一类型的常量,从而可以重复使用。
2. 只要数据不确定,就用定义变量的方式进行存储。适用于C++。
注意:1.变量的作用范围(一对{}之间);2.初始化值。3.同一区间({})内,不能定义同名变量。
java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。
整数默认int,小数默认double。
不同的整数类型,对于的内存存储空间不同,主要是为了节省缓存空间,提高运算速度。
byte,1个八位,取值范围:-128至127。
short,2个八位,-32768至32767。
int,4个八位。
long,8个八位,天文数字。数值后要加l,例如,long l = 45l;
float,单精度,4个八位。例如,3.14f
double,双精度,8个八位。
char,2个八位,空也可以,’ ’。
boolean,只有true和false。
定义变量的格式:数据类型 名称 = 初始值。固定格式。
例如: int x = 4; 定义一个int类型的变量,取值为4。
超出取值范围的话,会损失精度,编译失败。
何时定义变量?当数据不确定,且需要对数据进行存储,此时定义一个变量来完成存储动作。
自动类型转换(隐式):常量在某种数据类型内的话,可以在声明时,自动转换为该数据类型。用在声明变量和赋值运算符时。
例如,byte b = 3; b = b + 2; 无法编译。byte b = 3可以,因为系统自动判断3是否在b的范围内,3是常量是int型,自动转换类型成为byte型后,可以赋给b。b = b + 2;中,2是4个字节,b是1个字节,b是变化的值,自动提升为4个字节,得到4个字节的5,与byte类型不同一,会损失精度,所以无法编译。
int 和float运算,自动转换成float,多出了小数部分。
强制类型转换(显式)
例如,b = (byte)(b + 2);将b+2的和强制装换成byte,再赋给b,可以运行。最好不要转换,可能会丢失精度。再就是确定好到底要强制转换谁。例如,上例中强制转换的是(b+2)的和。
表达式的数据类型自动提升:
自动提升原则:以大字节的数据为主,小字节的数据向大字节数据提升。
所有的byte型、short型和char型,自动提升到int型;
如果操作数是long型、float型、double型,计算结果类型不变。
例如:
System.out.println(‘a’);打印a。System.out.println(‘a’+1);打印98。在ASC表中,将字母用数字来标识,每个字符都有对应的数字,a对应数字97,97为int型。只打印字符,会将字符本身作为效果显示;打印字符和整数,字符会自动提升为整数,显示整数。想打印98对应的字符,可以System.out.println((char)98);想获得字符对应的整数,可以System.out.println(‘a’+0);或者System.out.println(‘1’+0);或者System.out.println(‘我’+0);或者System.out.println(‘\f’+0);
2.5 运算符
2.5.1算术运算符
两个int型做运算,结果仍然是int型,小数部分舍弃。
double型和int型做运算,结果是double型。double是8字节,int自动提升。
1%-5 等于1;-1%5等于-1,也就是说,模的结果的正负只和左边数字有关。
int a = 3,b;声明两个变量a和b,但只有a有值。定义变量时尽量有初始值。
a++和++a都意味,给a加1,然后把值再赋给a,相当于a = a + 1,a的结果一样,都是一次运算;b = a++;先将a的值赋给b,a再加1并赋给a自己;b = ++a;a先加1并赋给a自己,再把a的值赋给b,都是两次运算。自减也是同理。
+,字符串连接符,必须是字符串相连接。字符串数据和任何数据用+连接,最后得到的数据都是字符串。“ab”+5+5;打印ab55,+都是连接符;“ab”+(5+5);打印ab10,后一个+做加号使用。注意:+在不同地方代表不同含义。为了让打印结果有意义,格式:System.out.println("a=" + a + "," + "b=" + b);
转义字符:通过\来转变后面字母或符号的含义,仍然是字符类型。
\n:表示换行。一下内容另起一行。char ch = ‘\n’;表示一个回车符的字符。
\b:表示退格。向前进一格,相当于backspace键。
\r:按下回车键。前面内容取消。
\t:制表符。向后退出一段距离,相当于tab键。
\”:一个双引号。char ch = ‘\”’;表示双引号字符。
\\:一个反斜线。char ch = ‘\\’;表示单引号字符。
println中的ln表示括号内的内容打印完毕后,换行一次。print不换行。
Linux中,换行由\n表示;windows中,换行由\n和\r表示,dos中用\n。
2.5.2 赋值运算符
符号:=、+=、-=、*=、/=、%=,都是一个符号。可以自动类型转换。
int x = 3; 把右边的值赋给左边。x += 4;将左右两边的和赋给左边。
short s = 4; s +=5; 只有一次赋值运算,+和+=运算符都有自动类型转换动作,使得类型保持一致。a=b=c=5;也可以。
2.5.3 比较运算符
注意:比较运算符的结果都是boolean型。
2.5.4 逻辑运算符
逻辑,代表着关系。作用:连接布尔类型的表达式。例如,x>3 & x<6;——》true&true——》true。运算表达式可以直接打印,输出结果为ture或false。可以连续使用,例如x==3||x==4||x==5。
true & true = true; true | true = true; true ^ true = false;
true & false = false; true | false = true; true ^ false = true;
false & true = false; false | true = true; false ^ true = true;
false & false = false; false | false = false; false ^ false = false;
&特点:只要两边布尔表达式结果有一个为false,结果就是false;两边都是true,结果才是true。| 特点:只要两边布尔表达式结果有一个为true,结果就是true;两边都是false,结果才是false。^ 异或:和 | 不太一样,就是true ^ true = false; 两边相同,结果为false;两边不同,结果为true。
!true = false; !false = true;
&:无论左边是真是假,右边都运算;
&&:当左边是假时,右边不运算;
|:两边都运算;
| |:左边是真时,右边不运算。
2.5.5 位运算符
位运算都是对二进制进行运算。
x << n 相当于x乘以2的n次幂;例如,3<<2 = 12
x >> n 相当于x除以2的n次幂;例如,6>>2 = 1
主要用于乘、除运算,非常方便。
>>:最高位补什么由原有数据的最高位值来定。带符号右移,正负可以继续。
>>>:最高位无论是什么,全部补0。
&:0视为假,1视为真。
~:取反。例如,-6是6取反加1,6的取反就是-7.
x ^ n ^ n = x,一个数异或另一个数两次,结果仍是这个数。主要用于加密。
练习
2乘以8的高效方法。2*8,在底层仍然是二进制运算,只是每个位上都要乘一次,需要运行32*32次,非常麻烦。所以一般都是位运算,2<<3。
将两个变量互换位置,n=3,m=8。一般方法:int temp = n; n= m;m=temp;使用第三方变量。
n = n + m; m = n - m; n = n - m; 不使用第三方变量,但是必须在int的范围内,易损失精度。n = n ^ m;m = n ^ m;n = n ^ m; 也可以。
将二进制转换为十六进制,步骤:&15然后再右移4位,直到结果为0.
将二进制转换为八进制,步骤:&7然后再右移3位,直到结果为0.
获得二进制,步骤:&1然后再右移1位,直到结果为0.
2.5.6 三元运算符
(条件表达式)?表达式1:表达式2
条件为true,选择表达式1执行;
条件为false,选择表达式2执行;
表达式,就是有一定语法规则的语句,可以含有运算符,但一定有结果,例如,x*2。2个表达式在做运算,内部有自动类型转换,需要注意表达式的数据类型。必定有结果返回。
例如:取最大值。int x = 3, y = 4, z; z = (x > y)?x:y。z变量存储的是较大的数。
2.6 程序流程控制(语句)
顺序结构,从上向下依次执行。
2.6.1 判断结构
if语句,三种格式:
内部为条件表达式,运算的结果只有true和false。用if控制某些语句的执行,满足了才执行,只控制{}里的内容。如果只有一条语句,{}可以不写,if只控制距离最近的单条语句。
if else 只能执行一个代码块,肯定有结果。简写格式:变量=(条件表达式)?表达式1:表达式2,和三元运算符类似。
三元运算符,好处:可以简化if else 代码;弊端:作为一个运算符,运算完后必须有结果。但if else不需要结果返回。
虽然有很多行,但是单条语句。if else if …else,是一个整体,只要有一个条件被执行,就结束,即使可以满足其他条件也不会再执行。
正确数据运算,不正确数据给用户一提示。
2.6.2 选择结构
switch语句,switch、case、break、default。case用于定义备选答案,后面的值就是答案的具体内容。break,跳出switch语句。default,缺省默认,后面的break可以省略。
特点:
1.选择的类型只有4个:byte、short、int、char
2.case与default没有顺序,但是先从case开始执行,没有匹配的case再执行default。位置是随意的,但执行是从case开始。例如,做选择题。
3.结束情况:遇到break,或者执行到switch语句结束。
4. 满足条件执行后如果没有break,程序会继续向下执行,遇到break或者switch结尾结束。
这样也可以:case 3: case4: case5:
对区间判断、对结果为布尔型判断使用if更合适;switch适合判断具体的数值不多、而且符合4中类型的数据,效率比较高。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------