课前回顾:1.Java的环境:jvm:运行Java程序的,运行的是编译生成的.class文件跨平台性:一个应用程序,可以在不同的操作系统上运行,需要安装不同版本的jvmjre:运行Java程序的,包含了jvmjdk:开发工具包,包含了jvm以及开发工具包2.环境变量JAVA_HOME3.注释:对代码进行解释说明单行: //多行: /**/文档: /**内容*/4.关键字:java提前定义好的,具有特殊含义的小写单词,在高级记事本中颜色特殊5.开发三步骤:编写:public class 类名{public static void main(String[] args){System.out.println("内容");}}编译:javac 文件名.java运行:java 文件名6.常量整数常量 小数常量 字符常量(单引号中必须有且只能有一个内容) 字符串常量 布尔常量 空常量7.变量:int i = 10;作用:一次存储一个数据数据类型:基本类型:整型: byte short int long浮点型:float double字符型:char布尔型:boolean引用类型:数组 类 接口 注解 枚举今日重点:1.要知道变量的注意事项2.知道什么时候发生自动类型转换(不用我们手动去做)3.知道怎么强制类型转换(需要我们手动处理)4.会使用所有的运算符
第一章.变量
| 数据类型 | 关键字 | 内存占用 | 取值范围 |
|---|---|---|---|
| 字节型 | byte | 1个字节 | -128 至 127 定义byte变量时超出范围,废了 |
| 短整型 | short | 2个字节 | -32768 至 32767 |
| 整型 | int(默认) | 4个字节 | -231 至 231-1 正负21个亿 |
| 长整型 | long | 8个字节 | -263 至 263-1 19位数字 |
| 单精度浮点数 | float | 4个字节 | 1.4013E-45 至 3.4028E+38 |
| 双精度浮点数 | double(默认) | 8个字节 | 4.9E-324 至 1.7977E+308 |
| 字符型 | char | 2个字节 | 0 至 216-1 |
| 布尔类型 | boolean | 1个字节 | true,false |
1.变量的介绍以及使用
// 转义字符/*\ 代表的是转义字符*/public class Demo01Var{public static void main(String[] args){/*\n 代表的是换行*/char c1 = '\n';System.out.print("哈哈哈");System.out.print(c1);System.out.print("哈哈哈");System.out.print(c1);/*\t 制表符 相当于tab键*/System.out.println("hah"+'\t'+"haha");/*在java中表示路径怎么表示?E:\Idea\io在java中两个反斜杠代表一个反斜杠\\*/String path = "E:\\Idea\\io";System.out.println(path);char c2 = '\'';System.out.println(c2);}}
2.变量使用时的注意事项
1.变量不初始化(第一次赋值)不能直接使用2.在同一个作用域(一个大括号就是一个作用域)中,不能定义重名的变量3.不同的作用域之间的变量不要随便互相访问小作用域中能访问大作用域中提前定义好的的变量大作用域中不能直接访问小作用域中的变量
public class Demo02VarNotice{public static void main(String[] args){int i;i = 10;System.out.println(i);//int i = 20;//错误 在同一个作用域中不能定义重名的变量System.out.println(i);int j = 100;{System.out.println(j);int x = 10000;}//System.out.println(x);}}
3.练习
需求:变量去描述一个人人: 姓名 年龄 性别 身高 体重
public class Demo03Person{public static void main(String[] args){//姓名String name = "和珅";//年龄int age = 30;//性别char sex = '男';//身高int height = 175;//体重double weight = 140.0;System.out.println(name);System.out.println(age);System.out.println(sex);System.out.println(height);System.out.println(weight);}}
第二章.标识符
1.概述:我们自己给类,方法,变量取得名字2.硬性规定(必须遵守)- 标识符可以包含`英文字母26个`、`0-9数字` 、`$(美元符号)`和`_(下划线)`。int a1_b = 10;- 标识符不能以数字开头。int a1 = 10 int 1a = 100(错误)- 标识符不能是关键字。int staic = 10(错误) int staticpublic = 1003.软性建议(建议遵守规则):给类取名:每一个单词首字母都大写(大驼峰式) public class DemoTest给方法取名字: 从第二个单词开始往后(包括第二个单词)首字母大写(小驼峰式)给变量取名字: 从第二个单词开始往后(包括第二个单词)首字母大写(小驼峰式)取名字的时候最好要:见名知意
第三章.数据类型转换
1.什么时候会发生数据类型转换:等号左右两边数据类型不一样2.按照取值范围大小来排序(从小到大排序)byte short char->int->long->float->double
1.自动类型转换
1.表示形式:取值范围大的数据类型 变量名 = 取值范围小的数据类型2.怎么转:将小的类型自动转成大的类型
public class Demo04DataType{public static void main(String[] args){/*等号左边是long型的等号右边是int型的相当于将取值范围小的类型赋值给取值范围大的类型会发生自动类型转换*/long num1 = 100;/*等号左边是double型等号右边是int型相当于将int型的数据赋值给了double型的变量将取值范围小的类型赋值给取值范围大的类型发生了自动类型转换*/double num2 = 1000;System.out.println(num2);/*小类型和大类型做运算小类型也会自动转成大类型->会自动提升*/double num3 = 10+2.5;System.out.println(num3);}}
2.强制类型转换
1.什么时候需要强转取值范围小的数据类型 变量名 = 取值范围大的数据类型->报错2.怎么强转?取值范围小的数据类型 变量名 =(取值范围小的数据类型) 取值范围大的数据类型
public class Demo05DataType{public static void main(String[] args){/*等号右边为long型等号左边为int型相当于将取值范围大的类型赋值给取值范围小的类型,需要强转*/int num1 = (int)100L;System.out.println(num1);/*等号右边是double型等号左边是float型相当于将取值范围大的类型赋值给取值范围小的类型,需要强转*/float num2 = 2.5F;System.out.println(num2);}}
3.强转的注意事项
1.不要随机(故意)写成强转的形式(除非不得已),有可能会出现精度损失以及数据溢出现象2.byte,short如果等号右边是常量,没有超出取值范围,不会报错(jvm已经针对此种情况做了优化,jvm自动强转了)byte,short如果等号右边有变量参与,会自动提升为int型,需要手动强转3.char如果等号右边是常量,不用强转(jvm自动转了)如果等号右边有变量参与,也会自动提升为int型,需要强转char类型一旦提升为int,会自动去码表中查询这个字符对应的int值->ASCII码表char类型的数据只要是参与运算,都会被提升为int型做运算如果ASCII码表中没有字符对应的int值,会去Unicode的码表中查询字符对应的int值->万国码
public class Demo06DataTypeNotice{public static void main(String[] args){/*等号右边是double型等号左边是int型相当于将取值范围大的类型赋值给取值范围小的类型,报错了,需要强转*/int i = (int)2.9;System.out.println(i);/*数据溢出int型占内存4个字节1个字节占多少个2进制位 8个int型能表示的二进制位最多是32位二进制100亿转成二进制:36位二进制将36位二进制的数硬给最多能存32位二进制的int型,多出来4位,将100亿对应二进制的前4位干掉,剩下的二进制对应的十进制就是1410065408*/int num = (int)10000000000L;System.out.println(num);//1410065408}}
public class Demo07DataTypeNotice{public static void main(String[] args){byte b = 10;/*byte型的sum等号右边有变量参数,此时自动提升为int型,需要手动强转byte = byte + intbyte = int+int*/byte sum = (byte)(b+1);System.out.println(sum);System.out.println("==========华丽的分割线==========");char c = 'a';/*char result = c+1变量c代表的'a'自动提升为int型 'a'--> 97char result = c+1 = 97+1=98(char)98--> b*/char result = (char)(c+1);System.out.println(result);char result01 = 98;System.out.println(result01);int result02 = 'a';System.out.println(result02);int result03 = '中';System.out.println(result03);//20013}}
第四章.运算符
1.算数运算符
+-*/ -> 取的是整数部分(商) ->如果是两个整数相除,取商,如果被除数和除数有一个为小数,结果就是小数%(模) -> 取的是余数部分
public class Demo08SuanShu{public static void main(String[] args){int i = 10;int j = 20;//推荐使用int sum = i+j;System.out.println(sum);//不推荐System.out.println(i+j);//为了方便先直接放到输出语句中System.out.println(i-j);System.out.println(i*j);int x = 10;int y = 3;int result01 = x/y;System.out.println(result01);int result02 = x%y;System.out.println(result02);}}
+:数和数之间用+ 此+代表就是运算符号,加法如果和字符串之间用+,代表的是字符串连接符号,直接往后拼接,不运算(任何类型遇到字符串都会变成字符串)
public class Demo09SuanShu{public static void main(String[] args){int i = 10;int j = 20;System.out.println(i+""+j);//1020System.out.println(i+j+"");//30System.out.println(""+j+i);//2010System.out.println(""+(j+i));//30String s = (i+""+j);System.out.println(s);//1020int x = 100;int y = 200;int sum = x+y;System.out.println("x与y相加之和为:"+sum);}}
2.自增自减运算符(也算算数运算符的一种)
1.自增 ++自减 --2.注意:a.++ -- 必须和变量一起使用 i++ ++ib.++ -- 都是变化13.使用:单独使用:++ -- 自身单独成为一句符号在前还是在后,都是直接运算混合使用:和赋值语句以及输出语句混合使用符号在前: 先运算,再使用运算后的值符号在后: 先用原来的值,用完之后再运算4.注意:开发时我们用的只有单独使用平时不要瞎玩儿
public class Demo10ZiZengZiJian{public static void main(String[] args){int i = 10;//i++;++i;System.out.println(i);System.out.println("=======");int j = 10;//int result = ++j;int result = j++;System.out.println(result);System.out.println(j);System.out.println("=======");int c = 100;c = c++;System.out.println(c);System.out.println("=======");int x = 10;int y = 20;/*-9+19*/int result02 = x++ - --y + y++;System.out.println(result02);//10}}
练习:求出三位数中的每一位的数据比如: 364 分别拿出3 6 4
public class Demo11Test{public static void main(String[] args){int number = 364;int bai = number/100;int shi = number/10%10;int ge = number%10;System.out.println("百位为:"+bai);System.out.println("十位为:"+shi);System.out.println("个位为:"+ge);}}
3.赋值运算符
基本赋值运算符:=:赋值符号,将等号右边的赋值给等号左边的变量复合赋值运算符+=int i = 10;i+=1; --> i = i+1i+=2; --> i = i+2-=*=/= : 如果两个整数相除,取整数部分 除数和被除数有一个为小数,那么结果就是小数%= : 取余数部分注意:复合赋值运算符中,如果是byte short的话,不会出现错误,不用手动强转,(jvm自动强转)
public class Demo12FuZhi{public static void main(String[] args){int i = 10;i+=2;//i = i+2System.out.println(i);byte b = 1;b+=1;//b = b+1//b = b+1;System.out.println(b);}}
4.关系运算符(比较运算符)
1.关系运算符结果都是boolean型 都是用于做判断条件使用== : 判断符号前后的数据是否相等,如果相等结果为true,否则为false> : 判断符号前面的是否大于符号后面的数据,如果大于返回true,否则返回false< : 判断符号前面的是否小于符号后面的数据,如果小于返回true,否则返回false>= : 判断符号前面的数据是否大于或者等于符号后面的数据,如果大于或者等于返回true,否则返回false<= : 判断符号前面的数据是否小于或者等于符号后面的数据,如果小于或者等于返回true,否则返回false!= : 判断符号前面的数据是否不等于符号后面的数据,如果不等于返回true,否则返回false
public class Demo13Compare{public static void main(String[] args){int i = 10;int j = 20;int k = 10;//== : 判断符号前后的数据是否相等,如果相等结果为true,否则为falseboolean result01 = (i==j);System.out.println(result01);//> : 判断符号前面的是否大于符号后面的数据,如果大于返回true,否则返回falseboolean result02 = (i>k);System.out.println(result02);//< : 判断符号前面的是否小于符号后面的数据,如果小于返回true,否则返回falseSystem.out.println(i<j);//>= : 判断符号前面的数据是否大于或者等于符号后面的数据,如果大于或者等于返回true,否则返回falseSystem.out.println(i>=k);//<= : 判断符号前面的数据是否小于或者等于符号后面的数据,如果小于或者等于返回true,否则返回falseSystem.out.println(i<=j);// != : 判断符号前面的数据是否不等于符号后面的数据,如果不等于返回true,否则返回falseSystem.out.println(i!=k);}}
5.逻辑运算符
1.结果:都是boolean型2.作用:连接关系运算符的, 或者连接多个结果为boolean型结果的表达式&(与,并且):有假则假,如果符号前后有一个结果为false,结果就是false|(或):有真则真,如果符号前后有一个结果为true,结果就是true^(异或):符号前后结果一样,返回false 符号前后结果不一样,返回truetrue^true--> falsefalse^false ->falsetrue^false -> truefalse^true -> true!(非,取反):真亦假 假亦真非true就是false 非false 就是true&&(双与):有假则假,如果符号前后有一个结果为false,结果就是false||(双或):有真则真,如果符号前后有一个结果为true,结果就是true
public class Demo14LuoJi{public static void main(String[] args){int i = 10;int j = 20;int k = 10;// &(与,并且):有假则假,如果符号前后有一个结果为false,结果就是falseboolean result01 = (i>j)&(j<k);System.out.println(result01);//false// |(或):有真则真,如果符号前后有一个结果为true,结果就是trueboolean result02 = (i<j)|(j<k);System.out.println(result02);//true/*^(异或):符号前后结果一样,返回false 符号前后结果不一样,返回truetrue^true--> falsefalse^false ->falsetrue^false -> truefalse^true -> true*/boolean result03 = (i>j)^(j<k);//false ^ falseSystem.out.println(result03);//false/*!(非,取反):真亦假 假亦真非true就是false 非false 就是true*/boolean result04 = !(i==k);System.out.println(result04);/*定义一个变量,表示分数,判断这个分数是否在1-100之间数学写法:1<=score<=100java写法:score>=1 & score<=100*/int score = -1;boolean result05 = (score>=1) & (score<=100);System.out.println(result05);}}
&& 和 & 以及|| 和|区别
&:如果符号前后是boolean表达式,是逻辑运算符
如果符号前后是数字,是位运算符如果符号前面为false,jvm还会判断符号后面的表达式&&:就是一个纯的逻辑运算符
有假则假,如果符号前面的为false,符号后面不看了(短路效果)|:如果符号前后是boolean表达式,是逻辑运算符
如果符号前后是数字,是位运算符如果符号前面为true,jvm还会判断符号后面的表达式||:就是一个纯的逻辑运算符
有真则真,如果符号前面为true,jvm后面不看了(短路效果)注意:开发时如果用到逻辑运算符的话,我们首先选用&& ||
6.三元运算符
1.格式:boolean表达式?表达式1:表达式22.执行流程:a.先走boolean表达式,判断b.如果是true,执行?后面的表达式1c.否则,执行:后面的表达式2
6.1练习1
需求:小明考完试了,判断小明的分数是否及格?分析:1.定义一个分数,随意赋值2.判断如果分数>=60,返回及格3.否则,返回不及格
public class Demo15SanYuan{public static void main(String[] args){//定义一个变量,表示分数int score = 59;String result01 = (score>=60)?"及格":"不及格";System.out.println(result01);}}
6.2练习2
需求:一座寺庙里住着两个和尚,已知他们的身高分别为150cm、210cm,请用程序实现获取这两个和尚的最高身高。
//定义两个变量分别表示两个和尚的身高int heShang1 = 150;int heShang2 = 210;int result02 = (heShang1>heShang2)?heShang1:heShang2;System.out.println(result02+"CM");
6.3 练习3
需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、170cm,请用程序实现获取这三个和尚的最高身高。步骤:先用前两个和尚身高进行比较,获取较大的值然后再和第三个和尚比较,再拿较大的值
public class Demo15SanYuan{public static void main(String[] args){//定义三个变量分别表示三个和尚的身高int heShang1 = 150;int heShang2 = 210;int heShang3 = 170;int temp = (heShang1>heShang2)?heShang1:heShang2;int result02 = (temp>heShang3)?temp:heShang3;System.out.println(result02+"CM");}}
第五章.进制的转换(了解)
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | a或A |
| 11 | 1011 | 13 | b或B |
| 12 | 1100 | 14 | c或C |
| 13 | 1101 | 15 | d或D |
| 14 | 1110 | 16 | e或E |
| 15 | 1111 | 17 | f或F |
| 16 | 10000 | 20 | 10 |
3.1 十进制转成二进制
辗转相除法(除以2取余数)
![day02.[变量_数据类型转换_运算符] - 图1](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw1k6y7pkj60ad0bmweb02.jpg#id=gN8lN&originHeight=418&originWidth=373&originalType=binary&status=done&style=none)
3.2 二进制转成十进制
8421规则
![day02.[变量_数据类型转换_运算符] - 图2](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw1l7krt0j60h60513yc02.jpg#id=CodRj&originHeight=181&originWidth=618&originalType=binary&status=done&style=none)
3.3 二进制转成八进制
将二进制分开(3位为一组)
![day02.[变量_数据类型转换_运算符] - 图3](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw1mb0yzaj60e70bdt8q02.jpg#id=BBbqd&originHeight=409&originWidth=511&originalType=binary&status=done&style=none)
3.4 二进制转成十六进制
二进制分为4个为一组
![day02.[变量_数据类型转换_运算符] - 图4](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw2n7mfnhj60aw093gli02.jpg#id=mVgbJ&originHeight=327&originWidth=392&originalType=binary&status=done&style=none)
第六章.位运算符(了解)
![day02.[变量_数据类型转换_运算符] - 图5](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw1vlqzw1j60m908vgmv02.jpg#id=pYKES&originHeight=319&originWidth=801&originalType=binary&status=done&style=none)
1代表true 0代表false我们要知道计算机在存储数据的时候都是存储的数据的补码,而计算的也是数据的补码1.正数二进制最高位为0;负数二进制最高位是12.正数的原码,反码,补码一致如:5的源码,反码,补码为:0000 0000 0000 0000 0000 0000 0000 0101->二进制最高位是0,因为是正数3.负数的话原码,反码,补码就不一样了反码是原码的基础上最高位不变,其他的0和1互变补码是在反码的基础上+1如:-9原码:1000 0000 0000 0000 0000 0000 0000 1001反码:1111 1111 1111 1111 1111 1111 1111 0110补码:1111 1111 1111 1111 1111 1111 1111 0111
(1)左移:<<
**运算规则**:左移几位就相当于乘以2的几次方**注意:**当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位
2<<2 等于8相当于:2*(2的2次方)
![day02.[变量_数据类型转换_运算符] - 图6](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw1ww2hfvj60e005874402.jpg#id=E5fae&originHeight=188&originWidth=504&originalType=binary&status=done&style=none)
-2<<2 等于-8相当于:-2*(2的2次方)
![day02.[变量_数据类型转换_运算符] - 图7](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw1ywe6pij60ks0gkdhy02.jpg#id=YooEL&originHeight=596&originWidth=748&originalType=binary&status=done&style=none)
(2)右移:>>
快速运算:类似于除以2的n次,如果不能整除,向下取整
9>>2 等于 2相当于:9除以(2的2次方)
![day02.[变量_数据类型转换_运算符] - 图8](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw1xzg112j60le04xt9k02.jpg#id=RrjXx&originHeight=177&originWidth=770&originalType=binary&status=done&style=none)
-9>>2 等于-3相当于:-9除以(2的2次方)
![day02.[变量_数据类型转换_运算符] - 图9](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw1zdnjmnj60mv0epq5202.jpg#id=r3iae&originHeight=529&originWidth=823&originalType=binary&status=done&style=none)
(3)无符号右移:>>>
运算规则:往右移动后,左边空出来的位直接补0,不管最高位是0还是1空出来的都拿0补
正数:和右移一样
9>>>2 等于 2相当于:9除以(2的2次方)
负数:右边移出去几位,左边补几个0,结果变为正数
-9>>>2结果为:1073741821
笔试题:8>>>32位->相当于没有移动还是8
8>>>34位->相当于移动2位
(4)按位与:&
小技巧:将0看成为false 将1看成true
运算规则:对应位都是1才为1,相当于符号左右两边都为true,结果才为true
1 & 1 结果为11 & 0 结果为00 & 1 结果为00 & 0 结果为0
比如: 5&3 结果为1
![day02.[变量_数据类型转换_运算符] - 图10](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw1zxo4iyj60jp0a5myb02.jpg#id=bFQin&originHeight=365&originWidth=709&originalType=binary&status=done&style=none)
(5)按位或:|
运算规则:对应位只要有1即为1,相当于符号前后只要有一个为true,结果就是true
1 | 1 结果为11 | 0 结果为10 | 1 结果为10 | 0 结果为0
比如: 5|3 结果为:7
![day02.[变量_数据类型转换_运算符] - 图11](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw20uoriaj60m70be3zw02.jpg#id=Adr6e&originHeight=410&originWidth=799&originalType=binary&status=done&style=none)
(6)按位异或:^
运算规则:对应位一样的为0,不一样的为11 ^ 1 结果为0 false1 ^ 0 结果为1 true0 ^ 1 结果为1 true0 ^ 0 结果为0 false
比如: 5^3 结果为6
![day02.[变量_数据类型转换_运算符] - 图12](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw22442knj60m10atwfs02.jpg#id=QCBXD&originHeight=389&originWidth=793&originalType=binary&status=done&style=none)
(7)按位取反
运算规则:~0就是1
~1就是0
~10 -> 结果为-11
![day02.[变量_数据类型转换_运算符] - 图13](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw235yocfj60lm0amgmx02.jpg#id=gwtnT&originHeight=382&originWidth=778&originalType=binary&status=done&style=none)
第七章.运算符的优先级(了解)
![day02.[变量_数据类型转换_运算符] - 图14](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqw23nfcj8j60a50cuglv02.jpg#id=tD4fk&originHeight=462&originWidth=365&originalType=binary&status=done&style=none)
提示说明:(1)表达式不要太复杂(2)先算的使用(),记住,如果想让那个表达式先运行,就加小括号就可以了i<(n*m)
