还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《清华紫光》课件Java PPT欢迎学习《清华紫光》课程!本课程将全面介绍编程语言的基础知Java Java识和核心概念,从环境配置到高级应用开发,旨在打造您的编程技Java Java能体系通过系统化的学习路径,您将掌握的语法基础、面向对象编程、异常处Java理、集合框架、操作、多线程编程以及网络通信等重要知识点,并通过实IO战项目巩固所学内容目录基础知识模块面向对象编程模块高级应用模块包括语言简介、平台架构、开涵盖类与对象、封装、继承、多包含集合框架、异常处理、流、Java IO发环境配置、基本语法、数据类态、抽象类、接口等面向对象核心多线程编程、网络通信等高级主型、运算符和控制流程等基础内概念,帮助理解的设计理念和题,以及实战项目开发,提升实际Java容,为初学者打下坚实基础编程思想应用能力语言简介Java诞生历程1991-1995由公司的詹姆斯高斯林团队于年开始开Java Sun·James Gosling1991发,原名(橡树),旨在解决家用电器等嵌入式系统的编程问题Oak年正式更名为并发布1995Java发展壮大1996-2009迅速在互联网领域流行,推出了多个重要版本,确Java JDK
1.0-JDK6立了其在企业级应用开发中的重要地位收购至今Oracle2010年公司以亿美元收购公司,归属管理此2010Oracle74Sun JavaOracle后更新更为稳定规范,推出了版本号简化的、、等长期支Java Java7811持版本LTS平台与体系结构JavaJDK JavaDevelopment Kit开发人员工具集JRE JavaRuntime Environment运行环境JVM JavaVirtual Machine虚拟机是平台的核心,它将字节码文件解释编译为特定操作系统的机器码执行,实现了一次编写,到处运行的跨平台特JVM Java Java.class/性不同的操作系统上运行不同的实现,但执行相同的字节码JVM配置开发环境Java下载安装包JDK访问官方网站或网站,选择与操作系统匹配的Oracle www.oracle.com OpenJDK版本进行下载建议选择长期支持版本如或JDKJDK8JDK11安装JDK运行下载的安装程序,按照安装向导操作默认路径通常为C:\Program版本号,建议记录安装路径Files\Java\jdk-配置环境变量设置环境变量指向安装目录,并将添加到JAVA_HOME JDK%JAVA_HOME%\bin环境变量,使命令可在命令行中全局访问PATH Java验证安装打开命令提示符,输入和命令检查环境是否正java-version javac-version Java确配置,若显示版本信息则表示配置成功基本语法概述Java文件结构标识符与关键字Java源文件通常包含包声明、标识符是自定义的命名,如类名、变量Java.java导入语句和类定义三部分文件名必须名必须以字母、或开头,后跟字$_与公共类名完全一致,包括大小写每母、数字或下划线区分大小Java个文件中只能有一个类,写,命名应遵循驼峰命名法关键字是Java public但可以有多个非类保留的有特殊含义的单词如public Java、、等,不能用作标识class publicif符注释类型支持三种注释单行注释,多行注释和文档注释Java//.../*...*//**...*/文档注释可通过工具生成文档,支持特殊标记如、、javadoc API@author@param等@return数据类型与变量基本数据类型种引用数据类型8整数类型位、位、位、位类自定义类型,如、等byte8short16int32long64Class StringScanner浮点类型位、位接口抽象方法的集合float32double64Interface字符类型位,字符数组相同类型数据的集合char16UnicodeArray布尔类型引用类型的变量存储对象的地址,而非对象本身booleantrue/false这些类型有默认值,如为,为,引用类型为使用关键字创建引用类型的实例int0boolean falsenewnull变量是用于存储数据的内存位置,使用前必须声明其类型和名称支持变量声明与初始化分开或一起进Java int num;num=10;行变量命名应遵循命名规范,如使用有意义的名称,驼峰命名法等intnum=10;firstName运算符和表达式算术运算符加、减、乘、除、取模+-*/%整数除法结果为整数,如等于5/22取模运算返回除法的余数,如等于7%31关系运算符等于、不等于、大于、小于==!=大于等于、小于等于==关系运算的结果为类型boolean逻辑运算符与、或、非||!和具有短路特性,可提高效率||常用于条件判断中组合多个条件还包括赋值运算符等,用于变量赋值;位运算符,用于二进制位操作;自增Java=,+=,-=,|,^,~,,,自减运算符,分为前缀和后缀两种形式,前者先增减后使用,后者先使用后增减++,--++i i++控制流程语句分支结构循环结构跳转语句语句根据条件执行不同代码块循环适合已知循环次数的场景跳出当前循环或语句if forbreak switch语句条件为真执行一段代码,否则执行另一循环遍历数组或集合元素跳过当前循环的剩余部分,继续下一次循环if-else for-each continue段代码循环先判断条件再执行循环体结束方法执行并返回值(可选)while return多条件判断分支if-else if-else循环先执行循环体再判断条件,至少执行语句配合和控制外层循环do-while labeledbreak continue语句基于固定值的多分支选择,支持整型、一次switch字符型、枚举类型和类型String Java7+方法(函数)的定义与调用方法声明格式方法重载参数传递机制方法声明包括访问修饰符、返回类型、方法名同一个类中可以定义多个同名但参数列表不同中所有参数传递都是值传递,即复制参数Java和参数列表完整语法为访问修饰符的方法,称为方法重载参数值传给方法对于基本类型,传递的是值的副[]Overloading返回类型方法名参数列表列表的区别可以是参数个数不同或参数类型不本;对于引用类型,传递的是引用的副本地址[static][final]异常类型方法体同值[throws]{}返回类型可以是任意数据类型或无返回重载方法调用时,编译器根据传入参数自动匹在方法中修改基本类型参数不影响原值;修改void值,方法体中使用语句返回值方配对应的方法版本,提高代码复用性和可读引用类型参数指向的对象内容会影响原对象,return void法可省略性但修改引用本身不影响原引用return数组类型数组是存储相同类型数据的有序集合,在内存中占据连续空间数组声明形式为类型数组名或类型数组名,如或创建数Java[][]int[]numbers intnumbers[]组需使用关键字创建容量为的数组new int[]numbers=new int
[5];//5int数组可在声明时初始化数组索引从开始,通过索引访问元素数组长度通过属性获取int[]numbers={1,2,3,4,5};0numbers
[0]=10;length numbers.length面向对象编程基础继承子类继承父类的特性,实现代码重用使用关键字建立继承关系extends封装子类可以扩展父类功能,形成类的层次结构多态通过访问控制隐藏实现细节,只暴露必要的接口同一操作作用于不同对象,产生不同行为使用修饰符保护数据,提供公共访问方法private通过方法重写和接口实现getter/setter增强安全性和可维护性,控制数据有效性面向对象编程是一种程序设计范式,将数据和行为封装成对象,通过对象之间的交互完成任务类是对象的模板,定义了对象的属性和行为;对象是类的具体实例,具有确定的状态和行OOP为是一种纯面向对象的语言,几乎所有内容都是对象除了基本类型面向对象思想使程序更接近现实世界的思维方式,有利于复杂问题的抽象和模块化,提高代码重用性和可维护性实践Java中,应遵循设计原则如单一职责、开闭原则等类的定义与成员属性与方法构造方法属性成员变量类的数据成员,描述对象的构造方法用于初始化对象,创建对象时自动调状态可以是基本类型或引用类型,可以有初用与类名相同,无返回类型始值可以有多个重载的构造方法,满足不同初始化方法成员方法类的行为定义,描述对象能需求若未定义任何构造方法,编译器提供无做什么可以访问和操作成员变量,实现特定参构造方法功能可以使用调用同类的其他构造方法,必this成员变量和方法遵循封装原则,使用适当的访须在构造方法第一行问修饰符控制可见性与关键字static this标记类级别的成员,属于类而非实例成员在内存中只有一份,所有实例共享static static方法中不能使用关键字,不能访问非成员常用于工具方法和常量定义static thisstatic关键字引用当前对象,用于区分局部变量和成员变量、调用其他构造方法、在方法中返回当前对this象对象的创建与使用使用关键字创建对象new语法类名对象名构造方法参数=new;例如张三Student student=new Student,20;操作符为对象分配内存,调用构造方法初始化,并返回对象引用new访问对象成员使用点运算符访问对象的属性和方法.属性访问前提是属性可见student.name方法调用student.study对象引用与垃圾回收对象引用是指向堆内存中对象的地址值一个对象可以有多个引用,对象不再被任何引用指向时成为垃圾虚拟机的垃圾收集器负责自动回收不再使用的对象内存Java对象创建是程序运行的核心机制创建对象时,在堆内存中分配存储空间,初始化对象的成员变量,并Java JVM返回对象的引用对象引用存储在栈内存中,指向堆中的实际对象封装性与私有化42100%访问级别核心目标应用率的四种访问修饰符从严格到宽松依次为封装的两大目标保护数据安全和提高代码灵活几乎所有专业应用都遵循封装原则来提高代Java Java、无修饰符、、性码质量private defaultprotectedpublic封装是面向对象编程的首要原则,通过限制对实现细节的访问,只暴露必要的接口在中,修饰符限制成员只能在当前类中访问;默认无修Java private饰符允许同包访问;允许同包和子类访问;允许任何类访问protected public继承与类的层次结构定义父类创建具有通用属性和方法的基类使用关键字extends子类继承父类的非私有成员重写父类方法子类可修改继承的方法行为使用访问父类super调用父类构造方法和被重写的方法继承是实现代码重用的核心机制,通过关键字建立类之间的父子关系子类自动继承父类的所有非私有成员属性和方法,可以直接使用这些继承的成员,也Java extends可以添加自己特有的成员,扩展父类功能多态与接口多态实现条件父类引用子类对象继承或实现关系子类继承父类或实现接口父类型变量可以引用任何子类对象Animalanimal=new Dog;方法重写子类重写父类接口的方法/引用变量类型决定可访问的成员范围父类引用指向子类对象使用父类类型变量引用子类实例对象的实际类型决定方法的实际执行版本接口interface接口是抽象方法的集合,使用关键字定义interface类通过关键字实现接口implements起支持默认方法和静态方法Java8一个类可以实现多个接口,实现的多重继承Java多态是面向对象编程的核心特性,允许不同对象对相同消息做出不同响应在中,多态主要通过方法重Java写和动态绑定实现运行时根据对象的实际类型决定调用哪个方法版本,这种机制称为动态绑定或后期绑定抽象类与方法抽象类基础抽象方法抽象类接口vs抽象类是不能实例化的类,使用关抽象方法只有声明没有实现,使用抽象类单继承,可以有构造方法和成员变abstract abstract键字修饰修饰量,方法可以有实现抽象类可以包含抽象方法和具体方法的混合抽象方法以分号结束,不能有方法体接口多实现,前方法无实现,只Java8能有常量抽象类必须被子类继承,子类必须实现所有抽象方法必须在抽象类或接口中定义抽象方法或自身也声明为抽象类抽象类适合表示是什么的关系is-a子类必须重写所有继承的抽象方法抽象类可以有构造方法,用于子类对象初始接口适合表示能做什么的关系can-do抽象方法不能是、或的private staticfinal化两者结合使用可以构建灵活的类层次结构抽象类可以包含成员变量,可以是任何访问修饰符内部类与匿名类静态内部类匿名内部类使用修饰的成员内部类,不依赖于外局部内部类static没有名字的局部类,在创建对象的同时定义部类实例,只能访问外部类的静态成员创成员内部类定义在方法或代码块内的类,只能在定义它类的实现通常用于创建接口或抽象类的一建实例不需要外部类实例定义在类中但不属于方法或代码块的类,可的方法或代码块中使用可以访问外部类的次性实现语法接口抽象类实new/{OuterClass.StaticInnerClass inner=以访问外部类的所有成员包括私有成员所有成员和所在方法的final或effectively现方法};匿名类不能有构造方法,但可以new OuterClass.StaticInnerClass;适可以使用任何访问修饰符,可以是抽象的或final局部变量没有访问修饰符,不能是有初始化代码块是实现事件处理和回调的用于将逻辑上从属于一个类但不需要访问外final的创建实例需要先创建外部类实例static的适用于实现方法内部的功能封常用方式部类实例成员的类组织在一起装OuterClass outer=new OuterClass;OuterClass.InnerClass inner=outer.new InnerClass;核心类库概览Java扩展库和第三方库各种专业领域的扩展功能1企业级包API javax.*企业级应用开发组件标准库包java.*基础功能和常用工具核心包java.lang最基本的类和接口包是最核心的包,无需导入即可使用,包含基础类如所有类的父类、字符串、数学函数、系统操作等此外java.lang JavaObjectStringMathSystem还包含基本类型的包装类、等和异常体系的基类、等Integer DoubleException Error字符串与类String字符串常量池字符串比较与拼接可变字符串类维护一个特殊的内存区域称为字符串常量池使用方法比较字符串内容线程安全,适合多线程环境Javaequals:s
1.equalss2StringBuffer:直接赋值创建的字符串会先在常量池中查找,有则使用比较的是引用非线程安全,单线程下性能更好==:s1==s2StringBuilder:复用,无则创建使用或拼接字符串或两者相似,主要方法有、、+concat:s1+s2API appendinsert使用常量池中的字符串等String s1=hello;//s
1.concats2delete在堆中创频繁拼接操作效率低,应使用或循环中的字符串拼接应使用提高效率String s2=new Stringhello;//StringBuilder StringBuilder建新对象,不使用常量池StringBuffer类是中最常用的类之一,表示不可变的字符序列类的不可变性意味着一旦创建,其内容不能被修改,任何修改操作都会创建新的对象这种设计有利String JavaString String于缓存优化、安全性、线程安全和哈希值计算包与导入机制包的声明与规范导入机制使用语句声明包,必须是文件第一行注package释除外使用语句导入其他包中的类import包名全小写,通常使用反向域名格式如单类导入:import java.util.ArrayList;com.company.project整包导入不影响性能:import java.util.*;物理上对应文件系统的目录结构名称解析默认包编译器按优先级解析类名当前包显式导入:没有语句的类属于默认包整包导入package默认包中的类不能被其他包导入同名类必须使用完全限定名:java.util.Date vsjava.sql.Date实际开发中应避免使用默认包静态导入:import staticjava.lang.Math.PI;包是组织和管理类的机制,类似于文件系统中的文件夹使用包的主要优势包括防止命名冲突不同包可以有同名类;控制访问权限包级别可见性;便于管Java理和维护大型项目;支持代码重用和分发和类Math Random类型常用方法使用示例结果类Math absdoublea Math.abs-
4.
54.5类Math ceildoublea Math.ceil
4.
35.0类Math floordoublea Math.floor
4.
74.0类Math rounddoublea Math.round
4.55类Math maxinta,int bMath.max10,2020类的随机数Random nextIntintbound new Random.nextInt1000-99类的随机数Random nextDoublenewRandom.nextDouble
0.0-
1.0类位于包中,提供了基本的数学运算功能它是一个工具类,所有方法都是静态的,无需创建实例除了基本算术运算,还提供三角函数Math java.lang Mathsin,、对数函数、指数函数等常用常量包括和自然对数的底cos,tan log,log10exp,pow Math.PIπMath.E日期与时间处理传统日期时间新日期时间API Java8API java.time类表示特定时间点,精确到毫秒表示日期年月日Date LocalDate类更丰富的日期操作,如加减日期、设置字段表示时间时分秒Calendar LocalTime类格式化和解析日期字符串表示日期和时间SimpleDateFormat LocalDateTime问题设计不一致,非线程安全,年份从开始,月份从开始带时区的日期和时间19000ZonedDateTime格式化和解析DateTimeFormatterDate now=new Date;SimpleDateFormat sdf=new SimpleDateFormatyyyy-MM-dd优点不可变对象、线程安全、更直观的APIHH:mm:ss;String formattedDate=sdf.formatnow;LocalDate today=LocalDate.now;LocalDateTime oneWeekLater=LocalDateTime.now.plusWeeks1;Calendar cal=Calendar.getInstance;DateTimeFormatter formatter=DateTimeFormatter.ofPatternyyyy-cal.addCalendar.DAY_OF_MONTH,7;//增加7天MM-dd HH:mm:ss;Date futureDate=cal.getTime;String formatted=oneWeekLater.formatformatter;包装类与自动装箱包装类类型对应基本类型的引用类型自动装箱拆箱/Integer↔int装箱基本类型→包装类型自动装箱Double↔double Integernum=10;//拆箱包装类型基本类型Boolean↔boolean→自动拆箱Character↔char intvalue=num;//编译器自动完成转换Long↔long Java其他Short,Byte,Float常量池机制常用方法包装类预先缓存了一定范围的对象获取包装类实例valueOf缓存至字符串转基本类型Integer-128127parseXxx缓存至转为字符串Character\u0000\u007F toString缓存和比较Boolean truefalse compareTo影响运算符的结果判断相等==equals包装类是为每种基本数据类型提供的对应类,将基本类型包装成对象包装类存在的主要原因是集合框架只能存储对象,不能存储基本类型;提供了基本类型相关的实用方法;满JavaJava足面向对象编程中万物皆对象的理念所有包装类都是不可变的,即一旦创建,其包装的值不能被修改异常处理机制基础处理异常捕获和处理异常try-catch-finally抛出异常使用关键字抛出异常对象throw声明异常使用关键字声明可能抛出的异常throws异常处理是错误处理机制的核心,通过抛出和捕获异常对象处理程序运行时的错误情况异常体系以为根,分为两大类Java JavaThrowable严重系统错误,如,通常无法恢复和可处理的程序异常又分为编译时Error OutOfMemoryErrorExceptionException CheckedException检查的异常,必须处理和运行时异常,如,可不强制处理RuntimeException NullPointerException常见异常类型编译时异常运行时异常错误CheckedException RuntimeExceptionError输入输出异常空指针异常内存溢出错误IOException NullPointerExceptionOutOfMemoryError数据库操作异常数组索引越界栈溢出错误SQLException ArrayIndexOutOfBoundsExceptionStackOverflowError异常找不到类异常虚拟机错误ClassNotFoundException VirtualMachineError类型转换异常ClassCastException必须在代码中显式处理或,否则编表示严重的系统级问题,通常无法在程序中恢复try-catch throws译不通过非法参数异常IllegalArgumentException不需要也不应该尝试捕获处理通常表示程序外部因素导致的问题,如文件不存在、网通常表示程序逻辑错误,应该通过编码预防而非捕获处络连接失败理空指针异常是中最常见的异常,当尝试通过引用调用方法或访问字段时发生防范措施包括在使用对象前进行检查,使用类NullPointerException Javanull nullOptional Java8+处理可能为的值,合理使用方法等null Objects.requireNonNull自定义异常类型继承类Exception创建检查型异常必须处理:public classIncorrectFileNameException extendsException{public IncorrectFileNameExceptionStringerrorMessage{supererrorMessage;}}继承RuntimeException创建运行时异常可不强制处理:public classInsufficientBalanceException extendsRuntimeException{private double balance;public InsufficientBalanceExceptionString message,doublebalance{supermessage;this.balance=balance;}public doublegetBalance{return balance;}}抛出自定义异常在适当情况下抛出自定义异常:public voidwithdrawdouble amount{if amountbalance{throw newInsufficientBalanceExceptionInsufficient balance:cannot withdraw+amount,balance;}balance-=amount;}异常处理规范异常传播机制多重块12catch当方法中抛出异常且未捕获处理时,异常会沿调一个块可以有多个块,按顺序匹配异常try catch用栈向上传播类型异常将逐级传递给调用方,直到被处理或导致程子类异常必须在父类异常之前捕获,否则永远不序终止会被执行异常传播可以穿越多个方法调用,但不会跨线程支持多重捕获Java7+:catch IOException|传播SQLException e{...}代码块3finally块中的代码无论是否发生异常都会执行finally主要用于释放资源,如关闭文件、数据库连接等块中的会覆盖块中的finally returntry/catch return推荐使用替代Java7+try-with-resources finally良好的异常处理遵循以下规范只捕获能够处理的异常,不要捕获太广泛的异常类型如;不要捕获异Exception常后空处理块为空;尽早抛出异常,尽晚捕获异常;保持异常链,使用带参数的构造方法传递原始异catchcause常;日志记录异常信息,包括异常类型、消息和堆栈跟踪;优先使用标准异常,而非创建类似功能的自定义异常集合框架总览接口接口Collection List用于存储一组对象的根接口有序集合,元素可重复主要子接口、、主要实现、List SetQueue ArrayListLinkedList共同操作、、等支持按索引访问add removecontains接口接口Map Set键值对映射,键不能重复无重复元素的集合主要实现、主要实现、HashMap TreeMapHashSet TreeSet不继承接口不保证顺序除CollectionTreeSet集合框架提供了一组用于存储和操作对象组的标准数据结构实现与数组相比,集合框架的优势包括大小可动态调整;提供丰富的支持常见操作;实现多Java API种数据结构满足不同需求;支持泛型保证类型安全;支持并发操作的线程安全集合包java.util.concurrent接口实现ListArrayList LinkedList基于动态数组实现的基于双向链表实现的List List特点特点•随机访问高效常数时间O1•随机访问低效线性时间On•末尾添加元素通常高效O1•任意位置插入删除高效O1•中间插入删除低效需移动元素•内存占用略高存储前后引用•容量自动扩展通常增加50%•同时实现了List和Deque接口适用场景适用场景•频繁随机访问元素•频繁在中间插入/删除元素•列表大小变化不大•实现栈或队列FIFO/LIFO•不关心插入/删除性能•不关心随机访问性能List list=new ArrayList;LinkedList linkedList=new LinkedList;list.addJava;//添加元素linkedList.addJava;//末尾添加list.get0;//获取元素linkedList.addFirstC++;//头部添加list.set0,Python;//修改元素linkedList.addLastPython;//尾部添加list.remove0;//删除元素linkedList.removeFirst;//删除头部是有序集合,允许重复元素,是接口的一个重要子接口所有实现都支持一组公共操作,如添加元素、删除元素、获取修改元素、查找元素索引、判断元素List CollectionList addremoveget/set/indexOfcontains是否存在、获取大小、判断是否为空等sizeisEmpty接口实现SetHashSet TreeSetLinkedHashSet基于实现,元素无序,允许基于红黑树实现,元素有序,不允许基于实现,维护插入顺序,允许HashMap nullTreeMapnull LinkedHashMapnull特点添加、删除、包含操作均为常数时间特点添加、删除、包含操作均为时间特点结合了的高效性和有序性O1Olog nHashSet去重原理基于元素的和方法排序方式自然顺序实现或自定义比性能略低于,但迭代速度更快hashCode equalsComparable HashSet较器Comparator使用场景需要高性能的不关心顺序的元素集合使用场景需要去重但又要保持插入顺序使用场景需要有序集合,如排行榜Set hashSet=new HashSet;LinkedHashSet linkedSet=newhashSet.addJava;//添加元素TreeSet treeSet=new TreeSet;LinkedHashSet;hashSet.containsJava;//检查元素treeSet.add5;//自动排序linkedSet.addJava;hashSet.removeJava;//删除元素treeSet.first;//获取最小元素linkedSet.addPython;//维持添加顺treeSet.last;//获取最大元素序treeSet.headSet3;//获取小于3的子集//迭代时按添加顺序:Java,Python接口定义了不包含重复元素的集合,是接口的子接口与不同,不保证元素的顺序除非使用有序实现如,也不支持通过索引访问元素的主要用途是Set CollectionList SetTreeSet Set检查元素是否存在,去除重复元素,执行集合运算如交集、并集、差集等接口实现Map实现类特点性能有序性允许线程安全null基于哈希表添加获取删除无序和允许否HashMap//O1key value null基于红黑树添加获取删除键自然顺序或比较器排不允许否TreeMap//Olog keynull序n哈希表双向链表略低于维持插入顺序或访问顺和允许否LinkedHashMap+HashMap key valuenull序遗留类,类似较慢同步开无序和均不允许是Hashtable HashMapHashMapkeyvalue销null分段锁机制并发环境下高效无序和均不允许是ConcurrentHashMap keyvaluenull接口定义了键值对映射关系的集合,每个键最多映射到一个值,不能包含重复的键与接口不同,不是的子接口,但可以通过、Map CollectionMap CollectionkeySet、等方法获取键集、值集和键值对集常用操作包括添加或更新键值对、获取值、删除键值对、检values entrySetputgetremovecontainsKey/containsValue查键值是否存在、获取大小等/size工具类与泛型Collection工具类泛型基础泛型通配符Collections提供操作集合泛型是类型参数化的机制,提供编无界通配符表示未知类java.util.Collections List的静态方法译时类型安全型排序泛型类上界通配符sort,reverseOrder,class BoxT{private Listextends或其子类shuffle Tt;...}Number Number搜索泛型方法下界通配符binarySearch,max,T TgetValueT[]List super或其父类min,frequency array,int index{...}Integer Integer修改类型擦除编译后泛型信息被擦原则fill,copy,swap,PECS Producer-Extends,除,转为原始类型reverse Consumer-Super包装类型推断支持菱形操作读取数据用,写入数据用unmodifiableXxx,Java7+extends符synchronizedXxx,supercheckedXxx单例集合singletonXxx类是提供的集合框架工具类,与接口不同,它提供了大量静态方法操作集合如排序方Collections JDKCollection法可按自然顺序排序;搜索方法可在有序中二Collections.sortlist ListCollections.binarySearchlist,key List分查找元素;同步包装方法可将非线程安全的转为线程安全的此外还有Collections.synchronizedListlist List不可修改包装、类型检查包装等实用方法流基础I/O处理流高级流包装其他流提供额外功能字符流Reader/Writer2处理字符数据Unicode字节流InputStream/OutputStream处理二进制数据流提供了一套完整的读写数据的机制,分为字节流和字符流两大类字节流以字节为单位处理数据,适用于所有类型的数据如二进制文Java I/O件、图片、音频;字符流以字符为单位处理数据,专门用于文本数据,内部进行字符编解码两大基本流类层次为字节流基类和字符流基类InputStream/OutputStreamReader/Writer缓冲流和转换流缓冲流转换流缓冲流是高效能的关键组件,通过内部缓冲区减少实际操作次数,显著提高性能主要包转换流是字节流和字符流之间的桥梁,负责字节与字符的编解码转换主要包括I/O I/O括•InputStreamReader将字节输入流转为字符输入流•BufferedInputStream/BufferedOutputStream字节缓冲流•OutputStreamWriter将字符输出流转为字节输出流•BufferedReader/BufferedWriter字符缓冲流使用示例使用方式是包装基本流InputStreamReader isr=new InputStreamReaderBufferedReaderbr=new BufferedReadernew FileInputStreamfile.txt,UTF-8;new FileReaderfile.txt;//从此可以按字符读取数据,使用UTF-8解码String line;while line=br.readLine!=null{OutputStreamWriter osw=new OutputStreamWriter//处理每一行文本new FileOutputStreamoutput.txt,UTF-8;}//写入的字符会使用UTF-8编码成字节提供了方便的方法读取整行文本提供转换流最重要的特性是可以指定字符编码,解决不同编码系统间的文本处理问题如果不指定编BufferedReader readLineBufferedWriter newLine方法写入行分隔符缓冲流的默认缓冲区大小通常是,可以指定自定义大小码,将使用平台默认编码,可能导致跨平台问题8KB缓冲流和转换流通常结合使用,创建高效且编码友好的链这种组合I/O BufferedReaderbr=new BufferedReadernewInputStreamReadernew FileInputStreamfile.txt,UTF-8;实现了高效的按行读取,同时处理字符编码文件操作类基础File类表示文件系统中的文件或目录java.io.File创建对象不会创建实际文件File路径可以是相对路径或绝对路径File file=new Filedata.txt;File dir=new FileC:/temp;File relativeFile=new Filesrc/main;文件信息获取文件基本信息的方法exists,isFile,isDirectorycanRead,canWrite,canExecutelength,lastModified,getNamegetPath,getAbsolutePath,getParentif file.existsfile.isFile{System.out.println文件大小:+file.length;}文件操作创建、删除、重命名文件和目录createNewFile,delete,renameTo创建目录和父目录mkdir,mkdirs列出目录内容listFiles,listif!dir.exists{dir.mkdirs;//创建多级目录}File newFile=new Filedir,newfile.txt;newFile.createNewFile;对象序列化对象准备序列化过程反序列化过程版本验证类实现接口创建创建使用Serializable ObjectOutputStreamObjectInputStream serialVersionUID标记不需序列化的字段为调用方法调用方法确保类版本兼容transient writeObjectreadObject确保所有引用的对象都可序列化对象状态转换为字节序列字节序列恢复为对象处理类结构变化对象序列化是将对象的状态转换为字节序列的过程,便于存储或传输;反序列化则是相反的过程,将字节序列恢复为对象要使类可序列化,必须实现接口,这是一个标记接口,不包含任何方法序列化示例代码java.io.Serializable//序列化try ObjectOutputStreamoos=new ObjectOutputStreamnewFileOutputStreamobject.dat{Person person=new Person张三,30;oos.writeObjectperson;}//反序列化try ObjectInputStreamois=new ObjectInputStreamnewFileInputStreamobject.dat{Person person=Person ois.readObject;}多线程基础进程与线程区别类与接口Thread Runnable进程是操作系统分配资源的基本单位,拥有独立的内提供两种创建线程的基本方式继承类Java Thread存空间、文件句柄和系统资源或实现接口Runnable线程是调度的基本单位,共享所属进程的内存和类封装了线程的属性和基本操作,如名称、优CPU Thread资源,但有独立的执行路径和栈空间先级、状态以及、等方法start sleep一个进程可以包含多个线程,线程间切换开销小于进接口只有一个方法,定义线程要执行Runnable run程间切换,通信更简单高效的任务,更适合多重继承的情况,是首选方式线程的创建与启动创建线程对象后,调用方法启动线程,不要直接调用方法(会在当前线程执行,不会创建新线程)start run线程启动后进入就绪状态,等待调度,不保证立即执行,执行顺序由调度器决定CPU可以通过线程构造器设置线程名称,通过设置为守护线程(随主线程结束而结束)setDaemontrue线程的生命周期包括新建就绪运行阻塞等待计时等待New→Runnable→Running→Blocked/Waiting/终止线程间的状态转换由线程调度器控制或通过方法调用触发,如、Timed Waiting→Terminated sleep、等导致阻塞,、使线程从等待回到就绪状态wait joinnotify notifyAll线程同步与锁线程安全问题多线程并发访问共享资源导致的数据不一致同步机制使用关键字控制并发访问synchronized锁机制使用接口实现更灵活的锁控制Lock死锁预防设计合理的锁获取顺序避免死锁线程同步是解决多线程并发访问共享资源时数据不一致问题的机制提供了多种同步工具,最基本的是关键字,可用于修饰方法或代码块方Java synchronizedsynchronized法锁定方法所属对象或类对象静态方法;代码块可以指定锁对象,粒度更细临界区代码thissynchronized synchronizedlockObject{/**/}线程通信与调度等待通知机制/使线程进入等待状态,释放对象锁wait唤醒一个在对象上等待的线程notify唤醒所有在对象上等待的线程notifyAll这些方法必须在同步块中调用,且针对同步对象线程优先级线程优先级范围最低到最高Java110通过设置,默认为setPriority NORM_PRIORITY5高优先级线程获得机会更多,但不保证执行顺序CPU优先级效果依赖于操作系统的线程调度实现线程休眠与让步使线程休眠指定毫秒数,不释放锁sleepmillis提示调度器当前线程愿意让出,但不保证yield CPU等待指定线程结束后再继续执行join休眠方法通常用于模拟处理时间或实现定时任务线程间通信是多线程编程的关键部分,机制是传统的线程协作方式生产者消费者模式是典型应用生产者线程生产数据放入缓冲区,缓冲区满时等待;消费者线程从缓冲区取数据,缓冲区空时等待引入了更高级的线程通信工具,如wait/notify-Java5阻塞队列实现生产者消费者模式更简洁;信号量控制并发访问数量;倒计时门闩等待多个线程完成操作;循环屏障让多个线程互相等待达到同步点BlockingQueue-SemaphoreCountDownLatchCyclicBarrier线程池与并发包37线程池类型线程池参数提供的三种基本线程池固定大小、缓存和调度构造函数的个关键参数控制线程Java ThreadPoolExecutor7池行为20+并发工具类包中提供的并发容器和工具类数量java.util.concurrent线程池是管理线程生命周期的机制,通过重用线程减少创建销毁线程的开销,控制并发线程数量工厂类提/Executors供了几种预配置的线程池固定大小、按需创建、newFixedThreadPoolnewCachedThreadPool单线程、定时任务所有线程池都实现了newSingleThreadExecutornewScheduledThreadPool接口,提供管理任务执行的方法ExecutorService网络编程基础网络通信协议传输控制协议面向连接、可靠、有序的数据传输,适合要求可靠性的场景,如文件传输、网页浏TCP览建立连接需三次握手,断开需四次挥手,有流量控制和拥塞控制机制用户数据报协议无连接、不可靠、快速的数据传输,适合实时性高、允许少量丢包的场景,如视UDP频直播、游戏没有建立连接的开销,数据以独立数据包发送,不保证顺序和到达类InetAddress的类表示地址,提供域名解析和地址操作功能主要方法包括Java InetAddressIP IP从主机名或地址字符串创建实例;获取本机地址;getByNameString hostIP getLocalHost获取主机名;获取地址字符串getHostName getHostAddressIP是网络编程的基础类,通常作为构造函数的参数使用示例InetAddress SocketInetAddressaddress=InetAddress.getByNamewww.example.com;编程流程Socket是网络通信的端点,提供类客户端和类服务器端实现通Socket JavaSocketServerSocketTCP信基本流程为服务器创建绑定端口调用等待连接客户端创建ServerSocket→accept→连接服务器双方通过流交换数据关闭连接Socket→I/O→通信使用输入输出流进行数据传输,可以传输任何可序列化的对象网络编程中必须Socket Java妥善处理异常和网络异常,如连接超时、连接断开等IO与通信实例TCP UDP通信实例通信实例TCP UDP服务器端代码服务器端代码UDP//创建ServerSocket对象监听指定端口//创建DatagramSocket绑定端口ServerSocket serverSocket=new ServerSocket8888;DatagramSocket socket=new DatagramSocket9999;System.out.println服务器启动,等待连接...;byte[]buffer=new byte
[1024];//接受客户端连接,返回Socket对象//创建DatagramPacket接收数据Socket clientSocket=serverSocket.accept;DatagramPacket packet=new DatagramPacketSystem.out.println客户端已连接:+buffer,buffer.length;clientSocket.getInetAddress.getHostAddress;System.out.printlnUDP服务器已启动...;//获取输入输出流//接收数据包BufferedReader in=new BufferedReadersocket.receivepacket;new InputStreamReaderclientSocket.getInputStream;PrintWriter out=new PrintWriter//处理接收的数据clientSocket.getOutputStream,true;String received=new Stringpacket.getData,0,packet.getLength;//读取客户端消息并响应System.out.println收到消息:+received;Stringmessage;while message=in.readLine!=null{//准备回复数据System.out.println收到:+message;String response=已收到:+received;out.println服务器回复:+message;byte[]responseData=response.getBytes;if message.equalsbye break;}//创建回复数据包并发送DatagramPacket responsePacket=new DatagramPacket//关闭资源responseData,responseData.length,in.close;packet.getAddress,packet.getPort;out.close;socket.sendresponsePacket;clientSocket.close;serverSocket.close;//关闭资源socket.close;在客户端部分,客户端使用类连接服务器,指定服务器地址和端口获取输入输出流后,可以发送和接收消息客户端使用发送数据包,不需要建立连接TCP SocketSocket socket=new Socketlocalhost,8888;UDP DatagramSocketDatagramSocket socket=newDatagramSocket;DatagramPacket packet=new DatagramPacketdata,data.length,InetAddress.getByNamelocalhost,9999;socket.sendpacket;与通信URL HTTP类用法通信基础连接示例URL HTTPJava HTTP类表示统是应用层协议,基于,用于网络资源使用发送请求URLUniform ResourceLocator HTTPTCP HttpURLConnection GET/POST一资源定位符,提供访问网络资源的功能传输设置请求头部、读取响应状态和内容对象可以解析的各个部分协议、主主要请求方法获取资源、提交URL URLGETPOST处理异常和错误状态码机、端口、路径、查询参数等数据、更新资源、删除资源PUTDELETE提供更现代的,支等Java11+HttpClient API通过获取头部包含元数据,如内容类型、长度、编URL.openConnection HTTP持异步请求和WebSocket对象进行通信码等URLConnection基本用法示例状态码分类信息、成功、重URL url=new1xx2xx3xx定向、客户端错误、服务器错误URLhttps://example.com/pathquery=v4xx5xx alue;使用访问资源的基本步骤创建对象获取连接配置请求发送请求处理响应关闭连接使用发送请求示例代码Java WebURL→→→→→HttpURLConnectionGETURLurl=new URLhttps://api.example.com/data;HttpURLConnection conn=HttpURLConnection url.openConnection;conn.setRequestMethodGET;conn.setRequestPropertyAccept,application/json;int responseCode=conn.getResponseCode;BufferedReaderin=new BufferedReadernewInputStreamReaderconn.getInputStream;String line;StringBuilder response=new StringBuilder;while line=in.readLine!=null{response.appendline;}in.close;System.out.printlnResponse:+response.toString;基础Java GUI提供两套工具包和是较早的工具包,使用平台本地组件,外观和行为依赖于操作系统构建在之上,完Java GUI AWTAbstract WindowToolkit SwingAWT SwingAWT全用实现,提供平台无关的一致外观,组件名通常以开头如虽然现在桌面应用开发更多使用,但理解仍有价值JavaJJButton JavaFXSwing事件监听机制事件源组件产生事件,如按钮、文本框等提供注册监听器的方法事件监听器实现特定接口的对象包含处理事件的方法事件对象包含事件相关信息传递给监听器方法事件分发事件队列和事件分发线程顺序处理用户交互的事件处理采用委派事件模型,遵循观察者设计模式当用户与组件交互时如点击按钮,组Java DelegationEvent ModelGUI件事件源生成一个事件对象,传递给已注册的事件监听器处理每种事件类型对应特定的监听器接口,如、ActionListener、等MouseListener KeyListener简单项目实战Java需求分析设计阶段明确项目目标和功能范围创建系统架构图1识别用户需求和系统约束设计类图和关系定义功能和非功能需求规划数据存储和用户界面测试与优化开发实现进行单元测试搭建开发环境系统集成测试编写核心代码性能优化和代码重构实现各功能模块以学生信息管理系统为例,需求分析阶段确定基本功能学生信息的增删改查、成绩管理、统计分析等设计阶段创建核心类图,主要包括类学号、姓名、年Student龄、专业等属性、类课程编号、名称、学分等、类学生、课程、成绩关联,以及对应的管理类、和CourseScoreStudentManager CourseManager,负责数据操作和业务逻辑ScoreManager项目演示与总结运行效果展示项目难点回顾主界面包含功能菜单和操作面板数据存储与读写采用对象序列化技术持久化数据,处理文件异常学生管理模块支持信息录入、查询、修改和删除IO界面与业务逻辑分离应用模式,避免紧耦合成绩管理模块可录入、查看和统计分析成绩MVC多条件查询实现灵活组合查询条件,优化查询效报表功能可导出学生名单和成绩单率成绩统计算法计算平均分、排名和分布情况改进与扩展方向迁移到数据库存储,提高数据安全性和查询效率添加用户认证和权限管理,区分管理员和普通用户开发批量导入导出功能,支持格式Excel优化界面设计,提升用户体验增加图表分析功能,可视化展示数据统计结果在项目开发过程中,我们应用了多种核心技术面向对象编程构建领域模型,接口定义标准化操作;集合框架管理Java内存中的数据集;流实现数据持久化;异常处理确保程序健壮性;构建用户界面;以及事件处理实现用户交IO Swing互课程总结与答疑知识点回顾常见问题汇总语言基础数据类型、运算符、控制流、数组、方法数据类型转换自动转换、强制转换,包装类与基本类型的关系面向对象类与对象、封装、继承、多态、接口、抽象类集合使用选择合适的集合类型,理解各自特点与性能差异核心、集合框架、异常处理、操作、多线程、API StringIO网络编程线程安全同步机制、线程通信、并发容器的应用场景编程组件、布局、事件处理内存管理垃圾回收机制、避免内存泄漏、对象引用类型GUIAWT/Swing项目实践需求分析、系统设计、功能实现、测试优化设计模式单例、工厂、观察者等常用模式在中的实现Java学习资源推荐官方文档、文档Java SEDocumentation JDKAPI经典书籍《核心技术》、《》、《深入理解虚拟机》Java EffectiveJava Java在线资源教程、、开源项目Oracle JavaStack OverflowGitHub练习平台、的题目LeetCode HackerRankJava进阶方向、框架、开发、大数据技术Java EESpring Android完成本课程后,你已经掌握了编程的核心知识体系,包括语言基础、面向对象编程、常用、开发和项目实践这些知识为你进Java APIGUI一步学习高级技术和框架奠定了坚实基础技术生态非常庞大,可以向多个方向发展企业级应用开发、、Java JavaSpring Hibernate移动开发、大数据处理、、微服务架构等Android HadoopSpark。
个人认证
优秀文档
获得点赞 0