版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计教程与实验Java概述·应用基础·类和对象Contents课程目录从语言基础到面向对象,系统掌握Java编程核心能力01Java概述:语言起源、核心特性与运行机制02Java应用基础:数据类型、运算符与流程控制03类和对象:面向对象编程的核心概念与实践04实验指导:从环境搭建到编程实战CHAPTER01Java概述从语言诞生到运行机制,建立对Java的全局认知ProgrammingLanguageHistoryJava的诞生与发展历程Java从1991年Green项目起步,经Java5/8等重大革新,至今保持每半年发布节奏,深刻影响企业开发与移动生态。起源与诞生1991年Sun公司JamesGosling团队启动Green项目,为嵌入式设备设计Oak语言,后因商标冲突更名为Java1995年Java1.0正式发布,凭借"WriteOnce,RunAnywhere"理念获业界关注,Netscape率先支持JavaApplet1991–1995成熟与扩展2004年Java5引入泛型、注解、枚举、增强for循环等特性,是语法层面最大的一次革新2014年Java8带来Lambda表达式和StreamAPI,标志着Java正式拥抱函数式编程范式2004–2014现代化演进2017年Java9发布后Oracle改为每半年发布一个版本,加速语言迭代节奏Java17/21作为LTS版本,引入Records、SealedClasses、虚拟线程等现代特性2017–至今CoreFeaturesJava的核心特性Java以'一次编写,到处运行'的跨平台能力为基石,结合纯面向对象、自动内存管理、多线程支持和丰富的标准类库,构建了适合企业级应用和网络编程的完整技术体系。跨平台性通过JVM实现字节码跨操作系统运行,无需重新编译WriteOnceRunAnywhere纯面向对象一切皆对象,强制封装、继承、多态,代码结构清晰OOP自动垃圾回收GC机制自动回收对象内存,避免内存泄漏与悬空指针GarbageCollection多线程支持原生支持多线程编程,提供Thread类与并发原语Concurrency安全性字节码校验、安全管理器与沙箱机制三重防护TripleShield丰富的类库生态标准库配合Spring、Maven等第三方生态提升效率EcosystemLANGUAGEDESIGNJava与C/C++的核心区别Java在继承C/C++语法基础的同时,通过取消指针和多重继承、增加自动垃圾回收和强制异常处理等设计取舍,在保持表达力的同时显著降低了内存管理和安全性方面的编程风险,体现了"简洁优于复杂"的语言设计哲学。内存管理差异Java取消指针运算和手动内存管理,使用引用访问对象,由JVM的GC自动回收无用内存,避免内存泄漏C/C++需手动malloc/free或使用RAII,灵活但容易出错,内存管理是C/C++程序最常见的Bug来源GC自动回收语言机制简化Java取消多重继承(改用接口实现)、取消运算符重载和goto语句,减少语言复杂度Java不支持全局变量和预处理宏,所有代码必须封装在类中,强制面向对象组织取消多重继承安全与健壮性Java强制类型检查和异常处理机制,编译器会在编译期捕获未处理的受检异常,提升程序健壮性Java字节码经过验证器校验后才执行,配合安全管理器形成沙箱机制,防止恶意代码攻击沙箱机制RUNTIMEMECHANICSJava的工作原理与运行机制Java采用"编译+解释"的混合执行模式:源代码经javac编译为平台无关的字节码(.class文件),再由JVM解释执行或通过JIT即时编译为本地机器码。JDK(开发工具包)包含JRE(运行环境),JRE包含JVM(虚拟机),三者层层包含,理解这一关系是搭建开发环境的前提。编译阶段javac编译器将.java源文件编译为.class字节码文件,字节码是平台无关的中间代码,不依赖具体CPU和操作系统.class运行阶段JVM通过解释器逐行执行字节码,或通过JIT编译器将热点代码编译为本地机器码以提升性能JIT三层架构JDK=JRE+开发工具;JRE=JVM+核心类库;JVM是执行字节码的虚拟运行引擎JDK⊃JRE⊃JVM类加载机制JVM通过ClassLoader加载.class文件,经过验证、准备、解析的链接过程和初始化后方可使用ClassLoaderENVIRONMENTSETUPJava开发运行环境的安装与配置搭建Java开发环境是编程实践的第一步,核心在于正确安装JDK并配置JAVA_HOME和Path两个关键环境变量。JDK安装步骤01从Oracle官网或Adoptium下载JDK安装包,建议选择LTS长期支持版本(如JDK17或JDK21)02运行安装程序并记录安装路径,安装完成后即可使用javac编译器和java运行器JDK17/21LTS环境变量配置01设置JAVA_HOME变量指向JDK根目录,在Path变量中追加%JAVA_HOME%\bin02可选设置CLASSPATH变量,配置完成后在终端执行java-version验证版本号JAVA_HOME+Path集成开发环境01Eclipse:免费开源,插件生态丰富,适合教学和初学者,支持代码补全与调试02IntelliJIDEA:智能代码提示和重构功能领先,社区版免费,适合进阶开发者Eclipse/IDEAJavaBasics·Chapter01编写第一个Java程序通过经典的HelloWorld程序可以直观理解Java程序的基本结构:所有代码必须封装在class中,程序从main方法开始执行,System.out.println负责控制台输出。01类声明与文件命名publicclassHelloWorld定义公开类,源文件名必须与public类名一致(HelloWorld.java),编译后生成HelloWorld.class字节码文件。HelloWorld.java02程序入口main方法publicstaticvoidmain(String[]args)是程序入口方法,JVM启动时自动调用,每个Java应用程序必须有且仅有一个main方法。JVMEntryPoint03控制台输出语句System.out.println向标准输出流打印文本并换行。System是系统类,out是标准输出对象,println是打印方法。System.out04基础语法规范所有代码必须在类中、语句以分号结尾、严格区分大小写、大括号必须成对匹配、注释用//单行或/**/多行。SyntaxRulesJavaBasicsJava应用程序与小应用程序Java程序分为Application和Applet两种形态:Application是独立的桌面程序,拥有main方法入口,通过命令行或IDE直接运行;Applet是嵌入网页的小程序,依赖浏览器环境执行,曾广泛用于网页交互但已被现代前端技术取代,Java9起已移除相关支持。JavaApplication独立运行的程序,必须有main方法作为入口点,通过java命令在JVM上直接执行。可访问本地文件系统、网络资源等,权限不受限制,是当前Java开发的主流形式。main()JavaApplet嵌入HTML网页中运行,无main方法,通过浏览器或AppletViewer执行。受安全沙箱严格限制,不能访问本地文件系统和执行本地命令,主要用于网页端动态交互展示。Sandbox历史与淘汰曾因安全漏洞频发、加载速度慢和HTML5的崛起而逐步被淘汰。Oracle在Java9中正式移除AppletAPI,现代Web开发已全面转向JavaScript+HTML5+CSS3技术栈。Java9CHAPTER02Java应用基础掌握数据类型、运算符和流程控制,构建编程基本功JAVABASICS标识符、关键字与命名规范标识符是Java中为类、方法、变量命名的符号,必须遵循'字母/下划线/$开头、不含空格、不与关键字冲突'的规则。01标识符规则_$_$以字母、_或$开头,后续可跟字母、数字、_或$;不能以数字开头,不能包含空格,严格区分大小写02合法与非法示例userName_count$priceMAX_SIZE2ndPlaceclass合法:userName、_count、$price、MAX_SIZE;非法:2ndPlace(数字开头)、class(关键字)03Java关键字分类public/private/protectedclass/extendsif/for/while访问控制(public/private/protected)、类与对象(class/extends)、流程控制(if/for/while)等约50个保留关键字~5004命名约定PascalCasecamelCase类名PascalCase、方法/变量名camelCase、常量全大写下划线分隔、包名全小写PRIMITIVETYPESJava的八种基本数据类型Java定义了8种基本数据类型,它们不是对象,直接存储在栈中,按用途分为整数型、浮点型、字符型和布尔型。八种基本数据类型速查表类型字节数取值范围默认值byte1-128~1270short2-32,768~32,7670int4-231~231-1(约±21亿)0long8-263~263-10Lfloat4约±3.4×1038,精度7位0.0Fdouble8约±1.8×10308,精度15位0.0Dchar20~65,535(Unicode字符)'\u0000'boolean1true/falsefalse8种基本数据类型按精度和范围递增排列,int和double是日常开发中最常用的整数和浮点类型JavaFundamentals常量与变量的声明和使用变量是Java程序中存储数据的基本单元,声明时必须指定数据类型且不可更改(强类型语言)。常量通过final关键字声明后值不可修改。理解自动类型转换(小→大)和强制类型转换(大→小,可能丢失精度)是避免数据类型Bug的关键。01变量声明格式:Typename=value,如intage=20;变量必须先声明后使用,作用域限于所在代码块。先声明后使用02常量声明用final关键字修饰,如finaldoublePI=3.14159;一旦赋值不可修改,通常全大写命名。MAX_SIZE03自动类型转换小范围→大范围自动进行:int→long→float→double,不会丢失数据但float可能有精度误差。小→大自动04强制类型转换大范围→小范围需显式标注,如inti=(int)3.99结果为3(截断),可能丢失精度或溢出。大→小截断JAVAFUNDAMENTALS运算符与表达式(上):算术与关系运算Java的算术运算符包括加减乘除和取余,其中整数除法会自动截断小数部分(5/2=2),自增自减运算符的前置和后置形式会影响表达式的求值顺序。算术运算符+、-、*、/(整数除法截断小数,如5/2=2)、%(取余,如5%2=1,常用于判断奇偶和周期逻辑)i++先用后加、++i先加后用,在循环计数器和数组索引操作中频繁使用,注意避免在复杂表达式中混用5/2=2赋值运算符基本赋值=,复合赋值+=、-=、*=、/=、%=可简化代码,如a+=5等价于a=a+5复合赋值隐含强制类型转换:shorts=1;s+=1;可编译通过,但s=s+1;报类型不匹配错误s+=1关系运算符==、!=、>、<、>=、<=六种比较运算符,结果为boolean类型,常用于if/while条件表达式字符串比较陷阱:==比较引用地址,equals()比较内容。newString("abc")==newString("abc")一定为falseequals()JAVAFUNDAMENTALS运算符与表达式(下):逻辑、条件与位运算逻辑运算符&&和||具有短路特性,能在条件判断中避免空指针等运行时错误;条件运算符?:可简洁替代简单if-else;位运算符直接操作二进制位适用于底层优化。掌握运算符优先级并用括号显式分组,是写出正确且可读代码的关键习惯。01逻辑运算符&&(短路与)和||(短路或)在左侧条件已能确定结果时不再计算右侧,如obj!=null&&obj.isValid()可安全避免空指针异常。ShortCircuit02条件运算符格式为boolean条件?值A:值B,如intmax=(a>b)?a:b;简洁替代简单if-else,但嵌套过深会降低可读性。Ternary?:03位运算符&按位与、|按位或、^异或、~取反、<<左移(乘2的幂)、>>右移,用于底层位操作和性能敏感场景。&|^~<<>>04优先级规则一元>算术>关系>逻辑>赋值,实际编码中建议用括号显式分组而非依赖优先级记忆,提升代码可读性。UseParenthesesControlFlow流程控制:顺序结构与选择结构顺序结构按代码书写顺序依次执行,选择结构通过if-else和switch实现条件分支。if-else适合范围判断和复杂条件组合,switch适合离散值的等值匹配。if-else选择语句Forms三种形式:单if判断、if-else二选一、if-elseif-else多分支,条件必须是boolean表达式Practice始终使用花括号包裹代码块,即使只有一条语句,避免后续添加代码时引发逻辑错误Refactor嵌套if层数过多时考虑提取为方法或改用策略模式,保持代码可读性switch选择语句Traditional传统switch:case后需break防止穿透,default处理未匹配情况,支持int/char/String/枚举类型Enhanced增强switch(Java14+):箭头语法自动中断,支持表达式返回值,代码更简洁安全选择建议当分支条件为离散值时使用switch,当涉及范围判断或复杂逻辑组合时优先使用if-elseChapter·FlowControl流程控制:循环结构与跳转语句for循环适合已知迭代次数的场景,while循环适合条件驱动的未知次数迭代,do-while保证至少执行一次。增强for-each循环是遍历数组和集合的首选方式。for循环三段式结构清晰,初始化、条件判断、更新一目了然,适合数组遍历和计数场景for(init;cond;step)while循环先判断后执行,适合读取流、监听事件等不确定迭代次数的场景,注意避免死循环while(condition)do-while循环先执行后判断,保证循环体至少执行一次,适合菜单交互和用户输入验证do{}while(cond)增强for-each语法简洁、无需管理索引,是遍历数组和Collection集合的推荐方式,但不能修改元素for(x:array)break与continuebreak终止整个循环,continue跳过本次迭代,嵌套循环中建议用方法return替代标签跳转break/continueJAVAFUNDAMENTALS数组的声明、创建与使用数组是Java中存储同类型元素的连续内存结构,创建后长度不可变。实际开发中通常使用ArrayList替代。01一维数组01声明与创建int[]arr=newint[5];或int[]arr={1,2,3,4,5};长度通过arr.length获取,索引从0到length-102遍历方式传统for循环可修改元素,增强for-each适合只读遍历,Arrays.toString(arr)可快速打印数组内容03边界安全Java自动进行数组边界检查,越界访问抛出ArrayIndexOutOfBoundsException,比C/C++更安全02二维数组01创建int[][]matrix=newint[3][4];创建3行4列矩阵,所有元素默认初始化为002锯齿数组Java允许每行长度不同,如int[][]ragged=newint[3][];ragged[0]=newint[2];ragged[1]=newint[5];比C更灵活03嵌套遍历遍历二维数组用嵌套循环:外层控制行(matrix.length),内层控制列(matrix[i].length)STANDARDLIBRARYJava标准开发类库组成Java标准类库(JavaAPI)按包组织,java.lang自动导入提供基础类,java.util提供集合与工具类,java.io/java.nio负责IO操作,支持网络编程,java.sql提供数据库接口。掌握常用包的类和方法,并养成查阅官方API文档的习惯,是高效使用Java的关键。核心基础包java.lang—自动导入,包含Object、String、Math、System、Thread、包装类等最常用基础类java.util—集合框架(List/Set/Map)、工具类、日期时间API(LocalDate/LocalTime)、Random等java.math—BigInteger和BigDecimal,高精度整数和浮点运算,金融计算中必不可少lang·util·mathIO与网络包java.io/nio—文件读写、字节流/字符流、缓冲区操作,java.nio是更现代高效的IO方案,支持通道和选择器—Socket、ServerSocket、URL、HttpURLConnection等,支持TCP/UDP和HTTP请求,实现客户端与服务端通信文件操作与网络通信是服务端开发的核心能力,IO性能直接影响系统吞吐量io·nio·net扩展功能包java.sql—JDBC数据库访问接口,Connection、Statement、ResultSet等核心类,连接关系型数据库执行SQL操作util.concurrent—并发工具包,线程池、锁、并发集合等高级并发编程支持,提升多线程程序性能与稳定性数据库连接与并发控制是企业级应用开发的必备技能sql·concurrentChapter03类和对象理解面向对象编程的核心概念,掌握类的设计与对象的使用Object-OrientedProgramming面向对象编程概述面向对象编程(OOP)以'对象'为核心,通过类定义对象的模板,通过消息实现对象间的协作。其四大特性——封装、继承、多态、抽象——共同构成了现代软件设计的基石。面向对象三要素对象Object现实实体的软件抽象,包含属性(数据/状态)和行为(方法/操作),如Student对象有name属性和study()方法。Entity类Class对象的模板和蓝图,定义同类对象的共同属性和方法,如Student类定义了所有学生对象的通用结构。Template消息Message对象间通信机制,通过调用目标对象的方法发送消息,如student.study("Java")发送学习消息。Communication面向对象四大特性封装将数据和方法捆绑在类中,通过访问控制隐藏内部实现,只暴露必要接口。Private继承子类复用父类属性和方法并可扩展,如GraduateStudent继承Student增加研究方向。Extends多态同一方法调用在不同对象上表现不同行为,如speak()在Dog和Cat上输出不同声音。Override抽象提取共性形成抽象类或接口,忽略不相关细节,如Shape定义draw()由各子类实现。InterfaceObject-OrientedProgramming类的定义与对象的创建和使用类通过class关键字定义,包含属性(描述状态)和方法(描述行为)两部分。使用new关键字创建对象实例后,通过点号操作符访问属性和调用方法。类的定义使用publicclass关键字声明类,内部包含private属性定义状态和public方法定义行为,形成对象的模板蓝图。classStudent对象创建通过new操作符在堆内存中分配空间并调用构造方法初始化,栈中变量存储指向堆内存的引用地址。newStudent()对象使用通过点号操作符访问属性和调用方法,每个对象拥有独立的属性副本,方法代码在内存中共享以节省资源。s.study()封装实践属性声明为private防止外部直接修改,通过public的getter/setter方法提供受控访问与数据校验。getter/setterJava·Methods成员方法:定义、调用与重载成员方法定义了对象的行为能力,通过返回类型、参数列表和方法体构成完整的方法签名。Java采用值传递机制——基本类型传值副本、引用类型传引用副本。方法重载允许同名方法处理不同类型参数,编译器根据参数列表(而非返回类型)区分不同重载版本。方法定义与调用完整格式:'访问修饰符返回类型方法名(参数列表){方法体}',无返回值时返回类型写voidreturn语句用于返回值并结束方法执行,void方法可省略或用return;提前退出void/return参数传递机制值传递:基本类型传递值的副本,方法内修改不影响原变量;引用类型传递引用的副本,可通过引用修改对象属性方法内不能改变引用本身指向新对象(即不能使调用者的引用指向另一个对象),这是Java值传递的关键特征值传递方法重载同一类中多个同名方法,参数列表不同(个数、类型或顺序不同)即构成重载,如add(int,int)和add(double,double)编译器根据调用时传入的参数类型和数量自动匹配对应的重载方法,仅返回类型不同不构成重载OverloadingJavaOOP·Constructor构造方法:对象初始化的核心机制构造方法在new创建对象时自动调用,负责初始化对象属性。其名称必须与类名相同且无返回类型。Java在未定义任何构造方法时提供默认无参构造,一旦定义了自定义构造方法则默认构造消失。01基本语法方法名与类名相同,无返回类型(连void都不写)。示例:publicStudent(Stringn,inta){name=n;age=a;}02默认构造方法未定义任何构造方法时Java自动提供无参构造,属性初始化为默认值(0/null/false);一旦定义自定义构造方法则默认构造失效。03构造方法重载同一类可定义多个参数列表不同的构造方法,如Student()、Student(String)、Student(String,int),提供灵活初始化。04this()调用构造方法内可用this()或this(参数)调用同类其他构造方法,实现逻辑复用,但this()必须是第一条语句。Java·面向对象核心this引用的三种用法this关键字指向当前正在执行方法的对象实例,本质上是"方法调用者"的引用。其三种核心用法都是面向对象编程中的高频操作。区分属性与形参当参数名与成员属性同名时,用this.属性名访问属性,如=name;推荐在setter和构造方法中保持参数名与属性名一致,用this显式区分=name调用其他构造方法构造方法中用this()或this(参数)调用同类其他构造方法,避免初始化代码重复必须是构造方法的第一条语句,且一个构造方法内只能有一个this()调用this(name,0)表示当前对象将当前对象作为参数传递,或在链式调用中returnthis;支持连续方法调用在内部类中用OuterClass.this引用外部类实例,解决同名访问歧义returnthisJavaCore·Static静态成员:类级别的属性与方法static关键字定义的成员属于类而非对象,被所有实例共享。静态属性在方法区只有一份副本,静态方法无需创建对象即可调用,且不能访问非静态成员。静态属性staticintcount用static修饰的成员变量属于类级别,所有对象共享同一份副本,存储在方法区静态区,如staticintcount用于对象计数方法区·共享副本静态方法Math.abs(-5)通过类名直接调用(如Math.abs(-5)),无需创建对象实例,适合工具方法和工厂方法类名直接调用核心限制静态方法内不能访问非静态属性和方法(因为此时可能还没有对象被创建),也不能使用this和super关键字无this/super常见模式publicstaticfinalpublicstaticfinal定义类常量、静态代码块在类加载时初始化、单例模式用static持有唯一实例常量·单例·代码块Encapsulation访问控制与封装设计实践封装的本质是"隐藏实现细节,暴露稳定接口"——属性private、方法public,在setter中加入校验,确保对象状态的合法性与一致性。四种访问修饰符的可见性对比修饰符同类同包子类其他包private✅❌❌❌default(不写)✅✅❌❌protected✅✅✅❌public✅✅✅✅从private到public可见性递增,封装原则是尽可能使用最小访问权限封装最佳实践属性私有化将所有字段声明为private,阻止外部代码直接访问和修改对象的内部状态。公开稳定接口通过public的getter/setter暴露受控访问路径,保持对外接口的一致性和稳定性。数据校验与一致性在setter中加入合法性校验,拒绝非法赋值,确保对象状态始终处于合法且一致的范围内。CHAPTER04实验指导从环境搭建到编程实战,将理论知识转化为动手能力JavaFundamentals实验一:开发环境搭建与HelloWorld环境搭建是Java编程的第一步,通过编译运行HelloWorld程序验证JDK安装和Path环境变量配置是否正确。实验步骤01终端执行javac-version和java-version验证JDK安装,确认显示正确版本号02编写HelloWorld.java源文件,定义publicclass和main方法03在源文件目录执行javacHelloWorld.java编译,确认生成.class文件04执行javaHelloWorld(不带.class后缀)运行,确认输出Hello,World!常见问题排查01"javac不是内部或外部命令"——Path环境变量未正确配置,需检查%JAVA_HOME%\bin是否已加入Path02"类HelloWorld是公共的,应在名为HelloWorld.java的文件中声明"——文件名与public类名不一致,注意大小写03"找不到或无法加载主类"——确认在.class文件所在目录运行,类名不带.java或.class后缀PROGRAMMINGLAB实验二:基础编程练习通过素数判断、整数逆序和数组排序三个经典练习,综合运用运算符、循环与数组操作——从"理解语法"到"解决问题"的关键跨越。素数判断输入正整数n,用for循环从2遍历到√n试除,均不能整除则为素数;1不是素数,2是最小素数。进阶:输出1–10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离子色谱培训考题及详细答案
- 圆柱截交线相关试题及参考答案
- 2025-2026学年日喀则地区日喀则市三下数学期末复习检测试题含答案
- 2025-2026学年成都市郫县数学四年级第二学期期末学业质量监测模拟试题(含答案)
- 2025-2026学年广东省深圳市福田区耀华实验学校数学三年级下学期期中调研试题(含答案解析)
- 2025-2026学年山西省吕梁市兴县数学三年级第二学期期末学业质量监测试题含答案
- 2025-2026学年山东省宁津县育新中学小学部数学四下期末监测模拟试题含答案解析
- 化学实验试题全方位解析及精准答案
- 休克护理考试试题答案与解析要点
- 点火系各类试题及对应答案
- 2026年二级建造师继续教育考试练习题及答案
- 【新教材】人教版(2024)八年级下册物理期末质量监测试卷1(含答案)
- 2026重庆两江新区中医院招聘82人(第一批)笔试备考题库及答案解析
- 2026年幼儿园师德师风的认识
- DB34-T 4351-2022 综合医院康复治疗中心建设规范
- 泉州第五中学2026届数学高一下期末质量检测模拟试题含解析
- 设备管理教学培训课件
- 科技成果转化课件
- 避雷器课件教学
- 辐射安全和防护培训课件
- 天津市河北区2025-2026学年九年级上学期期中考试语文试卷(无答案)
评论
0/150
提交评论