暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java02数据类型和运算符

悦悦学姐 2021-08-19
401

第二章 数据类型和运算符


【目标】


1.了解Java中的注释和javadoc命令


2. 了解Java的分隔符


3.掌握Java标识符及其命名规则,关键字


4. 掌握8种基本数据类型


5.掌握变量的声明,初始化,作用域,常量


6. 掌握基本数据类型转换


7. 掌握运算符的使用


【内容】


一 Java中的注释和javadoc命令


注释:用来说明某段代码的作用,某个方法的功能或者思路等等.


Java注释分类:单行注释,多行注释,文档注释


单行注释:


// 注释内容


多行注释:


/*


*  注释内容


* 注释内容


* 注释内容


*/


文档注释


/**


*  注释内容


* 注释内容


* 注释内容


*/


生成API文档,API文档可以帮助用户更好的理解和学习该程序。


单行注释和多行注释案例:



文档注释案例:



运行:


编译源文件是否有错,


javadoc DocComm.java



二 Java中的分隔符


Java语言中{}、[]、()、;、,、.、空格、””    都具有分割作用,统称为分隔符.


分号:语句的分割。Java语言中一行语句的结束必须要加分号。


{}: 定义一个代码块。成对出现。


[]:定义数组,访问数组


定义数组:intarr = [1,2,3,4];


访问数组:arr[0]


(): 定义方法的时候使用。


表达式里表示优先级,(1+2)*3


强制类型转换 inta = (int)10L;


逗号:变量声明时分割多个变量 int a,b,c;


方法定义时分割多个参数,方法调用也会使用


方法定义:publicstatic int sum(int a, int b, int c ){


}


方法的调用:sum(1,2,3)


定义数组:intarr = [1,2,3,4];


点号:类/对象和定义成员之间的分隔符,表示要调用那个属性或者方法。


System.out.println();


空格:分割单词与单词之间,语句之间。


三标识符及其命名规则,关键字


标识符:给程序中的类、方法、变量命名的符号。


标识符规则:


英文大小写字母a-zA-Z


数字 0-9


$ 和_


注意事项:


不能以数字开头


不能是Java的关键字


区分大小写


简明,见名知意


不能有空格


Java关键字,保留字


Java关键字:48个



保留字2个:goto,const


直接量3个:true真,false假,null空


Java中关键字,保留字,直接量全部是小写。


包(其实就是文件夹)


全部小写,并用逗号隔开


例如:单级包:com


多级包:com.bbs,com.itcase.test


类或者接口


首字母大写,驼峰命名


例如:一个单词:Student,Demo


多个单词:HelloWrold,LoginAction


方法和变量


首字母小写;从第二个单词开始,首字母要大写


例如:name,main,studentAge,showAllUsers


常量


全部大写,多个单词用下划线(_)隔开


例如:PI,STUDENT_MAX_AGE


四基本数据类型


Java语言是强类型语言.  Java语言数据类型分类:基本数据类型  8种


引用类型     3种String,Array



整数类型


byte     1个字节,8位         范围: -128——127 (-27 ——27-1)


short    2个字节,16位         范围:-32768——32767(-215——215-1)


int      4个字节,32位         范围:-2,147,483,648——2,147,483,647(-231——231-1)


long     8个字节,64位         范围:-9,223,372,036,854,775,808——9,223,372,036,854,775,807  -263——263-1


整数类型:表示没有小数部分的数值,可以是负数。


一般情况下int是最常用的,Java默认整数类型就是int。定义int变量 int a = 5;


定义long类型时,需要在后面加上l或者L。longc = 5L;


Int  5= 4+1=22+20    0000 0000 0000 0000 0000 00000000 0101


案例



如果做加法运算,比如b+s,一定要用int以上的类型来接收。这是由于加法运算得到的那个数字是int类型,intx = b+s;如果这个数值超过了int的范围或者其中一个参数是long类型,就会自动转换为long类型,此时就需要long接收,longn = b+m;



Java中整数类型有四种表示方式:二进制,八进制,十进制,十六进制,默认是十进制。


二进制:0b开头,如:0b0101= 1*20+0*21+1*22+0*23=5


八进制:0开头,如:0117= 7*80 + 1*81+1*82=7+8+64= 79


十六进制:0x开头,0-9,a,b,c,d,e,f如:0x1af =15*160+10*161+1*162 = 15+160+256 =431



