学习进程
一,复习
java 源文件 --> 程序员 javac 文件名 --> 编译 .class 字节码文件 --> 机器 java 类名 --> 执行 JVM(解释器) --> 汇编语言 公开类的类名必须与文件名一致 编译型(不能跨平台) 解释型(跨平台) html/js 可执行文件.exe 解释器翻译(渲染) 有符号数字: 最高位是符号位 八大类型的取值范围 byte(字节) 1字节=8位 -128~127 short(短整型) 2字节=16位 -32768~32767 char(字符型) 2字节=16位 0~65535 使用单引号包裹'', 使用unicode+16进制的数字 \uXXXX, 本质是数字 int(整型) 4字节=32位 -2147483648~2147483647 long(长整型) 8字节=64位 -2^63~2^63-1 float(单精度浮点)4字节=32位 double(双精度) 8字节=64位 boolean(布尔类型) JVM决定 true/false 变量的命名规则和规范 可以包含数字,字母,下划线,美元符 不能以数字开头 不能是关键字保留字 不能是特殊字面量常量true, false, null 规范: 变量(方法名) --> 骆驼命名法(驼峰命法)Camel Case 第一个单词全小写,后续单词首字母大写 studentName 类--> 帕斯卡命名法(大驼峰) Pascal Case 首字母大写 StudentName
练习
//导包 import java.util.Scanner; public class Test03{ public static void main(String[] args){ //创建扫描器对象 Scanner sc = new Scanner(System.in); //输入姓名 System.out.println("请输入姓名:"); String name = sc.next(); //输入年龄 System.out.println("请输入年龄:"); int age = sc.nextInt(); //输入性别 System.out.println("请输入性别:"); char gender = sc.next().charAt(0); //打印姓名年龄性别 System.out.println("姓名\t年龄\t性别"); System.out.println(name + "\t" + age + "\t" + gender); } }
二,运算符
1.算术运算符
1.1一元运算符
++ 自加1 -- 自减1 前置: 先计算,再使用 后置: 先使用,再计算
1.2二元运算符
+,-,*,/,%(模,取余数)
2.赋值运算符
=,+=,-=,*=,/=,%=
short num = 0; num += 5; // num = (short)(num + 5);
3.关系运算符
关系运算:结果是boolean ==,!=,>,>=,<,<=
4.逻辑运算符
逻辑运算:表达式和结果是boolean ! 逻辑非 && 逻辑与(短路) --> 左右两边同时为true,整个表达式的结果true || 逻辑或(短路) --> 左右两边只要有任意一边为true,整个表达式的结果true
逻辑与短路: false && 短路 逻辑或短路: true || 短路
5.位运算符
>>: 向右位移(缩小) >>>: 带符号向右位移 <<: 向左位移(放大) ~: 按位取反 &: 按位与 |: 按位或 ^: 按位异或(相同为0,不同为1)
演示代码片段:
//import java.util.Scanner; /** 演示算数运算符 */ public class Demo1 { public static void main(String args[]){ //演示+号运算 String str = "10"; int aa = 5; // "1510205" System.out.println(aa + 10 + str + 20 + aa); //自增和自减 int num = 10; //自增 num++; // num = num + 1; System.out.println(num); //演示前置与后置的区别 //后置: 先使用,再自增 //前置: 先自增,再使用 //num = 11 int result = num++ + num + ++num + num; System.out.println(result+":" + num);//49:13 //演示模运算 num = 10; result = num % 3; // 10 / 3 = 3..1 System.out.println(result);//49:13 //演示复合赋值运算符 num = 10; num += 5; // num = (int)(num + 5); System.out.println(num);//15 short s1 = 10; short s2 = 20; short s3 = (short)(s1 + s2);//寄存器int System.out.println(s3);//30 s1 = 10; //s1 = (short)(s1 + 5;) s1 += 5; System.out.println(s1);//15 float a = 12.5F; double b = a + 1.0; //演示关系运算符 s1 = 10; s2 = 20; boolean flag = s1 == s2; System.out.println(flag);//false Scanner sc = new Scanner(System.in); //用户输入数字,判断数字是否是0-10的区间 System.out.println("请输入0-10的数字");//false num = 5 * 2 << 1; //55 // true false flag = num >= 0 && num <= 10; System.out.println(flag);//input=55 --> output=false // num = 10; //&&和||会发生逻辑短路 // false 短路 flag = num > 10 && ++num > 10; // true 短路 flag = num > 0 || ++num > 10; System.out.println(flag + ":" + num);//flag = true, num = 10 //演示位运算符 num = -4; // 0101 // 0010 result = num >>> 1; System.out.println("result = " + result);// num = 5; //0101 //1010 // result = num * 2; // result = num << 1; System.out.println("result = " + (num << 1));//10 //按位取反 num = 5; // 101 // 010 System.out.println("result = " + ~num);//-6 //演示按位与 num = 5; int num1 = 3; // 101 // 011 //&----- // 001 result = num & num1; System.out.println("result = " + result);//1 //演示按位或 num = 5; num1 = 3; // 101 // 011 // |----- // 111 1000-1 result = num | num1; System.out.println("result = " + result);//7 num = 0; num1 = 3; //按位操作不会短路 // 000 // 011 //&---- // 000 result = num & ++num1; System.out.println("result = " + result + ", num1 = "+ num1);// //演示按位异或: 相同为0,不同为1 num = 5; num1 = 3; // 101 // 011 //^---- // 110 ==> 6 result = num << num1; System.out.println("result = " + result );//6 num = -16_1061_2736; num = num << 1; System.out.println("num = " + num );// } }
运算符优先级: . > () > 单目 > 算术 > 关系 > 逻辑 > 赋值
随机数算法: (int)(Math.random() * (max - min + 1) + min);
三,分支结构
1.if语句
if(条件){ 逻辑体; } if(条件){ 逻辑体1; }else{ 逻辑体2; } if(条件1){ 逻辑体1; }else if(条件2){ 逻辑体2; }else{ 逻辑体3; }
2.三目运算符
语法:变量 = 逻辑表达式 ? 结果1 : 结果2;
3.switch语句
变量的类型可以是: byte,short,char,int,String,枚举
语法:
switch(变量){ case 常量1: break; //如果没有break将贯穿执行 case 常量2: break; default: //用来表示else的逻辑 break; }
课后练习
1.习题一:幸运抽奖
需求:随机生成一个4位数字,分解并计算出各位数之和,如果大于24则输出中奖信息 要点: 随机数生成可使用Math.random(),该方法能得到一个0到1(不包含1)之间的浮点数 如生成一个0到9(包含9)之间的数组 int num = (int)(Math.random() * 10); 要想生成任意区间的数字,参考公式为: int rand = (int)(Math.random() * (max - min + 1) + min); 其中min为最小值,max为最大值 分解出各位数算法: 假设 num = 9527 个位: num / 1 % 10 十位: num / 10 % 10 百位: num / 100 % 10 千位: num / 1000 % 10
/** 随机生成一个4位数,分解并计算出各位数字之和 */ public class Test02{ public static void main(String[] args){ //生成一个四位数1000~9999 int max = 9999, min = 1000; int rand = (int)(Math.random()*(max-min+1)+1); System.out.println("生成一个随机的四位数:" + rand); //分解各位数 int ge = rand % 10; int shi = rand / 10 % 10; int bai = rand / 100 % 10; int qian = rand / 1000 % 10; //计算各位数之和 int sum = ge + shi + bai +qian; System.out.println(ge + "+" + shi + "+" + bai + "+" + qian + "=" + sum); //如果大于24则输出中奖信息 if (sum > 24) { System.out.println("恭喜你中奖了" ); } } }
2.习题二:最大日期判断
需求:控制台接收用户输入年份和月份,计算并打印出该月最大天数为多少 要点: 使用if和switch结构计算 闰年条件: 1.年份能被4整除,不能被100整除 2.年份能被400整除
/* 需求:控制台接收用户输入年份和月份,计算并打印出该月最大天数为多少 要点:使用if和switch结构计算 闰年条件: 1.年份能被4整除,不能被100整除 2.年份能被400整除 */ import java.util.Scanner; public class Test03{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); //请输入年份 System.out.println("请输入年份:" ); int year = sc.nextInt(); //请输入月份 System.out.println("请输入月份:" ); int month = sc.nextInt(); //计算该月最大天数 if (month == 4 || month == 6 || month == 9 || month == 11) { System.out.println("该月最大天数为:30天"); }else if (month == 2){ if(year % 4 == 0 && year % 100 != 0 || year % 400 ==0){ System.out.println("该月最大天数为:29天"); }else { System.out.println("该月最大天数为:28天" ); } }else{ System.out.println("该月最大天数为:31天"); } } }