JavaSEDay02 总结笔记
01-标识符
- 介绍 : 自己给类, 方法, 变量等等起名字的符号
- 简单记 : 自己起的名字
- 标识符的命名规则 :
- 数字 0~9
- 字符 a-z A-Z
- _ $
- 不能是关键字
- 不能以数字开头
- 严格区分大小写
- 标识符命名规范 :
小驼峰命名法: (变量)如果是一个单词, 所有字母小写 ---> age max
如果是多个单词, 从第二个单词开始首字母大写 --> maxAgetempMax大驼峰命名法: (类)如果是一个单词, 首字母大写 ---> Student
如果是多个单词, 每个单词首字母大写 ---> OperatorDemoScannerDemo
02-数据类型
- 基本数据类型
整数:
byte1个字节-128~127
short2个字节
int4个字节
long8个字节
小数:
float4个字节
double8个字节
字符:
char2个字节
布尔:
boolean1个字节
- 今后定义变量的使用思路
1. 如果定义整数类型变量, 首选int, 发现int装不下了, 换成long (加入L的标识)
2. 如果定义小数类型变量, 首选double, 非要定义float类型变量, 需要加入F标识
- 补充细节 :
所有整数, 默认都是int类型System.out.println(10);
所有小数, 默认都是double类型System.out.println(12.3);
char类型的取值范围 : 0~65535
问题: 为什么是数值范围
回答: 每一个字符, 底层都有一份数值的标识形式
字符类型, 取值范围是数值范围
- 每一个字符, 底层都有一份数值表示形式
- ASCII :
'a'----> 97
'b'----> 98
'c'----> 99
- 引用数据类型
String 字符串
String name = "张三";
- 示例:
public class DataTypeTest { /* 需求: 请将自己的个人信息定义出变量, 并展示在控制台 (姓名, 年龄, 性别, 身高, 婚姻状况)姓名: 字符串: String 年龄: 整数: int 性别: 字符: char 身高: 小数: double 婚姻状况: 布尔: boolean */ public static void main(String[] args) {String name = "张三"; int age = 23; char gender = '男'; double height = 180.1; boolean flag = false; System.out.println(name); System.out.println(age); System.out.println(gender); System.out.println(height); System.out.println(flag); }
- 效果 : 让程序中使用的数据, 更加灵活
- 步骤 :
import java.util.Scanner;
public class ScannerDemo {
/*
1. 找符咒
位置: 写在类的上面
代码: import java.util.Scanner;
意思: 从代码仓库中, 找到Scanner这个符咒
2. 召唤精灵
位置: 写在main方法中
代码: Scanner sc = new Scanner(System.in);
意思: 将符咒中的精灵召唤出来, 并给它起名字叫做 sc
3. 指挥精灵干活
位置: 写在main方法中
代码: int age = sc.nextInt();
意思: 指挥 sc 从键盘接收一个整数, 并交给age变量记录代码: String name = sc.next();
意思: 指挥 sc 从键盘接收一个字符串, 并交给name变量记录
*/
public static void main(String[] args) {Scanner sc = new Scanner(System.in);
System.out.println("请输入您的年龄:");
int age = sc.nextInt();
System.out.println(age);
System.out.println("请输入您的姓名:");
String name = sc.next();
System.out.println(name);
}
}
04-算数运算符
+
-
*
---------------------------------------
/ : 整数相除, 结果只能得到整数, 想要得到带有小数的结果, 需要有小数参与运算
% : 取模, 得到除法之后剩下的余数
自增自减运算符 :
++ : 让变量自身的值 + 1-- : 让变量自身的值 - 1注意: 只能操作变量, 不能操作常量.---------------------------------------------------------1. 单独使用(推荐)一句代码当中, 只做 ++ 或者是 --
++, -- 放在变量的前面和后面, 没有区别的int a = 10;
a++;
++a;
2. 参与运算使用(面试)++在前: 先自增, 再运算int a = 10;
int b = ++a;
// a = 11, b = 11++在后: 先运算, 再自增会将该变量原本的值, 提取出来, 做操作, 然后再自增int a = 10;
int b = a++;
// b = 10, a = 11
public class OperatorTest2 {
/*
需求: 看程序说结果
*/
public static void main(String[] args) {
int x = 10;
int y = x++;
int z = --y;
System.out.println("x=" + x);
System.out.println("y=" + y);
System.out.println("z=" + z);
System.out.println("---------------------");
int a = 3;
int b = (++a) + (a++) + (a * 10);
System.out.println("a=" + a);
System.out.println("b=" + b);
}
}
05-字符串拼接操作
- 当 + 号操作过程中, 遇到了字符串, + 号就是字符串连接符, 而不是算数运算符了
System.out.println("5+5=" + 5 + 5);
// "5+5=55"
System.out.println("5+5=" + (5 + 5));
// "5+5=10"
import java.util.Scanner;
public class OperatorTest1 {
/*
需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台
整数123的个位为:3
整数123的十位为:2
整数123的百位为:1分析:
1. 使用Scanner键盘录入一个整数2. 数值拆分
个位: 数值 % 10
十位: 数值 / 10 % 10
百位: 数值 / 10 / 10 % 10;
千位: 数值 / 10 / 10 / 10 % 10;
万位: 数值 / 10 / 10 / 10 / 10 % 10;
...------------------------------
对于最高位(最左侧) : 优化123 / 100 ====> 1
4567 / 1000 ====> 4
33445 / 10000 ====> 33. 将拆分后的结果, 打印在控制台
*/
public static void main(String[] args) {
// 1. 使用Scanner键盘录入一个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数:");
int num = sc.nextInt();
// 2. 数值拆分
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 10 / 10 % 10;
// int bai = num / 100;
// 3. 将拆分后的结果, 打印在控制台
System.out.println("整数" + num + "的个位为:" + ge);
System.out.println("整数" + num + "的十位为:" + shi);
System.out.println("整数" + num + "的百位为:" + bai);
}
}
06-类型转换-隐式转换
- 介绍 : 将取值范围小的数据或变量, 给取值范围大的变量赋值, 可以直接赋值
- 简单记 : 小的给大的, 可以直接给
- 数据取值范围 : byte short int long float double
- 虽然float占用4个字节, 但是取值范围要比8个字节的long更大.
int a = 10;
double b = a;
System.out.println(b);
// 10.0
- 在运算过程中的隐式转换
- 取值范围小的数据, 和取值范围大的数据, 在一起运算, 小的会将自己先提升为大的, 然后再算.
- byte short char 在运算的时候, 会直接提升为 int 类型
- 【JavaSE学习笔记Day02】介绍 : 将取值范围大的变量或数据, 给取值范围小的变量赋值, 不允许直接赋值, 需要强转
- 简单记 : 大的给小的, 不允许直接给, 需要强转
int num = (int)12.3;
- 注意 : 今后尽量减少强转的使用, [有可能]会精度损失
int num = (int)12.3;
System.out.println(num);
// 12 发生了精度损失int a = 10;
byte b = (byte)a;
System.out.println(b);
// 10 没有精度损失
- 类型转换面试题 :
public class OperatorTest3 {
/*
byte a = 3;
byte b = 4;
byte c = a + b;
问题: 以上代码是否存在问题, 如果有, 请说明原因, 并改正.原因: a,b是两个byte类型, 在一起运算的时候, 会直接提升为int类型
提升之后, 就是两个int相加了, 相加的结果还是int, 将int类型的结果, 赋值给byte类型变量.
这属于大给小, 需要强转.解决: byte c = (byte)(a + b);
--------------------------------------------------------------byte result = 3 + 4;
问题: 以上代码是否存在问题, 如果有, 请说明原因, 并改正.
疑惑: 3 和 4 是两个整数常量, 所有整数默认是int, 两个int相加的结果, 相加的结果还是int, 将int类型的结果, 赋值给byte类型变量.
这属于大给小, 需要强转.原因: Java存在常量优化机制, 在编译的时候(javac) 自动将 3和4进行相加.class(字节码) : byte b = 7;
并且会自动进行检查, 检查运算结果, 是否在byte的取值范围之内
*/
public static void main(String[] args) {byte result = 3 + 4;
}
}
08-赋值运算符
1. 基本赋值运算符= : 将等号右侧的数据, 赋值给左侧的变量int a = 10;
2. 扩展赋值运算符+= : 将符号左右两边数据, 做加法运算, 将结果赋值给左侧的变量
-= : 将符号左右两边数据, 做减法运算, 将结果赋值给左侧的变量
*=
/=
%=注意: 扩展赋值运算符, 自带强转效果int a = 10;
double b = 12.3;
a += b;
// a = (int)(10 + 12.3);
System.out.println(a);
// 22--------------------------------------int c = 10;
double d = 33.3;
d += c;
// d = 10 + 33.3;
Sysetm.out.println(d);
// 43.3
09-关系运算符(比较运算符)
>
>=
<
<=
==
!=结论: 关系运算符, 得到的结果, 只能是boolean类型的true, false= : 赋值操作
== : 比较操作
10-逻辑运算符
- 介绍 :
- 代码层面 : 是用于连接boolean类型的表达式或者是值
- 理解层面 : 可以整合多个判断条件, 为一段整体的逻辑
if(score >= 90 && score <= 100) {}
- 分类 :
&(与) : 并且, 遇false则false
|(或) : 或者, 遇true则true
!(非) : 取反
---------------------------------------------
^ (异或) : 相同为false, 不同为true
11-短路逻辑运算符
& : 没有短路效果, 无论符号左边是true, false, 右边都要继续执行
&& : 具有短路效果, 符号左边为false, 右边就不执行了.
如果符号左边为true, 右边还要继续执行| : 没有短路效果, 无论符号左边是true, false, 右边都要继续执行
|| : 具有短路效果, 符号左边为true, 右边就不执行了.
如果符号左边为false, 右边还要继续执行今后常用的逻辑运算符 :&&||!
12-三元运算符
- 介绍 : 三目运算符 , 可以根据一个判断条件, 达成二者选其一
- 需求 : 求两个整数最大值
- 格式 : 判断条件 ? 值1 : 值2;
- 执行流程 :
- 执行判断条件, 看其返回结果是true, false
- true : 值1就是最终结果
- false : 值2就是最终结果
int max = a > b ? a : b;
13-运算符优先级
- 熟练掌握 () 的使用, 优先级最高
- 常识 : && 的优先级, 大于 ||
- 介绍 : 通过一些特殊的语句, 来控制程序的执行流程
- 分类 :
- 顺序结构 : Java程序默认执行流程
- 分支结构 : if, switch
- 循环结构 : for, while, do...while
if语句的格式1:if(判断条件){
语句体;
}执行流程:
1. 执行 () 中的判断条件, 看其返回结果是true, false
2. true : 执行 {} 中的语句体
3. false : 不执行 {} 中的语句体注意事项:
1. if语句 () 和 {} 之间不要写分号
2. if语句 {} 中如果只有一条语句, {} 可以省略不写, 但是不建议
3. if语句 () 中, 无论简单还是复杂, 只要是boolean类型的true, false, 就符合语法规则
if语句的格式2:if(判断条件){
语句体1;
}else{
语句体2;
}执行流程:
1. 执行判断条件, 看其返回的结果是true, false
2. true : 执行语句体1
3. false : 执行语句体2
if语句的格式3:if(判断条件1){
语句体1;
}else if(判断条件2){
语句体2;
}else if(判断条件3){
语句体3;
}
...
else {
语句体n+1;
}执行流程:
1. 执行判断条件1, 看其返回结果是true, false
true : 执行语句体1, 并结束整个if语句.
false : 进行第二步
2. 执行判断条件2, 看其返回结果是true, false
true : 执行语句体2, 并结束整个if语句
false : 进行第三步
...
3. 如果给出的所有判断条件, 都不成立, 将会执行最后的else
语句体n+1;
需求: 键盘录入一个数值, 表示用户的身份 (1. 会员2. 非会员其他: 您的输入有误)
必掌握案例 :
import java.util.Scanner;
public class OperatorTest5 {
/*
需求:键盘录入考试成绩,根据成绩所在的区间,程序打印出不同的奖励机制95 ~ 100 :自行车一辆
90 ~ 94 :游乐场玩一次
89 ~ 89 :变形金刚一个
80分以下 :挨揍健壮性判断: 校验数据的合理性
*/
public static void main(String[] args) {
// 1. 键盘录入成绩
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩:");
int score = sc.nextInt();
// 2. 多种判断条件, 使用if...else...if
if (score < 0 || score > 100) {
System.out.println("您的成绩输入有误!");
} else if (score >= 95 && score <= 100) {
System.out.println("自行车一辆");
} else if (score >= 90 && score <= 94) {
System.out.println("游乐场玩一次");
} else if (score >= 80 && score <= 89) {
System.out.println("变形金刚一个");
} else {
System.out.println("挨揍");
}
}
}
import java.util.Scanner;
public class OperatorTest6 {
/*
需求:键盘录入考试成绩,根据成绩所在的区间,程序打印出不同的奖励机制95 ~ 100 :自行车一辆
90 ~ 94 :游乐场玩一次
89 ~ 89 :变形金刚一个
80分以下 :挨揍健壮性判断: 校验数据的合理性
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩:");
int score = sc.nextInt();
if (score >= 0 && score <= 100) {// 合理的成绩
// 代码要是能够走到这里, 成绩绝对是0~100之间的, 只需要考虑, 该给什么奖励即可.
if (score >= 95 && score <= 100) {
System.out.println("自行车一辆");
} else if (score >= 90 && score <= 94) {
System.out.println("游乐场玩一次");
} else if (score >= 80 && score <= 89) {
System.out.println("变形金刚一个");
} else {
System.out.println("挨揍");
}} else {
System.out.println("请检查您输入的成绩, 是否是0~100之间");
}
}
}
推荐阅读
- JavaSE学习笔记Day01
- 超级实习生|简历空白怎么办(计算机专业应届生和在校生怎么写简历?)
- 超级实习生|毕业一年,收获朝九晚五月薪18k工作,选择比努力更重要
- Java常见问题
- Java Instrument
- java|编程的智慧(转自王垠个人博客)——满满的编程实践经验不看就错过
- 程序员|一份字节跳动面试官给你的Java技术面试指南,跳槽薪资翻倍
- 程序员|java高分面试指南(淘宝java框架)
- IT文章|转 编程的智慧