目录

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 编码。 https://i-blog.csdnimg.cn/direct/e2cba4c9af6c4862adb3e2fae7f37ba7.png 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 个关键字,其中constgoto是保留字。关键字在 Java 中有特定含义,不能用作标识符。 https://i-blog.csdnimg.cn/direct/5fe0b150f42e44ff96fe678680be1cdb.png

2 标识符

标识符由大小写字母、数字、下划线、$ 美元符号组成,但数字不能开头,且不能是关键字。行业规范要求标识符 “见名知意”,类名和接口名采用 “大驼峰命名法”(如UserEntityUserServiceImpl),方法名、参数名和变量名采用 “小驼峰命名法”(如userNameloginNameage),常量则所有单词大写并用_分隔。具体可参考《阿里巴巴 Java 开发手册》。

在 Java 全栈开发中的应用

规范的标识符命名在全栈开发团队协作中至关重要。清晰易懂的标识符能使代码更易读、维护,减少因命名混乱导致的错误。无论是前端的 JavaScript 变量命名,还是后端 Java 代码中的各种命名,都应遵循统一规范,提升代码整体质量。

五、数据类型

1 基本数据类型

Java 有 4 类 8 种基本数据类型:byteshortintlongfloatdoublecharbooleanhttps://i-blog.csdnimg.cn/direct/23c55a6d661140018a4eff1b9b4f01be.png 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 类型转换问题

基本数据类型间存在自动类型转换(如byteshortint等)和强制类型转换(需显式声明,如int i = (int) 3.14;)。在全栈开发中,数据类型转换常见于数据库查询结果与 Java 对象间的映射,以及前端传递数据与后端接收数据类型的适配。例如,前端传递的字符串类型数字,后端需转换为合适的数值类型进行计算和存储。 https://i-blog.csdnimg.cn/direct/282ba9bfe4fa474093e500636c087a51.png

在 Java 全栈开发中的应用

正确使用基本数据类型能优化内存使用和程序性能。在后端,数据库表字段类型与 Java 基本数据类型的准确映射确保数据的正确存储和读取;在前端与后端的数据交互中,数据类型的一致性和正确转换是保证系统稳定运行的关键。

六、循环控制

https://i-blog.csdnimg.cn/direct/9f59aa0cbe4e4359ace5d2d47cbd6242.png

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 分支支持byteshortintcharString、枚举类型。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!truefalsefalsetrue

4 按位运算符

&(按位与)、|(按位或)、^(按位异或),操作基于二进制位。&同为 1 才为 1;|只要有 1 就是 1;^是 01 组合才是 1。

5 移位运算符

<<(左移)、>>(右移)、>>>(无符号右移)。左移将二进制位向左移动,低位补 0;右移将二进制位向右移动,高位补符号位;无符号右移高位补 0。

在 Java 全栈开发中的应用

运算符在全栈开发中用于各种数据处理和逻辑判断。三元运算符常用于简化简单的条件赋值;自增运算符在循环计数、状态变更等场景频繁使用;逻辑运算符构建复杂的业务逻辑判断;按位和移位运算符在底层算法、数据加密等领域发挥作用。在企业工作中,熟练掌握运算符能优化代码性能,实现高效的数据处理。

九、企业工作小技巧

  1. 代码注释与文档 :在编写代码时,养成良好的注释习惯。详细的注释不仅帮助自己日后维护代码,更方便团队成员理解。同时,编写清晰的技术文档,记录项目架构、接口说明、数据库设计等关键信息,提升团队协作效率。
  2. 版本控制 :熟练使用版本控制系统,如 Git。定期提交代码,合理使用分支管理功能,避免代码冲突。在团队开发中,及时拉取最新代码,保持代码库同步。
  3. 代码复用 :注重代码的复用性,将常用功能封装成方法或类。这不仅减少代码量,还方便维护和升级。例如,将数据库连接、数据验证等操作封装成独立模块,在多个项目中复用。
  4. 性能优化意识 :从一开始就关注代码性能。合理选择数据结构和算法,避免不必要的资源浪费。在处理大数据量时,注意优化查询语句、减少内存占用等。
  5. 出现问题: 不要慌,找组长!记得请客吃饭,说谢谢!