JAVA基本程序设计_第1页
JAVA基本程序设计_第2页
JAVA基本程序设计_第3页
JAVA基本程序设计_第4页
JAVA基本程序设计_第5页
已阅读5页,还剩28页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVA基本程序设计(2)字符串操作·输入输出·流程控制·数组与方法Contents课程目录JAVA基本程序设计—核心知识模块概览01字符串操作与处理02输入与输出机制03程序逻辑控制04数组的创建与应用05方法定义与调用CHAPTER01字符串操作与处理掌握String类的核心方法,学会子串提取、拼接与比较Java·StringString类核心特性String类是Java中最常用的引用类型,其不可变性、常量池机制和两种创建方式是理解字符串操作的基础。掌握这些特性有助于编写高效、安全的字符串处理代码。字符串不可变性String对象一旦创建就不能修改,所有看似修改的操作(如拼接、替换)都会返回新的String对象,原对象保持不变。Immutable字符串常量池机制Java为相同的字符串字面量分配共享内存空间,避免重复创建对象,提升内存利用效率和程序性能。常量池两种创建方式差异字面量创建(如Strings="hello")存放在常量池中,而new关键字创建则会在堆内存中分配新空间,两者内存地址不同。LiteralvsNew长度获取方法通过length()方法可以获取字符串中字符的个数,这是字符串操作中最基础的方法之一。length()StringMethods子串提取:substring方法substring方法通过指定起始和结束索引来提取字符串的一部分,采用"左闭右开"区间设计,使子串长度计算直观简便。01endIndex),beginIndex包含、endIndex不包含,索引从0开始计数02单参数重位置截取到字符串末尾,适用于获取后缀部分03=endIndex−beginIndex,如substring(0,3)长度为304≤字符串长度,beginIndex≤endIndex,否则抛出异常Java代码示例String