简单的方法:


0    0   0  0    0  0  0  0


128  64 32  16   8  4  2  1


5 = 4+1= 22 +20 =    0101


11 = 8+ 2+1 = 23 +21+20 = 1011


案例:



浮点类型


Java浮点类型有固定的表数范围和字段长度,不受平台影响.


Float     4个字节,32位    大约正负3.40282347E+38F 小数点后有效位数6-7位


Double   8个字节,64位    小数点后有效数是15-16位


默认的类型是double,如果声明为float类型,就必须在后面加F或者f。


案例:



字符类型


Char2个字节


字符类型用于表示单个字符,字符常量必须用单引号引起来.Java中字符类型使用Unicode编码.Unicode编码几乎支持世界上所有书面语言.包括中文字符,韩文字符….


字符类型的三种表示方式:


直接使用单个字符表示:char sex = ‘男’; char a= ‘X’;


通过转义字符表示特殊的字符常量:’\n’,’\t’


直接使用Unicode编码表示字符常量:char a = ‘\u9999’;


案例:



布尔类型


布尔类型表示逻辑上的真假,布尔类型只有两个值:true(真)和false(假)


布尔类型不可以和其他类型相互转化



五变量和常量,作用域


变量


变量就是在程序执行的过程中,在某个范围内其值可以发生改变的量。


定义格式:


声明变量:数据类型变量名; eg: int a;


初始化:变量名 = 变量值;eg: a = 10;


声明和初始化合在一起:数据类型变量名 = 变量值;例如:int a = 10;


Eg: intdays = 25;


int age = 18;


System.out.println(days+ “\t ” + age);


常量


常量:就是不能改变的量,值是固定的。变量名字用大写字母表示,如果是两个单词中间加下划线,如:MAX_VALUE,MONTH


Java中常量的分类:


字面值常量


自定义常量(面向对象)


定义常量:


final  int MONTHS = 12;



作用域:


变量定义在哪一级的大括号内,变量的作用域就是哪个大括号内的区域.


相同的作用域是不可以定义两个同名的变量



六数据类型转换


Java八种基本数据类型有两种转换方式:自动类型转换,强制类型转换


boolean类型不可以和其他任何类型相互转换


自动类型转换




自动类型转换规则:


如果有double参与运算,表达式就被提升为double类型


满足自动类型转换的条件


两种类型要兼容:


数值类型(整型和浮点型)互相兼容


目标类型大于源类型:


例如:double型大于 int 型


强制类型转换:


格式:(数据类型)表达式。例如:inta = (int)10.2;



如果将一个int类型233转换为byte类型,结果是多少?-23


知识点:二进制,原码,反码,补码,负数用二进制如何表示


当使用二元运算符对两个值进行运算时,两个操作数会转换成通用类型。


如果两个操作数中有一个是double类型,则另一个将会转换成double类型。


如果两个操作数中有一个是float类型,则另一个将会转换成float类型。


如果两个操作数中有一个是long类型,则另一个将会转换成long类型。


否则,两个操作数就转换成int类型。


字符串和所有基本数据类型连接操作时,基本数据类型就被转换成字符串


System.out.println(“abc” + 1 +2); abc12


System.out.println(“abc” + (1+2)); abc3



变量相加时,首先转换为默认数据类型或者变量数据类型中最大的,然后再看是否在赋值的数据类型范围内,如果不是报错。


B = b1+b2;//先转换为int类型,然后进行加法运算,运算结果是int类型,大于byte,所以编译报错。如果想要编译成功,必须强制类型转换:b= (byte)(b1+b2);


常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,就报错。


B = 3+4;//先3+4=7,7是在byte的范围之内,所以说编译通过。



七 运算符的使用


Java中的运算符分为:算术运算符,算术运算符、逻辑运算符、位运算符、三目运算符


算术运算符:



加号+的几种作用:


加法、正数、字符串的连接


除法:


整数相除,只能得到整数


要想得到小数,可以*1.0


除数不能为0,得到无穷大的值



/和%的区别:


数据做除法操作的时候,/取的是商,%取的是余数


1%2  =1


2%3 = 2


1、从控制台输入学员王浩3门课程成绩,编写程序实现


(1)Java课和SQL课的分数之差


(2)3门课的平均分


效果图:



编码实现:



++和—



总结:单独使用i++和++k,没有任何区别



