Java-学习记录基础到进阶之路二
Java 学习记录:基础到进阶之路(二)
在 Java 学习的旅程中,我们逐步探索了其丰富的知识体系,从基础的数据类型、字符串操作,到流程控制、运算符的运用,每一步都为我们构建强大的编程能力奠定基石。同时,了解这些知识在 Java 全栈开发中的应用场景,对未来进入企业工作至关重要。
目录
一、字符串
1 底层原理与语法
String 代表字符串,其底层基于字符数组实现。创建字符串有两种常见方式: // 第1种用法 String 变量名称 = new String(“内容”); // 第2种用法 String 变量名称 = “内容”;
2 字符串位置与拼接
在 Java 中,字符串的拼接操作十分常见。注意字符串与其他数据类型拼接时的顺序会影响结果: public static void main(String[] args) { int a = 4; int b = 5; // 字符串在前, 进行拼接字符串 System.out.println(“和是:” + (a + b)); System.out.println(a + b + “是和!”); }
3 字符串数组操作
操作字符串数组时,常需根据特定条件筛选元素。 public static void main(String[] args) { String[] arrs = {“貂蝉”,“大乔”,“小乔”,“蔡文姬”,“甄姬”,“孙尚香”}; // 需求:找出姓蔡的女孩 for (int i = 0; i < arrs.length; i++) { if(arrs[i].startsWith(“蔡”)){ System.out.println(arrs[i]); } } } public static void main(String[] args) { String[] arrs = {“貂蝉”,“大乔”,“小乔”,“蔡文姬”,“甄姬”,“孙尚香”}; // 需求:找出3字名的人 for (int i = 0; i < arrs.length; i++) { if(arrs[i].length() == 3){ System.out.println(arrs[i]); } } }
4 课堂练习
练习一:找出以 “乔” 字结尾的人
String[] arrs = {“貂蝉”,“大乔”,“小乔”,“蔡文姬”,“甄姬”,“孙尚香”}; for (String name : arrs) { if (name.endsWith(“乔”)) { System.out.println(name); } }
练习二:找出包含 “文” 的人
String[] arrs = {“貂蝉”,“大乔”,“小乔”,“蔡文姬”,“甄姬”,“孙尚香”}; for (String name : arrs) { if (name.contains(“文”)) { System.out.println(name); } }
练习三:将名字带 “国” 的人,组合成新字符串
String[] arrs = {“王建国”,“蔡徐坤”,“川建国”,“李易峰”,“李爱国”,“吴亦凡”}; StringBuilder newStr = new StringBuilder(); for (String name : arrs) { if (name.contains(“国”)) { newStr.append(name).append("-"); } } System.out.println(newStr.toString());
练习四:找出姓王或姓李的人
String[] arrs = {“王建国”,“蔡徐坤”,“川建国”,“李易峰”,“李爱国”,“吴亦凡”}; for (String name : arrs) { if (name.startsWith(“王”) || name.startsWith(“李”)) { System.out.println(name); } }
练习五:找出 2 字名并且姓李的人
String[] arrs = {“王建国”,“蔡坤”,“川建国”,“李峰”,“李爱国”,“吴凡”}; for (String name : arrs) { if (name.length() == 2 && name.startsWith(“李”)) { System.out.println(name); } }
在 Java 全栈开发中的应用
在 Java 全栈开发中,字符串处理贯穿前后端。前端通过 JavaScript 与后端 Java 交互时,数据传输多以字符串形式,后端需精确解析和处理这些字符串。例如,在处理用户注册信息时,对用户名、密码等字符串的验证和存储都依赖上述字符串操作方法。
二、人机交互
1 接收输入 - Scanner 类
通过 Scanner 类可实现从控制台接收用户输入: Scanner scanner = new Scanner(System.in);
2 课堂练习
需求一:输入姓氏,打印对应人名
String[] arrs = {“王建国”,“蔡徐坤”,“川建国”,“李易峰”,“李爱国”,“吴亦凡”}; Scanner scanner = new Scanner(System.in); System.out.println(“请输入姓氏:”); String prefix = scanner.next(); for (String name : arrs) { if (name.startsWith(prefix)) { System.out.println(name); } }
需求二:输入关键字,打印包含该关键字的人名
String[] arrs = {“赵云”,“夏侯惇”,“黄忠”,“夏侯渊”,“吕布”,“太史慈”}; Scanner scanner = new Scanner(System.in); System.out.println(“请输入关键字:”); String keyword = scanner.next(); for (String name : arrs) { if (name.contains(keyword)) { System.out.println(name); } }
需求三:输入数值,打印对应长度的人名
String[] arrs = {“赵云”,“夏侯惇”,“黄忠”,“夏侯渊”,“吕布”,“太史慈”}; Scanner scanner = new Scanner(System.in); System.out.println(“请输入人名长度:”); int length = scanner.nextInt(); for (String name : arrs) { if (name.length() == length) { System.out.println(name); } }
需求四:输入人名,打印对应长度的人名
String[] arrs = {“赵云”,“夏侯惇”,“黄忠”,“夏侯渊”,“吕布”,“太史慈”}; Scanner scanner = new Scanner(System.in); System.out.println(“请输入人名:”); String inputName = scanner.next(); int inputLength = inputName.length(); for (String name : arrs) { if (name.length() == inputLength) { System.out.println(name); } }
在 Java 全栈开发中的应用
人机交互在 Java 全栈开发中是连接用户与系统的桥梁。前端页面通过表单等元素收集用户输入,而后端使用 Scanner 等机制获取并处理这些输入。在企业级 Web 应用中,用户登录、提交订单等操作都依赖于准确的人机交互流程,确保数据的正确接收和处理。
三、字符与编码
1 char 字符
字符类型char
用于表示单个字符,字符串本质是字符数组。计算机底层以二进制 0/1 存储数据,通过编码集将字符与二进制对应。早期有 Ascii 码,涵盖
128 个字符,包含 33 个不可显示字符和 95 个可显示字符。但对于中文等更多字符,国内常用 GB2312、GBK,目前广泛使用 UTF - 8 编码。
public static void main(String[] args) {
char a = ‘A’;//65
System.out.println(a);
System.out.println(a + 1);
System.out.println(a > 30);
}
2 面试题:字符统计
String str = “qwe3245sdfAWW234FW23as3”; int upperCount = 0; int lowerCount = 0; int digitCount = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (Character.isUpperCase(c)) { upperCount++; } else if (Character.isLowerCase(c)) { lowerCount++; } else if (Character.isDigit(c)) { digitCount++; } } System.out.println(“大写字母个数:” + upperCount); System.out.println(“小写字母个数:” + lowerCount); System.out.println(“阿拉伯数字个数:” + digitCount);
在 Java 全栈开发中的应用
在全栈开发中,字符编码问题影响数据在前后端及不同系统间的传输与存储。例如,在处理国际化网站时,需确保不同语言字符在 UTF - 8 编码下正确显示和处理。同时,字符统计等操作在文本分析、数据清洗等后端任务中十分常见。
四、标识符与关键字
1 关键字
Java 共有 50 个关键字,其中const
和goto
是保留字。关键字在 Java 中有特定含义,不能用作标识符。
2 标识符
标识符由大小写字母、数字、下划线、$ 美元符号组成,但数字不能开头,且不能是关键字。行业规范要求标识符 “见名知意”,类名和接口名采用
“大驼峰命名法”(如UserEntity
、UserServiceImpl
),方法名、参数名和变量名采用
“小驼峰命名法”(如userName
、loginName
、age
),常量则所有单词大写并用_分隔。具体可参考《阿里巴巴 Java 开发手册》。
在 Java 全栈开发中的应用
规范的标识符命名在全栈开发团队协作中至关重要。清晰易懂的标识符能使代码更易读、维护,减少因命名混乱导致的错误。无论是前端的 JavaScript 变量命名,还是后端 Java 代码中的各种命名,都应遵循统一规范,提升代码整体质量。
五、数据类型
1 基本数据类型
Java 有 4 类 8
种基本数据类型:byte
、short
、int
、long
、float
、double
、char
、boolean
。
public static void main(String[] args) {
byte a = 127;
short b = 32767;
int c = 2147483647;
long d = 2147483648L;
float e = 3.14F;
double f = 3.14;
char g = ‘中’;
boolean h = false;//true
}
2 类型转换问题
基本数据类型间存在自动类型转换(如byte
转short
、int
等)和强制类型转换(需显式声明,如int i = (int) 3.14;
)。在全栈开发中,数据类型转换常见于数据库查询结果与 Java
对象间的映射,以及前端传递数据与后端接收数据类型的适配。例如,前端传递的字符串类型数字,后端需转换为合适的数值类型进行计算和存储。
在 Java 全栈开发中的应用
正确使用基本数据类型能优化内存使用和程序性能。在后端,数据库表字段类型与 Java 基本数据类型的准确映射确保数据的正确存储和读取;在前端与后端的数据交互中,数据类型的一致性和正确转换是保证系统稳定运行的关键。
六、循环控制
1 For 循环
for (int i = 0; i < 5; i++) { System.out.println(“循环次数:” + i); }
2 while 循环
int i = 1; while(i <= 5){ System.out.println(“刘亦菲!”); i ++; }
3 do - while 循环
int i = 1; do{ System.out.println(“杨幂”); i ++; }while (i <= 5);
4 for 增强循环
String[] arrs = {“张飞”,“张苞”,“关羽”,“关平”}; // 增强For循环 for (String name : arrs) { System.out.println(name); }
在 Java 全栈开发中的应用
循环控制在全栈开发中用于遍历数据集合,如数据库查询结果集、前端页面元素集合等。后端通过循环处理批量数据,如批量插入数据库记录;前端使用循环动态生成 HTML 元素。合理运用不同类型的循环,能提高代码的效率和可读性。
七、分支判断
1 双分支
int score = 80; if(score >= 60){ System.out.println(“及格”); } else{ System.out.println(“不及格”); }
2 IF 多分支
System.out.println(“请输入你的资产金额:”); Scanner scanner = new Scanner(System.in); long money = scanner.nextLong(); /根据资产,划分阶级/ if(money > 0 && money <= 100000){ System.out.println(“无产阶级!”); } else if(money > 100000 && money <= 500000){ System.out.println(“小康家庭!”); } else if(money > 500000 && money <= 2000000){ System.out.println(“地方豪绅!”); } else if(money > 2000000 && money <= 10000000){ System.out.println(“万恶的资本家!”); } else{ System.out.println(“慈善家!”); }
3 Switch 多分支
System.out.println(“请输入心仪的嘉宾类型:0-温柔体贴型 1-乐观开朗型 2-文静典雅型 3-豪放粗狂型”);
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
switch (i){
case 0:
System.out.println(“温柔体贴型”);
break;
case 1:
System.out.println(“乐观开朗型”);
break;
case 2:
System.out.println(“文静典雅型”);
break;
case 3:
System.out.println(“豪放粗狂型”);
break;
default:
System.out.println(“没有型!”);
break;
}
Switch 分支支持byte
、short
、int
、char
、String
、枚举类型。IF 多分支适合条件为范围的情况,Switch
分支适合某几个确定的选项值。
在 Java 全栈开发中的应用
分支判断用于根据不同条件执行不同逻辑。在后端,根据用户权限、业务规则等进行分支处理;在前端,根据用户操作(如点击不同按钮)触发不同功能。例如,在电商系统中,根据用户购物车金额判断是否满足包邮条件,执行不同的运费计算逻辑。
八、运算符
1 三元运算符
System.out.println(“请输入:0或1”);
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
// 三目运算符
String gender = (i == 0)? “女” : “男”;
System.out.println(“gender = " + gender);
语法:数据类型 变量 = (判断条件)? 默认值1 : 默认值2;
2 自增运算符
int i = 4;
System.out.println(i++);//4
System.out.println(i);//5
总结:独立使用时,++
、--
前后位置无所谓;非独立使用时,前置先自加再使用,后置先用再自加。
3 逻辑运算符
&&
(逻辑与)、||
(逻辑或)、!
(取反),两侧需为布尔表达式。&&
两端条件都为true
才是true
;||
有一端为true
就是true
;!
将true
变false
,false
变true
。
4 按位运算符
&
(按位与)、|
(按位或)、^
(按位异或),操作基于二进制位。&
同为 1 才为 1;|
只要有 1 就是 1;^
是 01 组合才是
1。
5 移位运算符
<<
(左移)、>>
(右移)、>>>
(无符号右移)。左移将二进制位向左移动,低位补 0;右移将二进制位向右移动,高位补符号位;无符号右移高位补
0。
在 Java 全栈开发中的应用
运算符在全栈开发中用于各种数据处理和逻辑判断。三元运算符常用于简化简单的条件赋值;自增运算符在循环计数、状态变更等场景频繁使用;逻辑运算符构建复杂的业务逻辑判断;按位和移位运算符在底层算法、数据加密等领域发挥作用。在企业工作中,熟练掌握运算符能优化代码性能,实现高效的数据处理。
九、企业工作小技巧
- 代码注释与文档 :在编写代码时,养成良好的注释习惯。详细的注释不仅帮助自己日后维护代码,更方便团队成员理解。同时,编写清晰的技术文档,记录项目架构、接口说明、数据库设计等关键信息,提升团队协作效率。
- 版本控制 :熟练使用版本控制系统,如 Git。定期提交代码,合理使用分支管理功能,避免代码冲突。在团队开发中,及时拉取最新代码,保持代码库同步。
- 代码复用 :注重代码的复用性,将常用功能封装成方法或类。这不仅减少代码量,还方便维护和升级。例如,将数据库连接、数据验证等操作封装成独立模块,在多个项目中复用。
- 性能优化意识 :从一开始就关注代码性能。合理选择数据结构和算法,避免不必要的资源浪费。在处理大数据量时,注意优化查询语句、减少内存占用等。
出现问题: 不要慌,找组长!记得请客吃饭,说谢谢!