str="HelloWorld";Stringsub1=str.substring(0,5);//"Hello"Stringsub2=str.substring(5);//"World"Stringsub3=str.substring(3,7);//"loWo"▸索引从0开始,左闭右开▸单参数截取到末尾STRINGOPERATIONS字符串拼接操作Java通过+运算符和concat方法实现字符串拼接,+运算符更为常用且支持与任意类型混合拼接,在输出语句中尤其方便,是构建动态文本内容的核心手段。+运算符拼接使用+号连接两个字符串,如str1+str2,拼接时完全按照给定次序连接,单词之间不会自动添加空格。str1+str2混合类型拼接当字符串与其他数据类型(如整数、浮点数)使用+号运算时,Java会自动将非字符串类型转换为字符串形式再进行拼接。AutoTypeCast输出语句应用拼接特性常用于System.out.println()输出语句中,如println("yournameis"+name),实现动态信息的格式化输出。println()concat方法String类提供的concat(Stringstr)方法专门用于字符串拼接,功能与+号类似但仅限于字符串类型之间的操作。concat()STRINGCOMPARISON字符串相等性检测字符串比较必须使用equals方法而非==运算符,因为==比较的是内存地址而非内容。正确理解这一区别是避免逻辑错误的关键,也是Java面试中的高频考点。equals比较内容str1.equals(str2)返回布尔值,比较两个字符串的字符序列是否完全相同,是判断内容相等的正确方式。该方法继承自Object类,String类对其进行了重写,确保逐字符比对。.equals()==比较地址双等号比较两个String对象在内存中的引用地址,即使内容相同用new创建也会返回false。只有指向常量池中同一对象时才会返回true,实际开发中应避免使用。==忽略大小写比较equalsIgnoreCase在忽略大小写下比较内容,'Hello'和'hello'会被判定为相等。适用于用户输入验证、文件名比对等不区分大小写的业务场景,提升代码健壮性。.equalsIgnoreCase()空串与null的区别空串''是长度为0的有效对象,null表示未指向任何对象;检查空串用length()==0或isEmpty(),检查null用==null。建议先判null再调用方法,避免NullPointerException。null≠""COREMETHODSString类常用方法汇总String类提供了丰富的字符串处理方法,涵盖查找、替换、大小写转换、空白处理等多个维度,熟练掌握这些方法是高效处理文本数据的基础。01查找方法:indexOf(char/String)返回指定字符或子串首次出现的索引位置,未找到返回-1;lastIndexOf从后向前查找最后出现的位置02替换方法:replace(oldChar,newChar)将所有指定字符替换为新字符;replaceAll支持正则表达式模式的批量替换03大小写转换:toUpperCase()将字符串转为全大写,toLowerCase()转为全小写,常用于不区分大小写的比较预处理04空白与边界处理:trim()去除首尾空白字符;startsWith(prefix)和endsWith(suffix)判断字符串是否以指定前缀或后缀开头/结尾String类核心方法速查表方法名功能说明示例length()获取字符串长度'hello'.length()→5charAt(index)获取指定位置字符'hello'.charAt(1)→'e'indexOf(str)查找子串首次出现位置'hello'.indexOf('ll')→2substring(a,b)提取子串(左闭右开)'hello'.substring(1,3)→'el'equals(str)比较字符串内容是否相等'abc'.equals('abc')→trueString类核心方法速查,便于快速查阅和复习CHAPTER02输入与输出机制掌握Scanner输入与多种输出方式,实现程序与用户的交互ConsoleOutput控制台输出的三种方式Java提供println(自动换行)、print(不换行)和printf(格式化输出)三种输出方法,其中printf通过格式说明符实现精确的格式控制,适用于需要对齐或保留特定小数位数的场景。println输出内容后自动添加换行符,每次调用输出独立一行,是最常用的输出方式。适合需要清晰分行展示结果的场景。System.out.println()print输出内容后不换行,后续输出紧接在当前内容之后,适合构建单行动态信息。常用于进度条或连续数据输出。System.out.print()printf使用格式说明符精确控制输出格式,%d表示整数、%f表示浮点数、%s表示字符串,支持多种数据类型的格式化输出。%d%f%s格式精度指定输出宽度和精度,%8.2f表示总宽8位保留2位小数,%.3f表示保留3位小数,实现精确的数字对齐显示。%8.2f%.3fJAVAI/OFUNDAMENTALSScanner输入操作详解Scanner类通过与System.in关联实现控制台输入,提供nextLine()、nextInt()等方法读取不同类型数据,是Java程序接收用户输入的标准方式。编程学习场景·控制台输入实践01使用三步曲importjava.util.Scanner导入类→newScanner(System.in)创建对象→调用相应方法读取数据02字符串读取nextLine()读取整行输入(包含空格),next()读取单个单词(以空白符分隔),根据需求选择合适方法03数值类型读取nextInt()读取整数,nextDouble()读取浮点数,nextLong()读取长整数,输入类型不匹配时抛出InputMismatchException04换行符陷阱nextInt()等方法不消耗行末换行符,后续调用nextLine()会读到空字符串,需额外调用一次nextLine()消耗换行符COMPREHENSIVEI/O输入输出综合示例通过完整的用户信息录入示例,展示Scanner输入与printf格式化输出的配合使用,体现交互式程序的基本编写模式和注意事项。01完整交互流程程序提示用户输入→Scanner读取数据→处理数据→printf格式化输出结果,形成完整的输入-处理-输出闭环。Input→Process→Output02多类型数据读取同一程序中可混合使用nextLine()读取字符串和nextInt()读取整数,需注意换行符消耗问题避免读取异常。nextLine()·nextInt()03格式化输出应用使用printf("%s,您好!您的年龄是%d岁",name,age)将变量嵌入输出文本,实现信息的动态组合展示。printf(%s,%d)04资源管理建议Scanner对象使用完毕后建议调用sc.close()关闭,释放系统资源,养成良好编程习惯。sc.close()CHAPTER03程序逻辑控制掌握if-else条件判断、switch分支选择和循环结构CONDITIONALSTATEMENTSif条件判断语句if语句通过布尔表达式控制代码执行路径,提供单分支、双分支和多分支三种形式应对不同复杂度的判断需求,是程序实现决策逻辑的核心结构。单分支if结构if(布尔表达式){语句},当表达式结果为true时执行大括号内代码,否则跳过该代码块继续执行后续语句if双分支if-else在if基础上添加else分支,表达式为true执行if块,为false执行else块,实现二选一的逻辑判断if-else多分支if-elseif-else通过多个elseif串联处理多个互斥条件,按顺序逐一判断,第一个成立的条件对应代码块被执行if-elseif-else大括号使用建议虽然单条语句可省略大括号,但实际开发中强烈建议始终添加,避免后续维护时引入逻辑错误{}JavaControlFlowswitch分支选择语句switch语句适用于对同一表达式的多个固定值进行分支判断,通过case匹配和break终止实现精确控制,相比多重if-else在特定场景下代码更清晰、执行更高效。基本语法结构switch(表达式){case值1:语句1;break;case值2:语句2;break;...default:默认语句;break;},表达式结果与case值逐一比较匹配。switch()break关键字作用每个case末尾的break用于终止switch执行,缺少break会导致"穿透"——程序继续执行后续case语句,直到遇到break或switch结束。穿透default分支功能处理所有case都不匹配的情况,相当于if-else链中的最终else分支。位置不固定但通常放在switch结构最后。default支持的数据类型switch表达式支持byte、short、int、char及枚举类型,Java7起也支持String类型,但不支持long、float、double。Java7ConditionBranchingif与switch对比选型switch擅长单变量多值等值判断,代码结构清晰;if擅长范围判断和复杂逻辑组合。正确选型提升代码可读性和维护性。switch适用场景等值匹配对同一变量的多个固定值进行等值判断,如菜单选项、星期几、状态码、季节等离散值场景。分支数量较多(≥3个)时,switch的代码结构比多重if-else更清晰直观。编译器可对switch进行跳转表优化,在大量分支情况下执行效率通常优于if-else链式判断,适合性能敏感的场景。if适用场景逻辑灵活需要进行范围判断(如成绩≥90)、多变量组合条件(如age>18&&gender=='M')或布尔表达式判断时,if-else的灵活性远超switch。条件类型不统一或涉及复杂逻辑运算时,if可以处理任何布尔条件,支持短路求值和嵌套组合,适应多变的业务需求。组合使用策略嵌套互补外层用switch做大类分支,内层用if做细节判断,两者嵌套使用可应对复杂业务逻辑场景,兼顾结构清晰与表达灵活。例如:switch处理用户角色类型,每个case内用if判断该角色的权限等级和操作范围,实现层次分明的条件控制。LoopControlfor循环结构详解for循环通过初始化、条件判断和迭代三步控制重复执行,是Java中最灵活、最常用的循环结构,适用于已知循环次数的场景,也是数组遍历的首选方式。01标准语法格式for(初始化;循环条件;迭代表达式){循环体},三部分用分号分隔,初始化只执行一次,条件和迭代每轮执行02执行流程解析初始化→判断条件→(条件为true)执行循环体→执行迭代表达式→再次判断条件→…直到条件为false退出循环03常见使用模式计数循环for(inti=1;i<=n;i++)、数组遍历for(inti=0;i<arr.length;i++)、倒序循环for(inti=n;i>=1;i--)04特殊用法三部分均可省略但分号不能省;for(;;)构成无限循环;可在初始化部分同时声明多个同类型变量JAVALOOPCONTROLwhile与do-while循环while先判断后执行(可能0次),do-while先执行后判断(至少1次),两者适用于循环次数不确定的场景,与for循环共同构成Java完整的循环控制体系。while循环while(布尔表达式){循环体},先判断条件后执行循环体,条件一开始就不满足时循环体完全不执行,适合不确定次数的循环。可能0次do-while循环do{循环体}while(布尔表达式);,先执行循环体再判断条件,保证循环体至少执行一次,适合需要先执行再判断的场景。至少1次典型应用场景while常用于读取数据直到文件末尾、用户输入验证等;do-while常用于菜单系统(先显示菜单再判断是否继续)。文件读取·菜单系统三种循环选型指南已知次数选for,不确定次数且可能不执行选while,不确定次数但至少要执行一次选do-while。for·while·doLoopControl循环控制:break与continuebreak用于提前终止整个循环,continue用于跳过当前一轮进入下一轮迭代。两者配合条件判断使用,能显著提升循环的灵活性和执行效率。break终止循环遇到break立即退出当前循环体,继续执行循环后的代码,常用于搜索场景——找到目标后无需继续遍历终止continue跳过本轮遇到continue跳过当前迭代的剩余代码,直接进入下一轮循环判断,常用于过滤——跳过不符合条件的数据跳过关键区别对比break是"彻底退出循环",后续迭代都不再执行;continue是"跳过这一轮",循环本身仍继续运行退出vs跳过标签控制(进阶)Java支持带标签的break/continue跳出多层嵌套循环,如breakouter;,但应谨慎使用以避免代码难以理解嵌套跳出CHAPTER04数组的创建与应用掌握一维数组和二维数组的声明、初始化与遍历操作ARRAYFUNDAMENTALS一维数组声明与初始化数组是存储同类型数据的有序集合,通过索引(从0开始)访问元素。Java提供了动态创建和静态初始化两种方式,理解默认初始化值有助于避免空指针类错误。声明方式int[]arrintarr[]推荐写法int[]arr(类型在前,语义清晰),也可写成intarr[](C风格),声明仅创建引用变量,不分配数组空间动态创建newint[]arr=newint[5]使用new关键字指定长度,如int[]arr=newint[5]创建长度为5的整型数组,各元素默认初始化为0静态初始化int[]arr={1,2,3,4,5}newint[]{1,2,3}声明时直接赋值,如int[]arr={1,2,3,4,5}或newint[]{1,2,3},编译器自动推断数组长度默认初始值0falsenull数值类型为0(long为0L,float为0.0f),boolean为false,引用类型为null,了解默认值有助于排查问题ARRAYTRAVERSAL数组遍历方式Java提供普通for循环和增强for-each循环两种数组遍历方式,前者灵活可控(可获取索引、修改元素),后者简洁优雅(适合纯读取场景),应根据需求选择合适方式。01普通for循环遍历—for(inti=0;i<arr.length;i++)通过索引逐个访问,可获取位置信息、修改元素值、控制遍历方向和步长02增强for-each循环—for(intx:arr)语法简洁无需管理索引,适合只需顺序读取元素值的场景,代码可读性更高03两种方式选择策略纯读取优先用for-each(简洁安全),需要索引、修改元素、倒序或跳跃遍历时用普通for04数组越界防范有效索引范围0到arr.length-1,访问越界会抛出ArrayIndexOutOfBoundsException编程课堂教学场景MULTIDIMENSIONALARRAY二维数组详解二维数组是"数组的数组",用于表示矩阵、表格等二维结构数据。Java中每行长度可以不同,遍历需要嵌套循环,是处理多维数据的基础结构。概念理解二维数组本质是一维数组的扩展,其中每个元素又是一个一维数组。这种嵌套结构可以类比为表格,具有行和列两个维度,是存储结构化数据的基础。ROW×COLUMN创建与初始化int[][]matrix=newint[3][4]使用int[][]matrix=newint[3][4]创建3行4列矩阵。支持静态初始化,嵌套大括号语法直观,且每行长度可以灵活不同。int[3][4]嵌套循环遍历arr[i][j]外层for循环控制行索引i,内层for循环控制列索引j。通过arr[i][j]语法访问每个具体元素,实现完整的矩阵遍历。arr[i][j]典型应用场景广泛应用于矩阵运算、棋盘类游戏格子存储、表格数据表示、图像像素矩阵处理,以及动态规划中的状态表设计等核心领域。MATRIX·DP·GRIDJAVA·ARRAYSArrays工具类常用方法java.util.Arrays工具类封装了排序、查找、填充、复制等常用数组操作,避免手动实现基础算法,是提升数组操作效率和代码质量的重要工具。Arrays工具类方法速查方法功能示例sort()数组升序排序Arrays.sort(arr)toString()数组转字符串Arrays.toString(arr)equals()比较数组内容Arrays.equals(a,b)fill()填充指定值Arrays.fill(arr,0)copyOf()复制并调整长度Arrays.copyOf(arr,10)binarySearch()二分查找元素Arrays.binarySearch(arr,key)Arrays工具类提供数组排序、转换、填充、复制和查找等便捷操作CHAPTER05方法定义与调用掌握方法的声明、参数传递、返回值与方法重载机制JavaFundamentals方法的定义与基本调用方法是封装特定功能的代码单元,通过修饰符、返回类型、方法名和参数列表完整定义。合理使用方法是实现代码模块化、提高复用性和可维护性的核心手段。01完整定义格式修饰符返回值类型方法名(参数类型参数名){方法体;return返回值;}publicstaticintadd(inta,intb){returna+b;}02返回值类型方法执行后返回的数据类型,可以是int、double等基本类型或对象类型;不返回任何值时使用void关键字。void—无返回值int—返回整数03方法调用方式通过「方法名(实际参数)」调用;void方法直接调用无需接收返回值。intresult=add(3,5);printHello();04命名规范方法名使用小驼峰命名法(首字母小写,后续单词首字母大写),名称应清晰表达方法功能。calculateAreagetUserName·findMaxParameterPassing参数传递机制:值传递Java方法参数采用值传递方式:基本类型传递值的副本(修改不影响原变量),引用类型传递引用的副本(可修改对象内容但不能改变原引用指向),理解这一机制是避免数据错误的关键。01基本类型值传递传递的是实际参数值的副本,方法内对形参的任何修改都不会影响调用处的原始变量,两者是独立的内存空间。例如调用swap(a,b)后原变量值保持不变。安全隔离,无副作用02引用类型值传递传递的是对象引用(内存地址)的副本,方法内可以通过该引用修改对象属性,但不能让原引用指向新的对象。这是初学者最容易混淆的概念。可修改对象,不可换引用03形参与实参关系形参是方法定义时的变量名,实参是调用时传入的实际值;形参只在方法执行期间存在,方法结束后销毁。实参与形参之间是单向的值拷贝关系。单向传递,生命周期独立04可变参数(进阶)方法定义中使用"类型...参数名"(如int...nums)可接收不定数量的参数,编译器自动将其转为数组处理。调用时可传入0个、1个或多个参数,灵活便捷。灵活传参,自动转数组JAVACORE·OVERLOAD方法重载(Overload)方法重载允许在同一类中定义多个同名方法,通过参数列表的差异(个数、类型或顺序)来区分,使同一方法名能够灵活处理不同类型的输入数据。重载定义规则同一类中多个方法名相同但参数列表不同(参数个数、类型或顺序至少一项不同),编译器根据调用时的实参自动匹配对应方法。参数列表返回值不是区分依据仅返回值类型不同而参数列表相同不构成重载,会导致编译错误;重载的核心判断标准是参数列表的差异。编译错误典型应用实例System.out.println()有多个重载版本,分别接收int、double、String、boolean等类型参数,同一方法名适配不同数据类型。println()重载的设计意义让功能相似但参数不同的操作使用统一的方法名,提高API的直观性和易用性,如Math.max()支持int、double等多种类型。Math.max()RECURSION递归方法递归通过方法调用自身解决具有自相似结构的问题,必须包含基线条件和递归步骤两个要素。基线条件与递归步骤基线条件定义递归何时终止,递归步骤将问题分解为更小的同类子问题并调用自身求解。两者缺一不可,共同保证递归的正确性和完备性。BaseCase+RecursiveStep阶乘经典示例factorial(n)中基线条件为n≤1返回1,递归步骤为n×factorial(n-1),结构清晰完整。这是理解递归原理最直观的入门案例。factorial(n)whenn≤1栈溢出风险每次方法调用在栈上分配空间,递归深度过大会触发StackOverflowError,需控制深度或改用迭代。实际应用中务必评估最大递归深度。StackOverflowError性能优化方向普通递归可能重复计算(如斐波那契),可通过记忆化缓存已算结果,或改用动态规划与迭代提升效率。记忆化技术能显著降低时间复杂度。MemoizationOptimizationCOMPREHENSIVECASESTUDY综合案例:学生成绩管理系统通过学生成绩管理系统的完整实现,综合运用输入输出、数组存储、循环遍历、条件判断和方法封装等核心知识,展示Java基本程序设计的实际应用模式。INPUT输入模块使用Scanner读取学生人数和科目数,用二维数组double[][]scores存储所有学生的各科成绩,实现数据的结构化存储。Scanner

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论