总结:当执行j=i++时,先把i的值赋给了j,然后i自增,所以结果i=6,j=5


当执行m=++k时,先让k自增,然后再将结果赋给m,所以结果:k=6,m=6


Intj = i++ + i;


Intj = i + i++;


赋值运算符


=、+=、-=、*=、/=、%=


a+=10就相当于a= a+ 10;



面试题:


short s=1, s = s+1;


short s=1, s+=1;===s = s +1;


上面两个代码有没有问题,如果有,那里有问题


总结:


S= s+1; s是short类型,1是int类型,s+1就变成了int。s= s+1;编译出错,损失精度。强制转换才能编译成功:s= (short) (s + 1);


S+=1;编译没有问题,先进行s+1计算结果2,2在short范围之内,所以是正确的。


比较运算符(关系运算符)



注:比较运算符的结果都是boolean类型,要么是true,要么是false。


相等是两个等号==



逻辑运算符



逻辑运算符用于连接boolean类型的表达式


&与:有false就是false,两个true才是true


|或:有true就是true


^异或:相同false,不同true


!非:非true则false,非false则true。


&&短路与:规则与&一样,有短路效果。如果左边是false,右边就不执行,结果是false。


||短路或:规则与|一样,有短路效果。左边true,右边不执行,结果就是true。



Eg:(5>6) ^(5>7)


(5<6) ^(5<7)


位运算符:





分析:


3的二进制:11


0000000000000000 00000000 00000011


4的二进制:100


0000000000000000 00000000 00000100


&的运算:


00000000 00000000 00000000 00000011


&00000000 00000000 00000000 00000100


-----------------------------------------------------------


0000000000000000 00000000 00000000


结果就是:0


|的运算:


00000000 00000000 00000000 00000011


|00000000 00000000 00000000 00000100


-----------------------------------------------------------


0000000000000000 00000000 00000111


结果:7^的运算:


00000000 00000000 00000000 00000011


^00000000 00000000 00000000 00000100


-----------------------------------------------------------


0000000000000000 00000000 00000111


结果:7


~的运算:


~00000000 00000000 0000000000000011


----------------------------------------------------------


11111111 11111111 11111111 11111100


最高位是符号位,如果是0是正数,如果是1是负数


负数先-1,再取反得到对应的正数


11111111 11111111 11111111 11111100


-00000000000000000 00000000 0000001


--------------------------------------------------------


11111111 11111111 11111111 11111011


~11111111 11111111 1111111111111011


100000000 00000000 00000000 00000100


结果:-4


负数的二进制:


负数对应的正数的原码,以-3为例


3的原码(原始的二进制):00000011


3的反码(对原码取反):11111100


3的补码(对反码+1):11111101


-3的原码就是3的补码:11111101


<<:左移。就是将二进制向左移动相应位数,右边被移空的部分补0.就相当于乘以2的倍数


>>:右移。就是将二进制向右移动相应位数,如果最高位是0,左边被移空的位置就补0;如果最高位是1,左边被移空的位置就补1.


>>>:按位右移。就是将二进制向右移动相应位数,无论最高位是0还是1,都补0。



3的二进制:00000011


向左移动2位,去掉多出来的两个最高位,右边补0


00001100-------12


左移几位乘以2的多少次方。3<<4=====3*24= 48


面试题:


请用最有效率的方式写出2*8的结果?


2<<3


右移:


向右移动2位,去掉右边多出来的,左边最高位是1补1,是0则补0


24: 00011000


00000110===6


-24:00011000取反=11100111+1= 11101000


-24右移两位:11111010


11111010-1=11111001 =取反=10000110 = -6


-24:1111111111111111 11111111 11101000=右移两位:0011111111111111 11111111 11111010=1073741818


练习题:


1.请自己实现两个整数变量的交换


例如:a= 3;b = 4 交换之后a= 4; b = 3;



三元运算符(三目运算符)


格式:比较表达式? 表达式1 :表达式2


执行流程:首先计算比较表达式的值,看是true还是false。


如果是true,结果就是表达式1;


如果是false,结果就是表达式2.



练习:


比较两个数是否相等


获取两个数中的最大值


获取三个数中的最大值



运算符的优先级


运算符的优先级(从高到低)


[object HTMLImageElement]


如果在程序中,要改变运算顺序,可以使用()。



文章转载自悦悦学姐,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论