还剩32页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
程序设计Java欢迎学习Java程序设计课程!本课程将带领大家深入了解Java这门强大的编程语言,从基础语法到高级特性,全面掌握Java程序开发的各个方面无论你是编程新手还是有其他语言经验的开发者,这门课程都能帮助你构建坚实的Java编程基础课程目标和学习成果掌握核心概念培养实践能力12学习Java编程的基本语法和通过大量的实际编程练习,培结构,包括变量、数据类型、养独立设计和开发Java应用运算符、控制流程和数组等程序的能力学会使用常用开理解面向对象编程的核心概发工具和调试技术,提高代码念,如类、对象、继承、多态质量和开发效率和封装构建综合技能的历史和发展Java年起源19911詹姆斯·高斯林James Gosling及其团队在Sun微系统公司开始开发Oak语言,这是Java的前身最初目标是用于消费电子产品的编程语言年正式发布19952Sun微系统公司正式发布Java
1.0版本,提出一次编写,到处运行的口号这一时期,Java主要应用于Web浏览器中的小程序Applet年代的发展20003Java平台不断扩展,发布了J2SE、J2EE和J2ME三个版本,分别针对标准版、企业版和移动版应用这一时期Java在企业级应用开发中获得广泛应年后的演进2010用4Oracle公司收购Sun微系统后继续推动Java发展Java8引入lambda表达式等现代编程特性,Java9引入模块系统,近年来Java持续以半年为周期快速迭代更新的特点Java简单性面向对象分布式健壮性Java语言的设计借鉴了C++但Java是一种纯面向对象的语Java天生支持Internet协议Java的强类型机制和异常处移除了其中复杂的特性,如言,一切皆为对象除基本数如HTTP和FTP,并提供了丰理功能增强了程序的可靠指针运算、操作符重载和多据类型外它支持封装、继富的网络编程库这使得开性编译时的严格类型检查重继承等Java提供自动内承和多态等面向对象的核心发基于网络的应用变得相对和运行时的自动检查能够早存管理和垃圾回收机制,使概念,并强制以类为基本单简单,能够方便地构建分布期发现并解决潜在问题,减程序员能更专注于应用逻辑位组织代码,促进代码复用式系统和web应用少程序崩溃的可能性而非底层细节和模块化设计的特点(续)Java安全性体系结构中立可移植性解释型Java提供了多层安全机制,包括Java编译器生成与平台无关的字Java的基本数据类型大小在所有Java使用解释执行和即时编译JIT类加载器、字节码验证器和安全管节码,而非特定机器的机器码这平台上保持一致,消除了不同平台相结合的方式运行程序虚拟机先理器它不允许直接访问内存,禁些字节码可以在任何实现了Java上数据类型大小不一致导致的兼容解释执行字节码,然后对热点代码止指针运算,并建立了严格的访问虚拟机JVM的平台上运行,实现性问题标准库和API也确保了跨进行即时编译优化,平衡了开发效控制模型,有效防止恶意代码对系了一次编译,到处运行的承诺平台的一致行为,提高了代码移植率和运行性能统的破坏性的特点(续)Java动态性1运行时动态加载和动态链接多线程2内置线程支持和同步机制高性能3JIT编译和优化的虚拟机执行Java的高性能特性主要来自于即时编译JIT技术,它能够将热点字节码编译为本地机器码,显著提升执行效率虚拟机还会进行各种优化,如内联、死代码消除和循环优化等,进一步提高性能Java提供了内置的多线程支持,开发者可以方便地创建和管理线程,并通过synchronized关键字和各种并发工具进行线程同步这使得开发高并发应用程序变得相对简单在动态性方面,Java支持运行时反射、类加载和动态代理等机制,使程序能够在运行时检查和修改自身的结构和行为,为框架开发和插件系统提供了强大支持开发环境搭建Java下载JDK访问Oracle官网或OpenJDK网站,下载适合你操作系统的Java开发工具包JDKJDK包含了Java运行环境JRE以及开发工具,如编译器javac和调试器等安装配置按照安装向导完成JDK安装设置环境变量JAVA_HOME指向JDK安装目录,并将JDK的bin目录添加到系统PATH变量中,以便在命令行中使用Java工具验证安装打开命令提示符或终端,输入java-version和javac-version命令,确认Java环境已正确安装如果显示版本信息,说明安装成功选择IDE选择并安装集成开发环境IDE,主流选择有Eclipse、IntelliJ IDEA和NetBeansIDE提供代码编辑、调试、项目管理等功能,大大提高开发效率第一个程序Java HelloWorld编写代码编译程序创建一个名为HelloWorld.java的文件,打开命令行工具,导航到源代码文件所输入以下代码在目录,输入命令javacHelloWorld.javapublic classHelloWorld{成功编译后,将生成HelloWorld.classpublic staticvoid字节码文件mainString[]args{System.out.printlnHello,World!;}}运行程序在命令行中输入java HelloWorld程序将在控制台输出Hello,World!程序的基本结构Java包声明位于源文件的第一行,使用package关键字定义类所在的包包是组织和管理Java类的机制,可以避免命名冲突并提供访问保护例如package com.example.project;导入声明使用import关键字导入需要使用的类或包可以导入单个类import java.util.Scanner;或整个包中的所有类import java.util.*减少代码中使用全限定名的必要类定义使用class关键字定义一个类,包含类的属性字段和方法类名必须与文件名相同对于public类类体在花括号{}内定义,是Java程序的基本组织单位主方法程序的入口点,具有固定签名public staticvoid mainString[]argsJava虚拟机在启动程序时首先调用这个方法args参数用于接收命令行参数的基本语法规则Java大小写敏感1Java是大小写敏感的语言,标识符Hello和hello被视为不同的标识符关键字、变量名、方法名和类名等都必须使用正确的大小写形式例如,public必须全部小写,不能写成Public或PUBLIC命名规则2类名首字母应大写,遵循Pascal命名法如HelloWorld方法名和变量名首字母小写,采用驼峰命名法如getName常量通常全部大写,单词间用下划线分隔如MAX_VALUE包名全部小写如java.lang语句和代码块3Java语句以分号;结束代码块用花括号{}包围,可以包含多条语句代码中的空格、制表符和换行符统称为空白用于提高代码可读性,编译器会忽略多余的空白注释4单行注释以//开始,多行注释在/*和*/之间,文档注释以/**开始并以*/结束注释不会被编译,用于解释代码逻辑,提高代码可读性和可维护性的数据类型Java引用数据类型包括类、接口和数组引用类型的变量存储2的是对象的引用内存地址,而非对象本基本数据类型身所有引用类型都直接或间接继承自Java提供8种基本数据类型,分为4类整java.lang.Object类数类型byte、short、int、long、浮点类1包装类型型float、double、字符类型char和布尔类型boolean这些类型直接存储值,而为每种基本类型提供对应的包装类非引用Integer、Long、Double等包装类将基本类型值包装为对象,支持泛型操作和调用其3他功能方法Java5引入自动装箱和拆箱特性变量和常量变量定义变量作用域变量是存储数据的内存位置,由根据声明位置不同,变量分为成数据类型、变量名和可选的初始员变量类变量和实例变量和局值组成定义格式数据类型变部变量类变量静态变量用量名[=初始值];static关键字修饰,属于类本身;实例变量属于对象;局部变示例int count=10;或者量在方法或代码块中定义,只在String name;其作用域内有效常量定义常量是不可改变的值,使用final关键字声明一旦赋值后不能再修改格式final数据类型常量名=值;按照惯例,常量名通常全部大写,如final doublePI=
3.14159;运算符和表达式类别运算符描述算术运算符+,-,*,/,%,++,--用于基本的数学运算关系运算符==,!=,,,=,=比较两个值,返回布尔结果逻辑运算符,||,!进行逻辑与、或、非运算位运算符,|,^,~,,,操作二进制位赋值运算符=,+=,-=,*=,/=,%=为变量赋值条件运算符:三元运算符,根据条件返回值表达式是由变量、运算符和方法调用构成的符合Java语法的组合,它们会被计算出一个值运算符优先级决定了表达式中各部分的计算顺序,可以使用圆括号来显式指定计算顺序运算符的结合性决定了相同优先级的运算符的计算顺序例如,大多数二元运算符是左结合的,而赋值运算符是右结合的了解这些规则有助于编写正确的表达式类型转换自动类型转换强制类型转换引用类型转换当较小类型的值赋给较大类型的变量时,当较大类型的值赋给较小类型的变量时,需对象引用也可以进行类型转换将子类对象Java会自动进行类型提升例如,将int值赋要使用强制类型转换,使用格式目标类型引用转换为父类称为向上转型自动;将父给long变量这种转换是安全的,不会丢失表达式例如int i=int
3.14;这种转换类对象引用转换为子类称为向下转型需显式数据转换顺序byte→short→int→可能导致数据精度丢失或溢出转换,且对象实际类型必须是目标类型long→float→double控制流程语句if-else简单语句语句if if-else最基本的条件判断,只有当条件为真时执行代码块条件为真执行if代码块,否则执行else代码块语法语法if条件{if条件{//条件为真时执行的代码//条件为真时执行的代码}}else{//条件为假时执行的代码}语句if-else if-else多条件判断,按顺序测试每个条件,执行第一个为真的代码块语法if条件1{//条件1为真时执行的代码}else if条件2{//条件2为真时执行的代码}else{//所有条件都为假时执行的代码}控制流程语句switch基本语法使用示例穿透特性switch语句允许基于一个变量的值选择执在switch语句中,表达式的值会与每个如果省略break语句,会出现穿透现象,行不同的代码块支持byte、short、case的值进行比较匹配成功则执行相应即匹配成功后会继续执行后续case的代int、char、枚举类型和String类型Java7代码,直到遇到break或switch结束如码,直到遇到break或switch结束这个及以上每个case分支以break结束,避果没有匹配的case,且提供了default分特性可以用于多个case共享相同处理逻辑免执行后续代码default分支处理未匹配支,则执行default分支代码的情况但如果非故意省略break,可能的情况导致逻辑错误循环结构循环for12初始化部分条件判断部分在循环开始前执行一次,通常用于初始化循环计数器可以声明每次循环迭代前检查条件,条件为真则继续循环,为假则退出循新变量或使用已有变量,也可以为空格式初始化表达式;环如果省略,默认为真,形成无限循环格式布尔表达式;3迭代部分每次循环体执行后执行,通常用于更新循环计数器可以包含多个表达式,用逗号分隔格式更新表达式;for初始化表达式;布尔表达式;更新表达式{//循环体}//示例打印数字1到5for int i=1;i=5;i++{System.out.printlni;}Java5引入增强for循环for-each,简化了对数组和集合的遍历for元素类型变量名:数组或集合{...}循环结构和循环while do-while循环循环while do-whilewhile循环在每次迭代前检查条件,条件为真时执行循环体,为假时跳do-while循环在每次迭代后检查条件,这意味着循环体至少会执行一出循环如果条件一开始就为假,循环体一次也不会执行适用于不知次,无论条件是否为真当你需要保证代码至少执行一次时,应选择道确切循环次数但有明确结束条件的场景do-while循环while条件{do{//循环体//循环体}}while条件;//示例//示例inti=1;int j=1;while i=5{do{System.out.printlni;System.out.printlnj;i++;j++;}}while j=5;跳转语句和break continue语句语句带标签的和break continuebreak continuebreak语句用于立即终止当前循环continue语句跳过当前迭代的剩或switch语句,并将控制权转移余部分,直接进入下一次迭代在Java支持带标签的break和到循环或switch语句后的下一条for循环中,控制流会跳转到更新continue语句,用于在嵌套循环语句当在嵌套循环中使用时,表达式;在while或do-while循环中跳转到指定的外层循环标签必break只会退出最内层的循环中,控制流会跳转到条件判断部分须放在循环语句前,格式为标签名:这在需要从内层循环跳出到特定外层循环时非常有用for inti=1;i=10;i++{for inti=1;i=10;if i==5{i++{outer:for inti=1;break;//循环在if i%2==0{i=3;i++{i=5时终止continue;//跳for intj=1;j}过偶数=3;j++{}if i*j4System.out.printlni;{}System.out.printlni;break outer;}//跳出外层循环}System.out.printlni+*+j+=+i*j;}}数组的定义和使用数组声明数组是相同类型元素的有序集合,每个元素通过下标访问在Java中声明数组有两种方式类型[]数组名或类型数组名[]例如int[]numbers或int numbers[]此时只完成了声明,数组尚未分配内存创建数组使用new关键字创建数组实例并分配内存,格式为数组名=new类型[长度]例如numbers=new int
[10]这会创建一个包含10个元素的整型数组,所有元素被初始化为默认值(数值类型为0,布尔类型为false,引用类型为null)初始化数组声明和创建可以合并int[]numbers=new int
[10]还可以使用数组字面量直接初始化int[]numbers={1,2,3,4,5},编译器会自动计算数组长度数组元素通过索引赋值numbers
[0]=100;索引从0开始,到length-1结束访问数组通过索引访问数组元素int firstElement=numbers
[0]可以通过数组的length属性获取数组长度int size=numbers.length访问超出范围的索引会抛出ArrayIndexOutOfBoundsException异常多维数组二维数组声明与创建不规则数组二维数组可以看作是数组的数组声明和创建二维数Java支持创建每行长度不同的不规则或锯齿状数组组的方式如下//声明int[][]irregular=new int
[3][];int[][]matrix;irregular
[0]=new int
[2];//创建irregular
[1]=new int
[4];matrix=new int
[3]
[4];//3行4列的数组irregular
[2]=new int
[3];//声明并创建int[][]matrix=new int
[3]
[4];二维数组初始化与访问使用嵌套花括号初始化二维数组int[][]matrix={{1,2,3},{4,5,6},{7,8,9}};//访问元素int element=matrix
[1]
[2];//获取第2行第3列的元素值为6面向对象编程概述多态1同一操作作用于不同对象,产生不同行为继承2子类继承父类的特性,实现代码复用封装3隐藏实现细节,只暴露必要的接口抽象4关注对象本质特性而非细节面向对象编程是一种以对象为中心的编程范式,它将数据和操作数据的方法组合成对象,使程序结构更加直观、灵活和可维护Java作为一种纯面向对象的编程语言,通过类和对象的概念实现了这一范式抽象是面向对象的基础,它允许我们关注对象的关键特性而忽略不相关的细节封装通过访问控制机制保护对象的内部状态,防止外部直接访问和修改,增强了代码的安全性和可维护性继承支持代码复用和层次结构的建立,子类可以继承父类的特性并添加自己的独特功能多态则允许通过统一的接口操作不同类型的对象,提高了代码的灵活性和扩展性这四大特性共同构成了面向对象编程的核心概念类的定义和对象的创建类的定义对象的创建类是对象的模板或蓝图,定义了一组对象共有的属性和行为在Java中,使用class关键对象是类的实例,代表类定义的具体实体使用new关键字和构造方法创建对象对象在字定义类类通常包含字段属性和方法行为,还可以包含构造方法、初始化块等其他成堆内存中分配空间,包含其状态字段值和行为方法员//创建Student类的对象public classStudent{Student student1=new Student张三,18;//字段Student student2=new Student李四,19;private Stringname;private int age;//调用对象的方法student
1.study;//输出张三正在学习//构造方法student
2.study;//输出李四正在学习public StudentStringname,int age{this.name=name;this.age=age;}//方法public voidstudy{System.out.printlnname+正在学习;}}成员变量和局部变量类变量使用static关键字修饰的成员变量称为类变量或静态变量类变量属于类本身2实例变量而非对象,所有对象共享同一个类变量类变量在类加载时创建并初始化,定义在类中、方法外的非静态变量称为在程序结束时销毁实例变量或成员变量每个对象都有自己的实例变量副本,可以有不同的值1局部变量实例变量在对象创建时初始化为默认值,并在对象被销毁时一同销毁定义在方法、构造方法或代码块中的变量称为局部变量局部变量只在其声明3的方法或代码块内可见,必须先初始化后使用没有默认值,方法执行完毕后自动销毁方法的定义和调用方法定义方法参数12方法是完成特定功能的代码块,由方法头和方法体组成方法头包括修方法可以接受零个或多个参数,参数在方法定义时声明,在调用时传入饰符、返回类型、方法名和参数列表;方法体包含实现功能的代码,由Java使用值传递机制对于基本类型,传递的是值的副本;对于引用花括号{}包围如果返回类型不是void,方法必须使用return语句返回类型,传递的是引用的副本指向同一对象从Java8开始,支持可变相应类型的值参数,格式为类型...参数名方法调用方法重载34实例方法通过对象调用对象名.方法名参数列表静态方法可以通过同一个类中可以定义多个同名但参数列表不同参数类型、个数或顺序类名直接调用类名.方法名参数列表,也可以通过对象调用,但不推不同的方法,这称为方法重载方法重载提高了代码的可读性和灵活荐这种方式方法调用时,实参顺序必须与形参列表匹配,类型也必须性,允许同一操作应用于不同类型或数量的数据重载方法的返回类型兼容可以相同也可以不同,但仅返回类型不同不构成重载构造方法构造方法特点默认构造方法构造方法是一种特殊的方法,用于初始化对象构造方法的名称如果没有定义任何构造方法,编译器会自动提供一个无参数的默必须与类名相同,没有返回类型甚至void也不能有构造方法认构造方法,执行默认初始化(所有成员变量设为默认值)一在创建对象时由new操作符自动调用,不能通过对象显式调用旦定义了任何构造方法,编译器将不再提供默认构造方法,如果需要无参构造,必须显式定义构造方法重载一个类可以有多个构造方法,通过参数列表的不同进行区分,这称为构造方法重载重载的构造方法可以提供不同的初始化方式,增加了对象创建的灵活性public classPerson{private Stringname;private int age;//无参构造方法public Person{this.name=未知;this.age=0;}//带参数的构造方法public PersonStringname,intage{this.name=name;this.age=age;}}关键字this引用当前对象调用其他构造方法在方法中传递自身this关键字指代当前正在执行方this用于在一个构造方法中调用当需要将当前对象作为参数传递法的对象实例可以通过this访同一个类的另一个构造方法,达给其他方法时,可以使用this问当前对象的成员变量和方法,到代码复用目的this调用必须这在事件处理、回调等场景中很特别是当局部变量与成员变量同是构造方法的第一条语句通过常见例如名时,this用于区分例如不同的参数组合,可以实现构造otherObject.someMethodthithis.name表示成员变量name,方法链,避免代码重复s将当前对象传递给而不是局部变量name otherObject的someMethod方法public Person{this未知,0;//调用带参构造方法}public PersonStringname,intage{this.name=name;this.age=age;}方法重载重载概念重载规则重载示例方法重载是指在同一个类中定义多个名称相同但参重载方法必须具有不同的参数列表,即参数类型、public classCalculator{数列表不同的方法方法重载为相似功能提供了统数量或顺序至少有一项不同重载与方法的返回类//两个整数相加一的方法名,增强了代码的可读性和灵活性调用型和访问修饰符无关,仅依赖于参数列表换句话public intaddint a,int b{重载方法时,Java编译器根据参数的类型、数量和说,不能仅通过更改返回类型或访问修饰符来重载return a+b;顺序确定调用哪个方法方法}//三个整数相加public intaddint a,int b,intc{return a+b+c;}//两个double类型相加public doubleadddouble a,double b{return a+b;}}封装和访问控制public1所有类都可访问protected2同包及子类可访问默认无修饰符3同包内可访问private4仅当前类可访问封装是面向对象编程的基本原则之一,指的是将数据属性和操作数据的方法行为绑定在一起,并对外部隐藏实现细节,只暴露必要的接口封装提高了代码的安全性和可维护性,降低了系统的复杂性在Java中,封装主要通过访问修饰符实现成员变量通常声明为private,只能通过公共的getter和setter方法访问,这样可以控制数据的读写权限,并在必要时添加数据验证逻辑访问修饰符决定了类成员的可见性范围由最严格的private到最开放的public,提供了不同级别的访问控制合理使用访问修饰符,是良好封装实践的重要部分,能够有效控制类与类之间的交互方式继承的概念和实现继承概念继承是面向对象编程中的一种机制,允许一个类子类获取另一个类父类的成员变量和方法继承表示是一种的关系,体现了类之间的层次结构通过继承,可以实现代码复用,提高程序的可扩展性和可维护性Java继承特点Java只支持单继承,即一个类只能有一个直接父类虽然不支持多继承,但一个类可以实现多个接口,从而获得类似多继承的效果所有Java类都直接或间接继承自java.lang.Object类,它是Java类层次结构的根类继承语法使用extends关键字声明继承关系子类继承父类的非私有成员字段和方法,但不继承构造方法子类可以重写父类的方法,也可以添加自己特有的成员父类用protected修饰的成员,子类可以访问public classAnimal{protected Stringname;public voideat{System.out.printlnname+正在吃东西;}}public classDog extendsAnimal{public DogStringname{this.name=name;//访问父类的protected成员}public voidbark{System.out.printlnname+汪汪叫;}}方法的重写重写定义重写规则12方法重写覆盖是指子类提供一个与父类方法签名完全重写方法的签名方法名和参数列表必须与父类方法完相同的方法,用自己的实现替换父类的实现方法重全相同重写方法的返回类型必须与父类方法相同或写是实现多态的关键机制,使得相同的方法调用在不是其子类型协变返回类型重写方法的访问修饰符不同的对象上产生不同的行为,提高了代码的灵活性和能比父类方法更严格重写方法不能抛出比父类方法可扩展性更广泛的受检异常注解3@Override使用@Override注解标记重写方法是一个良好实践这样做有两个好处清晰表明该方法重写了父类方法,增强代码可读性;如果方法签名与父类不匹配,编译器会报错,避免意外创建新方法而非重写public classAnimal{public voidmakeSound{System.out.println动物发出声音;}}public classCat extendsAnimal{@Overridepublic voidmakeSound{System.out.println喵喵喵;}}关键字super访问父类成员调用父类构造方法调用被重写的方法super关键字用于引用父类的成员变量和方super用于调用父类的构造方法,必须是子在子类重写父类方法后,通过super关键字法当子类与父类成员同名时,通过super类构造方法的第一条语句如果不显式调用可以调用父类被重写的方法实现这在子类可以明确指定访问父类成员,避免歧义例super,编译器会自动插入对父类无参构造需要扩展而非完全替换父类功能时非常有如,super.name引用父类的name字段,的调用若父类没有无参构造,子类必须显用例如,子类可以先调用super.methodsuper.method调用父类的method方法式调用父类其他构造方法,例如super参执行父类逻辑,然后再添加自己的逻辑数public classPerson{private Stringname;public PersonStringname{this.name=name;}}public classStudent extendsPerson{private int studentId;public StudentStringname,intstudentId{supername;//调用父类构造方法this.studentId=studentId;}}多态性定义与类型实现机制1多态允许不同类型的对象对同一消息做出不同响应通过继承、接口和方法重写实现2应用场景4动态绑定3提高代码灵活性、可扩展性和可维护性运行时决定调用哪个方法实现多态是面向对象三大特性之一,指的是同一操作作用于不同的对象,可以有不同的解释和产生不同的执行结果在Java中,多态主要通过方法重写和向上转型实现实现多态的关键步骤1继承或实现接口子类继承父类或实现接口;2方法重写子类重写父类或接口的方法;3向上转型使用父类类型引用指向子类对象例如Animal animal=new Dog;多态实现了依赖抽象而非具体实现的设计原则,提高了程序的灵活性和可扩展性在实际应用中,可以针对抽象类或接口编写代码,而无需关心具体实现类的细节,大大降低了系统各部分之间的耦合度抽象类定义与特点抽象方法抽象类是使用abstract关键字修饰的类,不能被实例化,只能被继承抽象抽象方法是使用abstract关键字声明但没有实现的方法,没有方法体,以分类可以包含抽象方法没有实现的方法和具体方法有实现的方法抽象类主号结束抽象方法必须在子类中实现,除非子类也是抽象类抽象方法不能要用于定义子类的共同特性和行为规范是private,因为private方法无法被子类访问和重写public abstractclass Shape{//抽象方法public abstractdouble calculateArea;//具体方法public voiddisplay{System.out.println这是一个形状;}}抽象类与继承继承抽象类的子类必须实现其所有抽象方法,或者声明自己也是抽象类抽象类可以有构造方法,但不能直接创建抽象类的实例,构造方法在子类实例化时通过super调用public classCircle extendsShape{private doubleradius;public Circledoubleradius{this.radius=radius;}@Overridepublic doublecalculateArea{return Math.PI*radius*radius;}}。
个人认证
优秀文档
获得点赞 0