还剩33页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
程序设计概述Java欢迎来到Java程序设计概述课程!在这门课程中,我们将深入探讨Java编程语言的基础知识、核心概念和实际应用无论您是编程新手还是有经验的开发者,本课程都将为您提供系统化的Java知识体系Java作为全球最流行的编程语言之一,被广泛应用于企业级应用、移动开发、大数据处理等多个领域通过本课程的学习,您将掌握Java编程的基本技能,为未来的软件开发工作奠定坚实基础课程目标掌握基础语法1Java通过系统学习,您将熟悉Java的数据类型、变量、运算符、控制结构等基本语法元素,能够编写简单的Java程序解决实际问题理解面向对象编程2深入学习类、对象、继承、多态等面向对象编程核心概念,掌握用Java实现面向对象设计的能力培养实际开发能力3通过大量实例和项目练习,培养实际编程技能,了解常见的Java应用场景和解决方案,为今后的职业发展做好准备建立编程思维4培养结构化、模块化的编程思维方式,提高分析问题和解决问题的能力,形成良好的编程习惯语言简介Java全球流行广泛应用开源生态Java是世界上最流行的编程语言之一,拥Java被广泛应用于各种领域,包括企业级Java拥有丰富的开源框架和库,如Spring、有庞大的开发者社区和丰富的技术资源应用开发、移动应用开发(Android)、Hibernate等,这些工具大大提高了开发根据TIOBE指数,Java常年位居编程语言大数据处理(Hadoop)、Web应用服务效率,降低了开发成本,促进了Java生态排行榜前三位器等多个方面系统的繁荣发展的发展历史Java年橡树计划11991詹姆斯·高斯林(James Gosling)及其团队在Sun公司启动了名为橡树(Oak)的项目,旨在开发一种适用于各种电子设备的程序语言年正式发布21995Java橡树项目最终演变为Java语言,并于1995年正式发布Java的口号一次编写,到处运行(Write Once,Run Anywhere)体现了其跨平台特性年收购32010OracleOracle公司收购Sun Microsystems,成为Java技术的新东家,继续推动Java技术的发展与更新年至今现代42014JavaJava8引入了lambda表达式等现代编程特性,之后的版本(Java9-17)进一步增强了语言功能,提高了性能,简化了开发过程平台的组成Java应用程序Java1用户开发的各类Java程序Java API2标准类库与框架虚拟机()Java JVM3字节码执行引擎操作系统4Windows,Linux,macOS等硬件5计算机物理设备Java平台是一个完整的软件环境,由多个层次组成最底层是计算机硬件和操作系统,提供基础运行环境Java虚拟机(JVM)是核心组件,负责执行Java字节码JavaAPI提供了丰富的类库,包括数据结构、网络、GUI等功能最上层是用户开发的Java应用程序,它们共同构成了Java的生态系统语言的特点Java跨平台性安全性面向对象Java程序编译成平台无关Java提供了多层安全机制,Java是一种纯面向对象的的字节码,可以在任何安包括类型安全检查、数组语言,所有代码都封装在装了JVM的环境中运行,边界检查、自动内存管理类中,通过对象进行操作,实现一次编写,到处运行等,有效防止常见的程序支持封装、继承和多态等的理念错误和安全漏洞面向对象特性网络功能Java内置了强大的网络编程功能,简化了网络应用的开发过程,使分布式计算和互联网应用的实现变得更加容易虚拟机()Java JVM字节码执行自动内存管理JVM是Java平台的核心,负责执JVM包含垃圾回收器(Garbage行Java字节码它将字节码指令Collector),自动管理内存分配翻译成特定计算机的机器语言,和回收,开发者无需手动释放内实现了Java的平台独立性无论存这大大减少了内存泄漏和悬在何种操作系统上,只要安装了空指针等常见问题,提高了程序相应的JVM,就能运行相同的的稳定性Java程序即时编译现代JVM采用即时编译(JIT)技术,能够在运行时将热点代码编译成本地机器码,显著提高程序执行效率这种动态优化策略使Java程序的性能接近传统编译语言运行时环境()Java JRE类库JVMJava虚拟机是JRE的核心组件,负责加载、JRE包含Java标准类库,提供基本的编程功验证和执行Java字节码,提供跨平台运行环能,如数据结构、输入输出、网络通信等12境部署技术支持文件43包含Java WebStart和Java插件等技术,支包括属性设置、国际化资源文件等,为Java持Java应用程序的网络分发和部署应用提供运行支持Java运行时环境(JRE)是运行Java程序所需的最小环境,包含了JVM和标准类库如果您只需要运行Java程序而不进行开发,只需安装JRE即可JRE面向最终用户,而不是开发者开发工具包()Java JDK开发工具1编译器、调试器等JRE2运行时环境类库3完整API支持文档4开发参考资料Java开发工具包(JDK)是面向开发者的完整工具集,包含了开发、调试和监控Java应用程序所需的所有组件JDK包含JRE的所有内容,并增加了开发工具,如javac编译器、javadoc文档生成工具、jdb调试器等JDK还提供了更丰富的API和类库,支持更多高级功能的开发开发者需要安装JDK来编写和编译Java程序,而最终用户只需要JRE就能运行这些程序第一个程序Java HelloWorld代码编译与运行创建一个名为HelloWorld.java的文件,编写以下代码在命令行中执行以下命令编译程序public classHelloWorld{javac HelloWorld.javapublic staticvoid mainString[]args{System.out.printlnHello,World!;编译成功后,执行以下命令运行程序}}java HelloWorld如果一切正常,控制台将输出Hello,World!程序的基本结构Java包声明位于源文件的首行,指定类所属的包例如package com.example.myapp;导入语句用于引入其他包中的类,位于包声明之后例如import java.util.Scanner;类定义每个Java程序至少包含一个类定义,类名必须与文件名相同(对于public类)例如public classMyProgram{...}主方法程序的入口点,Java应用程序必须包含一个main方法例如public staticvoid mainString[]args{...}语句和表达式实际的程序逻辑,包含变量声明、赋值、调用方法等操作,每个语句以分号结束的基本语法规则Java大小写敏感1Java是大小写敏感的语言,标识符Test和test被视为不同的名称所有的关键字都是小写的,类名通常以大写字母开头,方法名和变量名通常以小写字母开头类名规则2类名应当是名词,采用大驼峰命名法(首字母大写),如Student、UserAccount等公共类的名称必须与文件名完全相同,包括大小写方法名规则3方法名应当是动词,采用小驼峰命名法(首字母小写),如getResult、calculateTotal等方法名应当清晰地表达方法的功能语句终止4每个语句必须以分号结束;大括号用于定义代码块,如类、方法、循环等;Java使用//进行单行注释,使用/**/进行多行注释数据类型概述Java包装类引用数据类型每种基本类型都有对应的包装类包括类、接口和数组引用类型存(如Integer对应int),允许在需基本数据类型储对象的引用(内存地址),而不要对象的场合使用基本类型值自类型转换是对象本身String是最常用的引动装箱和拆箱简化了基本类型和包Java提供8种基本数据类型byte、Java支持基本类型之间的自动转用类型之一装类之间的转换short、int、long、float、换(隐式转换)和强制转换(显式double、char和boolean这些转换)从小范围到大范围的转换类型直接存储值,而不是引用是自动的,而从大范围到小范围的转换需要显式转换2314基本数据类型类型大小取值范围默认值byte8位-128到1270short16位-32,768到32,7670int32位-2^31到2^31-10long64位-2^63到2^63-10Lfloat32位单精度浮点数
0.0fdouble64位双精度浮点数
0.0dchar16位Unicode字符\u0000boolean1位true或false false基本数据类型是Java语言中最简单的数据类型,它们不是对象,而是直接存储在栈内存中的值Java有8种基本数据类型,分别用于不同的场景整数类型(byte、short、int、long)用于表示不同范围的整数;浮点类型(float、double)用于表示小数;char用于表示单个字符;boolean用于表示逻辑值引用数据类型类()接口()Class Interface类是Java中最基本的引用类型,接口定义了一组方法签名,但不用于创建对象Java标准库提供提供实现它们用于实现多态性了大量的类,如String、和代码解耦实现接口的类必须ArrayList等开发者也可以创建提供接口中所有方法的具体实现自定义类来表示特定的对象和行常见的接口包括List、Map等集为类的实例存储在堆内存中,合接口变量持有对这些实例的引用数组()Array数组是一种特殊的引用类型,用于存储同类型元素的集合Java中的数组是对象,具有固定长度,可以存储基本类型或引用类型的值数组使用索引访问元素,索引从0开始变量和常量变量声明与初始化变量的作用域常量变量是存储数据的容器,在Java中使用前变量的作用域决定了变量在程序中的可见常量是不可修改的变量,使用final关键字必须先声明变量声明指定变量类型和名性声明常量名通常全部大写,多个单词用称,可选择性地进行初始化例如下划线分隔例如•局部变量在方法或代码块内定义,仅在定义它的方法或代码块内可访问final doublePI=
3.14159;int age=25;//声明并初始化final intMAX_USERS=100;•实例变量在类中定义,但在方法外,整型变量每个对象都有自己的副本String name;//仅声明字符串变量•静态变量使用static关键字声明,属于类而非对象,所有对象共享一个副name=张三;//后续初始化本运算符JavaJava提供了丰富的运算符,用于执行各种操作算术运算符(+,-,*,/,%)用于基本的数学计算;比较运算符(==,!=,,,=,=)用于比较两个值;逻辑运算符(,||,!)用于组合布尔表达式;赋值运算符(=,+=,-=,*=,/=,%=)用于给变量赋值此外,Java还有位运算符(,|,^,~,,,)用于操作二进制位;条件运算符(:)提供简洁的条件判断;instanceof运算符用于检查对象是否是特定类型的实例运算符的优先级决定了复杂表达式中操作的执行顺序表达式和语句表达式语句表达式是一组变量、运算符和方法调用,它们共同计算并产生一语句是Java程序的基本执行单位,以分号结束语句可以是赋值、个值表达式可以非常简单,如单个变量或常量,也可以非常复方法调用、创建对象、控制流程等语句执行某种操作,但不一杂,包含多个运算符和嵌套的方法调用例如定产生值例如x+y*2int sum=a+b;//赋值语句isValidcount0System.out.printlnHello;//方法调用语句obj.method.getValue+100if x0{...}//条件语句for int i=0;i10;i++{...}//循环语句控制流程语句if-else简单的语句if最基本的条件判断形式,只在条件为true时执行代码块if score=60{System.out.println及格;}语句if-else提供两种执行路径,根据条件选择一条路径执行if score=60{System.out.println及格;}else{System.out.println不及格;}语句if-else if-else提供多个条件和执行路径,依次检查条件直到找到一个为true的条件if score=90{System.out.println优秀;}else ifscore=75{System.out.println良好;}else ifscore=60{System.out.println及格;}else{System.out.println不及格;}控制流程语句switch基本语法注意事项示例switch语句根据表达式的值选择一个case分支执行表达式类型•case标签必须是常量或字面量,不能是变量或表达式可以是byte、short、int、char、枚举类型、String(Java7及•break语句用于跳出switch块,如果省略,执行会穿透到switch day{以上)case1:下一个casecase2:•default分支是可选的,当没有case匹配时执行case3:switch表达式{•多个case可以共享相同的代码块,形成case穿透case4:case值1:case5:语句块1;System.out.println工作日;break;break;case值2:case6:语句块2;case7:break;System.out.println周末;default:break;默认语句块;default:}System.out.println无效日期;}循环结构循环for初始化在循环开始前执行一次,通常用于初始化循环计数器例如int i=0可以声明多个变量,用逗号分隔条件测试在每次循环迭代前测试条件,如果条件为true,执行循环体;如果为false,退出循环例如i10循环体满足条件时执行的代码块,包含循环的主要逻辑可以使用break提前退出循环,或使用continue跳过当前迭代迭代表达式在每次循环迭代后执行,通常用于更新循环计数器例如i++可以包含多个表达式,用逗号分隔for循环语法示例for inti=0;i10;i++{System.out.println第+i+次循环;}循环结构和循环while do-while循环循环while do-whilewhile循环首先检查条件,如果条件为true,执行循环体;之后再do-while循环先执行循环体,然后检查条件;如果条件为true,次检查条件,重复这个过程直到条件为false继续下一次迭代这保证循环体至少执行一次inti=0;int j=0;while i5{do{System.out.println计数+i;System.out.println计数+j;i++;j++;}}while j5;while循环适用于不确定循环次数,需要根据条件动态决定是否继do-while循环适用于循环体至少需要执行一次的场景,如用户输续循环的场景入验证,菜单驱动程序等数组的定义和使用创建数组访问数组元素遍历数组在Java中,可以通过多种方式使用索引访问数组元素,索引可以使用多种方式遍历数组创建数组从0开始//使用for循环//创建固定大小的数组//访问数组元素for inti=0;i int[]numbers=new intfirstScore=scores.length;i++{int
[5];scores
[0];//获取第一个元素
(95)System.out.printlnsc//创建并初始化数组ores[i];int[]scores={95,//修改数组元素}85,75,90,88};scores
[2]=80;//将第三个元素改为80//使用增强for循环(推//先声明后创建荐)String[]names;for intscore:注意使用的索引必须在有效names=new String
[3];scores{范围内,否则会抛出ArrayIndexOutOfBoundsExSystem.out.printlnscception异常ore;}多维数组二维数组访问二维数组元素二维数组是数组的数组,可以看作一个表格,有行和列在Java中,可以使用两个索引访问二维数组的元素,第一个索引表示行,第二个索引表示列通过以下方式创建二维数组//声明和创建//访问元素int[][]matrix=new int
[3]
[4];//3行4列int value=points
[1]
[2];//获取第2行第3列的元素
(6)//创建并初始化//修改元素int[][]points={points
[0]
[1]=10;//将第1行第2列的元素改为10{1,2,3},{4,5,6},{7,8,9}};遍历二维数组使用嵌套循环遍历二维数组//使用嵌套for循环for inti=0;ipoints.length;i++{for intj=0;jpoints[i].length;j++{System.out.printpoints[i][j]+;}System.out.println;}//使用增强for循环for int[]row:points{for intvalue:row{System.out.printvalue+;}System.out.println;}面向对象编程概念类与对象封装类是对象的模板,定义了对象的属性和行封装是将数据和操作数据的方法绑定在一为对象是类的实例,代表具体的实体起,对外部隐藏实现细节,只暴露必要的12类似于蓝图与建筑的关系,类描述了对象接口这样可以保护对象的内部状态,提的结构,而对象则是按照这个结构创建的高代码的安全性和可维护性具体实例多态继承多态允许不同类的对象对同一消息做出不继承允许一个类(子类)基于另一个类43同的响应通过方法重写和方法重载实现,(父类)创建,继承父类的属性和方法提高了代码的灵活性和扩展性,是面向对这促进了代码重用,建立了类之间的层次象设计的核心原则之一关系,体现了是一种的关系类和对象类的定义对象的创建和使用类是Java程序的基本构建块,包含属性(字段)和方法类定义了对象将具有的状态和行为对象是类的实例,使用new关键字创建创建后,可以访问对象的方法和属性(通过getter和setter)public classPerson{//创建对象//字段(属性)Person person1=new Person张三,25;private Stringname;Person person2=new Person李四,30;private int age;//调用方法//构造方法person
1.sayHello;//输出你好,我是张三public PersonStringname,intage{System.out.printlnperson
2.getName+今年+this.name=name;person
2.getAge+岁;//输出李四今年30岁this.age=age;}//修改属性person
1.setAge26;//方法System.out.printlnperson
1.getName+现在+public voidsayHello{person
1.getAge+岁;//输出张三现在26岁System.out.println你好,我是+name;}//getter和setter方法public StringgetName{return name;}public voidsetNameString name{this.name=name;}public intgetAge{return age;}public voidsetAgeint age{this.age=age;}}方法的定义和调用方法定义方法重载12方法是类中定义的执行特定任务的代码块方法定义包括访问修方法重载允许在同一个类中定义多个同名但参数列表不同的方法饰符、返回类型、方法名、参数列表和方法体重载方法必须有不同的参数类型、数量或顺序//方法定义语法//方法重载示例访问修饰符返回类型方法名参数类型参数名,...{public int calculateint a,int b{//方法体return a+b;return返回值;//如果返回类型不是void}}public doublecalculatedouble a,double b{//示例return a*b;public intaddint a,int b{}return a+b;}public intcalculateint a,int b,intc{return a+b+c;}方法调用3调用方法需要使用对象引用(对于实例方法)或类名(对于静态方法),后跟方法名和实参列表//创建对象Calculator calc=new Calculator;//调用实例方法int sum=calc.add5,3;//sum=8//调用静态方法double squareRoot=Math.sqrt16;//squareRoot=
4.0构造方法构造方法特点构造方法是一种特殊的方法,用于创建对象并初始化对象的状态构造方法与类同名,没有返回类型(甚至不是void)每当创建新对象时,都会调用构造方法默认构造方法如果没有显式定义构造方法,Java会提供一个默认构造方法(无参构造方法)一旦定义了任何构造方法,默认构造方法就不会自动生成如果此时仍需要无参构造方法,必须显式定义构造方法重载可以定义多个构造方法,提供不同的初始化方式这称为构造方法重载,规则与普通方法重载相同通常会提供多个构造方法以增加类的使用灵活性关键字this在构造方法中,this关键字表示当前对象可以使用this.fieldName访问实例变量,使用this调用其他构造方法(必须是第一条语句)通过构造方法链,可以减少代码重复封装和访问修饰符封装原则访问修饰符封装是面向对象编程的基本原则之一,指的是将数据(属性)和行Java提供了四种访问修饰符,用于控制类、变量、方法和构造方法为(方法)包装在一个单元中,并对外部隐藏实现细节通过封装,的访问级别我们可以控制对对象数据的访问,只允许通过定义的接口(方法)•private仅在声明它的类内部可见进行交互,提高代码的安全性和可维护性•默认(无修饰符)在同一包内可见•protected在同一包内和所有子类中可见•public对所有类可见和方法getter setter实现封装的常用方式是将类的属性设为私有,然后提供公共的getter和setter方法来访问和修改这些属性这样可以在方法中添加验证逻辑,确保数据的有效性和一致性private intage;public intgetAge{return age;}public voidsetAgeint age{if age=0age=120{this.age=age;}else{throw newIllegalArgumentException年龄无效;}}继承继承概念继承是面向对象编程的核心特性之一,允许一个类(子类/派生类)获取另一个类(父类/基类)的属性和方法继承建立了类之间的层次结构,表示is-a(是一种)关系,促进代码重用和多态性的实现继承语法在Java中,使用extends关键字实现继承public classAnimal{protected Stringname;public voideat{System.out.printlnname+正在进食;}}public classDog extendsAnimal{public DogStringname{this.name=name;}public voidbark{System.out.printlnname+汪汪叫;}}方法重写子类可以重写(覆盖)父类的方法,提供自己的实现使用@Override注解标记重写方法@Overridepublic voideat{System.out.printlnname+在啃骨头;}关键字supersuper关键字用于引用父类的成员(字段和方法)可以调用父类的构造方法、访问父类的字段、调用父类的方法多态多态概念向上转型多态是面向对象编程的重要特性,允许使用父类类型引用子类对象,且能根据实际对象类型自动调用适当的方法多态增强了代码的灵活性和可扩展性,将子类对象赋值给父类引用,是多态的基础使得程序能够处理不同类型的对象,而无需针对每种类型编写特定代码Animal animal=new Dog旺财;//Dog是Animal的子类animal.eat;//调用Dog类的eat方法(如果被重写)此时,animal引用只能访问Animal类中定义的方法,即使引用指向的是Dog对象方法调用决策向下转型在多态情况下,调用方法时将父类引用转换回子类类型,需要显式转换,并使用instanceof运算符进行类型检查•对于实例方法,Java根据实际对象的类型决定调用哪个版本的方法if animalinstanceof Dog{•对于静态方法和字段,Java根据引用的类型决定Dog dog=Doganimal;//向下转型dog.bark;//调用Dog特有的方法}抽象类和接口抽象类接口抽象类是一种不能被实例化、只能被继承的类它可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)接口是一种完全抽象的类型,只包含抽象方法和常量接口用于定义对象能做什么,而不关心具体如何做一个类可以抽象类用于表示不完整的类,为子类提供公共的基础结构实现多个接口,从而实现多重继承的效果Java8及以后的版本支持在接口中定义默认方法和静态方法public abstractclass Shape{public interfaceDrawable{//抽象方法,没有实现void draw;//抽象方法public abstractdouble area;//Java8+支持默认方法//具体方法,有实现default voidsetup{public voiddisplay{System.out.println准备绘制;System.out.println面积是+area;}}}}public classRectangle implementsDrawable{public classCircle extendsShape{private doublewidth;private doubleradius;private double height;public Circledoubleradius{public Rectangledoublewidth,doubleheight{this.radius=radius;this.width=width;}this.height=height;}@Overridepublic doublearea{@Overridereturn Math.PI*radius*radius;public voiddraw{}System.out.println绘制矩形;}}}包的概念和使用包的定义导入语句包结构包是Java中组织类的方式,类似于文使用import语句可以导入其他包中的包结构通常反映了项目的结构,遵循件系统中的文件夹包用于避免命名类,简化类的引用导入有两种形式一定的命名约定冲突,控制访问权限,提高代码的可导入特定类和导入整个包(使用*通配•com.company.project.model维护性包名通常采用域名反转的命符)导入语句放在包声明之后,类数据模型类名规则,如com.company.project定义之前•com.company.project.service业务逻辑类//导入特定类•com.company.project.util import java.util.ArrayList;工具类//导入整个包•com.company.project.view视图相关类importjava.util.*;包访问控制通过包和访问修饰符的组合,可以实现细粒度的访问控制例如,默认访问级别(无修饰符)允许同一包内的类访问,但包外的类不能访问,这对实现内部API非常有用异常处理机制Java自定义异常特定应用场景的异常类型1受检异常2编译时必须处理的异常运行时异常3可以不显式处理的异常错误4严重问题,通常不需要捕获Throwable5所有异常和错误的超类Java的异常处理机制是处理程序运行时错误的强大工具,它将程序的正常流程与错误处理代码分离,提高了代码的可读性和可维护性Java中的异常分为三类错误(Error)、运行时异常(RuntimeException)和受检异常(Checked Exception)错误表示严重的问题,通常由JVM抛出,如OutOfMemoryError;运行时异常表示编程错误,如NullPointerException;受检异常表示程序无法控制的外部因素导致的异常,如IOException异常处理机制通过try-catch-finally语句实现,允许程序捕获异常并采取适当的恢复措施语句try-catch-finally块try包含可能抛出异常的代码一旦try块中的代码抛出异常,程序会立即跳转到相应的catch块,跳过try块中剩余的代码块catch捕获并处理特定类型的异常一个try块可以有多个catch块,用于处理不同类型的异常catch块按顺序匹配,从最具体的异常类型到最一般的异常类型块finally包含无论是否发生异常都会执行的代码通常用于释放资源,如关闭文件、数据库连接等即使try或catch块中有return语句,finally块仍会在方法返回前执行try-with-resourcesJava7引入的特性,用于自动关闭实现AutoCloseable接口的资源资源在try块结束时自动关闭,无需显式的finally块try-catch-finally语句的基本语法try{//可能抛出异常的代码FileReader file=new FileReaderfile.txt;int data=file.read;}catch FileNotFoundExceptione{//处理FileNotFoundExceptionSystem.out.println文件未找到:+e.getMessage;}catch IOExceptione{//处理IOExceptionSystem.out.println读取错误:+e.getMessage;}finally{//无论是否发生异常,都会执行的代码System.out.println无论如何都会执行;if file!=null{try{file.close;}catch IOExceptione{e.printStackTrace;}}}。
个人认证
优秀文档
获得点赞 0