版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言入门第1章第1章Java语言入门.pptx第2章Java语法基础.pptx第3章
数据类型.pptx第4章Java面向对象.pptx第5章
异常与容错.pptx第6章Java函数指针与函数式编程.pptx第7章Java文件与IO机制.pptx第8章
拓展:Java界面编程.pptx第9章
并发与多线程.pptx第10章
拓展:虚拟机机制.pptx全套可编辑PPT课件
学习目标掌握Eclipse的安装和配置方法。掌握JDK的环境安装。了解JVM、JRE和JDK之间的区别。知识目标掌握Java环境的下载和安装方法。掌握Java程序的编写方法。技能目标学习目标通过Java语言的学习,培养和提高逻辑思维与分析能力,能够理解和分析复杂的程序逻辑,从而有效地解决问题。形成自主学习的习惯,具备持续学习的意识,能够主动寻找和学习新的Java技术和知识,不断更新自己的知识体系。培养团队协作精神,能够与他人有效地合作完成Java项目。同时,提高沟通能力,能够清晰地表达自己的观点和需求,与团队成员建立良好的合作关系。树立职业道德观念,遵守编程规范和行业标准,保持诚信意识,不抄袭、不剽窃他人代码,尊重他人的知识产权。素养目标1.1JVM/JRE/JDKJava既是一种编程语言,也是一种运行环境。通常,Java程序的源代码被编译成.class字节码后,需要放到Java虚拟机(JVM)环境中运行。为了满足开发者和用户的不同需求,Java提供了两套方案:JDK和JRE。JVM、JRE、JDK之间的关系如图1.1-1所示。图1.1-1JVM、JRE、JDK之间的关系(1)JVM(Javavirtualmachine)由于Java程序在运行前会被编译成.class字节码,而字节码并不是直接可被硬件执行的机器码,因此需要JVM对类文件加载、解释和验证,并以虚拟的方式逐条执行其中的指令。(2)JRE(Javaruntimeenvironment)是Java程序的运行时环境,专为在设备终端上运行Java程序而设计,因此只包含JVM和运行时所需要的类库。(3)JDK(Javadevelopmentkit)Java程序开发工具包,专为开发人员设计,其中包含JRE、编译器和调试器等开发工具。1.1JVM/JRE/JDK1.2JDK环境安装图1.2-1下载JDK1.2.1安装JDK安装包第一步下载JDK。进入JDK官网/java-se-ri/11,其页面如图1.2-1所示。在该页面上,选择适合自己需求的JDK版本进行下载。1.2JDK环境安装第二步安装JDK。双击下载好的JDK安装包,系统会弹出安装窗口,单击“下一步”按钮,如图1.2-2所示。图1.2-2安装JDK1.2JDK环境安装单击“更改”按钮,选择安装目录,不建议安装在C盘中,然后单击“下一步”按钮,如图1.2-3所示。图1.2-3选择安装的目录页面会显示安装进度,如图1.2-4所示。图1.2-4安
装
进
度1.2JDK环境安装安装完成,单击“关闭”按钮,如图1.2-5所示。图1.2-5安
装
完
成1.2JDK环境安装以上步骤完成后,在DOC窗口运行Java命令,会出现图1.2-6所示的结果。图1.2-6运
行
结
果1.2JDK环境安装有些初学者往往会认为,这样JDK安装就完成了。但实际上还需要配置环境变量,否则无法进行程序开发。这是因为安装包安装完成后,往往只会将Java命令的所在路径添加到环境变量中,但是编译所需要的命令并不在这个路径下。因此,必须重新设置环境变量,以确保编译命令能够被正确识别和执行,如图1.2-7所示。图1.2-7安
装
完
成1.2JDK环境安装1.2JDK环境安装图1.2-8单击“环境变量”按钮1.2.2配置环境变量打开控制面板,单击“系统和安全”→“系统”→“高级系统设置”,会弹出“系统属性”对话框,切换到“高级”选项卡,单击“环境变量”按钮,然后进行设置,如图1.2-8所示。系统弹出“环境变量”对话框,单击最下面的“新建”按钮,新建一个名为“JAVA_HOME”(代表JDK安装路径)的变量,其值对应的是JDK的安装路径,如图1.2-9所示。图1.2-9新建JAVA_HOME1.2JDK环境安装系统弹出“新建系统变量”对话框,设置变量名为JAVA_HOME(代表JDK安装路径),变量值对应的是JDK的安装路径,如图1.2-10所示。图1.2-10配置JAVA_HOME1.2JDK环境安装163在系统变量中找一个名称为“Path”的变量(见图1.2-11),如果没有就新建一个(见图1.2-12)。在它的变量值里面追加代码“%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”。图1.2-11编辑Path变量1.2JDK环境安装图1.2-12添加Path变量1.2JDK环境安装然后根据提示单击“确定”按钮即可。至此,Java环境就安装配置好了。若需要查看已安装的Java,则可打开命令行,使用javac-version命令查看版本。若出现图1.2-13所示的结果,则表示环境配置正确,否则表示配置出错。图1.2-13查看Java版本1.2JDK环境安装1.2JDK环境安装图1.2-14安装Eclipse1.2.3下载安装Eclipse进入Eclipse官网(/downloads/)进行下载。登录官网之后,下载最新版本的安装包并进行安装。安装步骤如图1.2-14所示。选择Eclipse版本,一般选择第二个版本,如图1.2-15所示。图1.2-15选择Eclipse版本1.2JDK环境安装根据自己的计算机配置选择合适的安装路径,如图1.2-16所示。图1.2-16选择安装路径1.2JDK环境安装选择安装Eclipse软件的版本,单击“AcceptNow”按钮,如图1.2-17所示。图1.2-17单击“AcceptNow”按钮1.2JDK环境安装接下来开始安装Eclipse,如图1.2-18所示。图1.2-18开
始
安
装1.2JDK环境安装安装完成后,系统会弹出图1.2-19所示的界面,单击“LAUNCH”按钮即可开始运行Eclipse。图1.2-19运行Eclipse1.2JDK环境安装系统弹出“EclipseIDELauncher”对话框,在其中选择Workspace(工作区),就是开发的所有Java项目的地址。选中“Usethisasthedefaultanddonotaskagain”复选框后,下次不需要再选择工作区了,如图1.2-20所示。图1.2-20设置文件路径1.2JDK环境安装Eclipse软件首页如图1.2-21所示。图1.2-21Eclipse软件首页1.2JDK环境安装图1.3-1新建第一个Java项目1.3第一个Java程序使用Eclipse创建Java程序,首先打开Eclipse软件,单击“File”→“New”→“Project”,如图1.3-1所示,最后单击创建的Java项目。图1.3-2为Java项目命名1.3第一个Java程序然后在弹出的“NewJavaProject”对话框中为新建的Java项目命名,如图1.3-2所示。图1.3-3新建一个Java包1.3第一个Java程序接着单击Java项目,单击“demo”→“New”→“Package”,如图1.3-3所示,新建一个Java包(Package)。图1.3-4新
建
包
名在弹出的“NewJavaPackage”窗口中为Java包命名(如demo),也可以使用默认名称,如图1.3-4所示。1.3第一个Java程序图1.3-5新建Java类1.3第一个Java程序右击新建的包,在弹出的快捷菜单中选择“New”→“Class”选项,如图1.3-5所示,再创建一个Java类。图1.3-6自
定
义
类
名在弹出的“NewJavaClass”窗口中自定义一个类的名称,如图1.3-6所示。1.3第一个Java程序图1.3-7输
入
代
码1.3第一个Java程序在弹出的代码框中输入一条输出语句“System.out.println("HelloWorld");”如图1.3-7所示。图1.3-8运
行
程
序在mian()方法所在的窗口右击,然后在弹出的快捷菜单中选择“RunAs”→“JavaApplication”选项,运行程序。如果代码未保存,就会弹出图1.3-8中的对话框。1.3第一个Java程序图1.3-9程序运行结果1.3第一个Java程序单击“OK”按钮,程序运行结果就会在输出框中显示出来,如图1.3-9所示。前面已经新建了第一个Java类HelloWorld,并在Eclipse中成功运行了它。1.4Java程序执行和编译接下来右击项目名称,在弹出的快捷菜单中选择“Properties”,系统会弹出“PropertiesforIntroduction”窗口。然后,在“Resource”选项卡中单击“Location”按钮,这样就可以定位到HelloWorld项目所在的目录,如图1.4-1所示。操作图1.4-1查看文件路径1.4Java程序执行和编译在该目录下的/bin/introduction子目录中,可以发现有HelloWorld.class文件。如果删除该文件,那么再次运行HelloWorld类时,将会出现以下错误。1.4Java程序执行和编译出现这种问题的原因在于,Java是一种编译语言,其源代码(HelloWorld.java)必须先被编译成字节码文件(HelloWorld.class),然后这个字节码文件才能被Java虚拟机(JVM)执行。Eclipse只是协助开发者完成了编译和运行的步骤。因此,一旦缺少了HelloWorld.class文件,运行操作也就无法成功了。错误:找不到或无法加载主类introduction.HelloWorldJava使用javac命令对源代码进行编译,而使用Java命令运行编译好的类。下面在CMD中进入项目的src目录,并编译该Java程序,如图1.4-2所示。1.4Java程序执行和编译图1.4-2DOS窗口编译然后进入项目的\bin目录会发现编译好的目录和类文件HelloWorld.class,如图1.4-3所示。1.4Java程序执行和编译图1.4-3运
行
结
果这时,在该目录下执行Java命令,可以看到,Java程序执行成功并在控制台上打印出HelloWorld,如图1.4-4所示。1.4Java程序执行和编译图1.4-4程序运行结果值得注意的是:javac编译源代码时,使用的命令行为“javacintroduction\HelloWorld.java-d..\bin\”,此处参数直接是HelloWorld.java文件的相对路径;而在执行时,则使用命令行“javaintroduction.HelloWorld”,此处参数是类名。Java程序不仅可以在未打包的状态下执行,而且提供了一种将程序打包后执行的机制,具体如下。1.5JAR包及其执行(1)Java程序中的部分代码可以从根目录或其他指定目录被打包成.jar文件(Java归档文件),随后这些.jar文件可以被其他Java程序作为库或依赖进行调用。(2)还可以将整个Java主类及其依赖项打包到一个.jar文件中,然后通过java-jar命令直接执行该.jar文件。图1.5-1创建BeCalled类1.5.1JAR包的调用首先创建一个HelloJar项目,在该项目中创建一个BeCalled类,如图1.5-1所示。1.5JAR包及其执行其代码如下。1.5JAR包及其执行packagecom.hello;publicclassBeCalled{publicvoidhello(){System.out.println("hellocalled");}}按照以下步骤打包该项目。首先在“HelloJar”项目上右击,然后在弹出的快捷菜单中选择“Export”选项,如图1.5-2所示。1.5JAR包及其执行图1.5-2编
写
代
码系统弹出“Export”窗口,在其中选择“Java”→“JARfile”选项,然后单击“Next”按钮,如图1.5-3所示。1.5JAR包及其执行图1.5-3创
建
文
件在弹出的窗口中选中“Exportgeneratedclassfilesandresources”复选框,然后将该项目生成的.class类文件打包到.jar文件,最后单击“Finish”按钮,如图1.5-4所示。1.5JAR包及其执行图1.5-4生成.jar文件这样就打包了一个.jar文件。然后在Introduction项目中引入该JAR包文件。在Introduction项目上右击,然后在弹出的快捷菜单中选择“Properties”选项,会出现图1.5-5所示的界面。1.5JAR包及其执行图1.5-5Introduction项目单击“AddExternalJARs”按钮,选择刚才打包的文件,然后在弹出的“JARSelection”对话框中单击“打开”按钮,最后单击“ApplyandClose”按钮,如图1.5-6所示。1.5JAR包及其执行图1.5-6选
择
文
件创建一个Java程序时需要先创建类,其代码如下。1.5JAR包及其执行packagecom.jar.hello;importcom.hello.BeCalled;publicclassCallHello{publicstaticvoidmain(String[]args){BeCalledbeCalled=newBeCalled();beCalled.hello();}}1.5JAR包及其执行执行CallHello类,其运行效果如图1.5-7所示。图1.5-7运
行
效
果图1.5-8打包.jar文件1.5.2可执行JAR包下面打包一个可执行的.jar文件,如图1.5-8所示。1.5JAR包及其执行其代码如下。1.5JAR包及其执行publicclassJarMain{publicstaticvoidmain(String[]args){System.out.println("JarMainsayhello");}}现在将其打包。打包方式与前面几步相同。首先在项目名称上右击,然后在弹出的快捷菜单中选择“Export”选项,系统会弹出“Export”窗口,单击“Next”按钮,如图1.5-9所示。1.5JAR包及其执行图1.5-9“Export”窗口图1.5-10选择指定JAR文件在弹出的“JARExport”窗口中指定JAR文件,并选中图1.5-10所示的复选框,再单击“Next”按钮。1.5JAR包及其执行图1.5-11执
行在弹出的窗口中单击“Next”按钮,如图1.5-11所示。1.5JAR包及其执行图1.5-12输入“com.hello.JarMain”最后,在“Mainclass”文本框中输入“com.hello.JarMain”,再单击“Finish”按钮,如图1.5-12所示。1.5JAR包及其执行1.5JAR包及其执行打开“命令提示符”(CMD)窗口,在HelloJar.jar所在的目录下执行Java命令,运行结果如图1.5-13所示。图1.5-13运
行
结
果图1.5-14解
压
文
件1.5.3JAR文件结构现在通过HelloJar.jar文件来分析JAR包文件的结构。首先,JAR包文件本质上也是个zip文件,因此,可以通过一个具有zip解压功能的程序(如WinZip或WinRAR)来解压或打开该文件,其结构如图1.5-14所示。1.5JAR包及其执行1.5JAR包及其执行分析这个结构可以发现,打包为JAR包实际上就是将相关的文件以zip格式压缩并打包成.jar文件。对于一般性的JAR包,只需要把所执行的class和资源文件从根目录开始逐级压缩进去即可,而对于可执行的JAR包,则需要包含一个名为\META-INF\MANIFEST.MF的文件,该文件内指定了需要执行的主类,如图1.5-15所示。图1.5-15需要执行的主类名称链接
JAR资源文件的读取方式请参考7.3.5小节URL协议中的讲述。感谢观看THANKSJava语法基础第2章学习目标了解Java中的控制流语句,如条件语句和循环语句。了解面向对象编程的基本概念,如类和对象。了解Java中的数据类型分类。理解变量的概念和定义格式。知识目标学习目标掌握Java中的关键字及其特点。掌握常量的分类,并能通过代码打印常量。熟悉数据类型转换的概念和类型转换的规则。掌握方法的定义、声明和调用,理解参数传递机制。掌握异常处理机制,包括异常的抛出和捕获。熟悉包的概念和导入机制,了解Java中的常用包和类库。掌握6种基本运算符及其用法。技能目标学习目标能够编写结构清晰、逻辑严谨的代码。
遵守Java的命名规范,如类名首字母大写,方法名采用驼峰命名法等。
注释代码,增强代码的可读性和可维护性。
能够通过查阅文档、搜索网络资源或请教他人来解决编程中遇到的问题。素养目标2.1Java程序结构首先通过一段代码分析Java程序结构,具体代码如下packagecog;importjava.lang.*;importjava.util.Date;publicclassJavaStructure{
Stringmr;
Datedate;详见书中P25页从以上代码可以看到,Java程序结构包括了包的声明和使用、类型的定义,以及变量、参数、属性的使用。下面将详细讲解Java程序结构。2.1Java程序结构2.1.1包的声明和使用包是JVM用来组织和查找类(或接口)的一种机制,它用来声明一个类所属的包。Java通过将不同的类放到不同的包中,可以增强程序的可读性和健壮性。位于不同包中的同名类被视为不同的类。import用于引入外部类或接口,以便在当前Java类中使用它们。它允许Java开发者从Java标准库或第三方库中引入类或接口,从而可以在当前代码中复用这些类或接口的功能。2.1Java程序结构类的引入有以下3种情形。(1)单个导入:逐个导入特定的类或接口。importjava.util.ArrayList;importjava.util.Date;(2)批量导入:后面跟通配符*表示导入整个包中的所有类或接口。importjava.lang.*;详见书中P26页(3)直接使用“包名.类名”的方式来声明变量、属性和参数时,无论是否使用import语句,语法上都是允许的。详见书中P26页2.1Java程序结构2.1.2类型的定义Java是一种以对象为核心的语言,Java程序的最外层结构通常是类或其他引用数据类型的定义。在这些类型内部,包含了属性和方法。属性又称方法变量,代表了类型或对象中存在的数据或状态。在Java程序中,没有全局变量这一说法;在类(或引用数据类型)的外部,不能定义变量,也不能存在任何执行语句。所有的属性、方法都只能在类(或接口等数据类型)中存在。可以定义Java的类,如图2.1-1所示。2.1Java程序结构图1.2-1下载JDK上面的代码是按照创建类的4个核心步骤实现的。2.1Java程序结构(1)声明类:为类指定一个合格的名字。(2)定义类的属性:类的属性即类中的变量,通过在类的主体内部定义变量来描述类所具有的特征。这些变量分为成员变量和静态变量。(3)定义类的方法:类的方法描述了类所具有的行为,它们是类的成员函数,可以简单地将方法理解为能够独立完成某个特定功能的代码块。(4)在方法内部编写执行语句:方法体内部包含了实现特定功能的Java语句。2.1Java程序结构(1)类中的属性和方法都是类的成员。注意(2)由于Java中没有脱离类的函数,所有函数都是类的成员,这些在Java语言中被称为方法。但本书根据场景说明的需要,将方法区分为成员函数、构造函数、析构函数等概念。2.1Java程序结构在以下代码中,如果在Car类外部直接定义属性、方法以及执行语句,都会导致编译出现错误。publicclassCar{
//可以定义属性和方法
}
//以下属性语句无法编译,因为任何属性和语句不能脱离类而存在
//IntegererrorProperty;
//errorProperty=null;
//该方法也是错误的,方法不能脱离类而存在
//publicvoidoutFunction(){
}
}2.1Java程序结构前面讲过类由属性和方法构成。方法是一段可执行的程序代码,它包含输入参数(入参)和输出参数(出参),统称为参数。输入参数用于在方法被调用时接收外部传入的值,方法或程序在执行时会利用这些输入值进行计算或处理,最后将结果作为输出参数返回调用者。变量是方法体中为了运算表达方便,定义存放临时可变值的容器。方法2.1Java程序结构方法包含方法体和方法声明。例如,在Plus类中,intadd(intb)为方法头,方法头中包含入参b和int类型出参;方法体就是大括号{}所包含的部分,在方法体中,result是变量,同时也是返回的出参,如图2.1-2所示。图2.1-2创建方法2.1.3变量、参数、属性的使用变量、参数、属性均用于存储数据,但它们的存储机制各不相同。计算机的内存数据区主要由堆(heap)和栈(stack)组成。堆内存是由操作系统分配的,使用new关键字创建的对象通常存储在堆中,且需要手动管理其释放(在Java等语言中,内存释放主要由垃圾回收机制自动处理)。在Java程序中,释放内存的方式是将对象的引用计数清0,也就是将指向该对象的指针变为null,然后由Java虚拟机在合适的时候清除(详见“10.3内存管理”)。对象本质上是一块有组织的内存,属性是这块内存中的一部分,因此,属性属于堆内存。栈是用来保持临时数据的,传入参数、变量都属于栈内存。详见书中P28页2.1Java程序结构2.1Java程序结构以下程序代码演示了当modify()方法被调用时,基本类型入参number在方法体中被修改后,回到main()方法仍然不受影响,而入参names由于是引用数据类型,在方法体中被修改后,回到main()方法就是修改后的数据。方法体中创建的object对象作为出参赋值后,还是原来那个对象,因为打印出来的对象编号(哈希码)是一样的。链接引用数据类型详见“3.2基本数据类型”。publicclassEnterParamTest{
Objectmodify(String[]names,intnumber){
names[0]="张大伯";
number+=1;详见书中P28页2.1Java程序结构其运行结果如图2.1-3所示,日期的哈希码都是15db9742。图2.1-3运行结果2.1Java程序结构常量是指在程序运行过程中其值不能改变的量,在整个程序中只能赋值一次。在Java语言中,虽然从概念上讲所有变量都可以被重新赋值,但可以通过使用特定的关键字来声明常量,从而确保该变量在初始化之后不能被再次赋值,实现了“整个程序中只能赋值一次”的特性。例如,上例中的modify()方法可以进行如下修改。Objectmodify(finalString[]names,intnumber){
names[0]="张大伯";
number+=1;
System.out.println("在方法体当中,暂时将数量改为"+number);详见书中P29页从修改后的代码可以看到:final关键字并不能阻止names对象被修改。另外,修饰object的final关键字的作用域只在方法中,因此也不影响被返回。2.1Java程序结构链接详见“4.2.3继承与实现”中的“2.final关键字”。拓展从JDK10开始,Java引入了var关键字用于局部变量的类型推断。var只能在变量同时声明和初始化时使用。Java语言设计者的理念是,在这种情况下,由于变量的类型已经由赋值语句中的值明确给出,因此没有必要再次声明其类型,使用var可以增强代码的简洁性和可读性。例如,可以进行如下定义。2.1Java程序结构varnumber=3;varnames=newString[]{"张三","李四"};varname=names[number];//var不能用于参数或属性,也不能用于纯粹的定义,例如:publicclassEnterParamTest{
varerrorProp="";//属性不能使用var
ObjectvarShow(varerrorParam/*错误:参数不能用var*/){
//以下是错误的,因为var后面必须赋值才能推断详见书中P30页2.2表达式与运算符表达式由操作数和运算符组成,通过将操作数用运算符连接起来,并遵循Java的语法规则而形成。Java语言提供了一套丰富的运算符集合,用于对变量进行各种操作。这些运算符可以划分为以下几类:算术运算符关系运算符位运算符逻辑运算符赋值运算符其他特殊运算符2.2表达式与运算符表2.2-1算术运算符2.2.1算术运算符算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。表2.2-1列出了所有的算术运算符。表格中的示例假设整数变量A的值为10,变量B的值为20。2.2表达式与运算符算术运算符的用法示例如下。publicclassTest{
publicstaticvoidmain(String[]args){
inta=10;
intb=20;
intc=25;
intd=25;详见书中P31页2.2表达式与运算符以上示例编译运行结果如图2.2-1所示。图2.2-1算术运算符运行结果2.2表达式与运算符下面将详细讲解自增(++)和自减(--)运算符的三种情况:前缀自增/自减法(++a,--a)和后缀自增/自减法(a++,a--)。(1)自增(++)和自减(--)运算符是两种特殊的算术运算符。与普通的算术运算符(如加、减、乘、除)需要两个操作数不同,自增和自减运算符仅作用于一个操作数上,分别用于将该操作数的值增加1或减少1。具体使用代码如下所示。2.2表达式与运算符publicclassZe_Test{
publicstaticvoidmain(String[]args){
inta=3;//定义一个变量;
intb=++a;//自增运算
intc=3;
intd=--c;//自减运算
System.out.println("进行自增运算后的值等于"+b);
System.out.println("进行自减运算后的值等于"+d);
}}2.2表达式与运算符上述代码的运行结果如下。进行自增运算后的值等于4进行自减运算后的值等于2通过上述代码可知:intb=++a;拆分运算过程为a=a+1=4;b=a=4,最后结果为b=4,a=4。intd=--c;拆分运算过程为c=c-1=2;d=c=2,最后结果为d=2,c=2。2.2表达式与运算符(2)前缀自增自减法(++a,--a):先进行自增或者自减运算,再进行表达式运算。(3)后缀自增自减法(a++,a--):先进行表达式运算,再进行自增或者自减运算,具体使用代码如下。2.2表达式与运算符publicclassselfAddMinus{
publicstaticvoidmain(String[]args){
inta=5;//定义一个变量
intb=5;
intx=2*++a;
inty=2*b++;
System.out.println("自增运算符前缀运算后a="+a+",x="+x);
System.out.println("自增运算符后缀运算后b="+b+",y="+y);
}}2.2表达式与运算符上述代码的运行结果如下。自增运算符前缀运算后a=6,x=12自增运算符后缀运算后b=6,y=102.2表达式与运算符表2.2-2关系运算符2.2.2关系运算符Java支持的关系运算符如表2.2-2所示,其中的例子整数变量A的值为10,变量B的值为20。2.2表达式与运算符关系运算符的示例代码如下。publicclassTest{
publicstaticvoidmain(String[]args){
inta=10;
intb=20;
System.out.println("a==b="+(a==b));详见书中P33页2.2表达式与运算符运行结果如下。a==b=falsea!=b=truea>b=falsea<b=trueb>=a=trueb<=a=false2.2表达式与运算符2.2.3位运算符Java定义了位运算符,应用于整数类型(int)、长整型(long)、短整型(short)、字符型(char)和字节型(byte)等类型。位运算符作用在所有的位上,并且按位运算。假设A=60,B=13,它们的二进制格式表示如下。A=00111100B=00001101-----------------A&B=00001100A|B=00111101A^B=00110001~A=110000112.2表达式与运算符表2.2-3位运算符位运算符的基本运算如表2.2-3所示。2.2表达式与运算符位运算符的示例代码如下。publicclassTest{
publicstaticvoidmain(String[]args){
inta=60;/*60=00111100*/
intb=13;/*13=00001101*/
intc=0;
c=a&b;/*12=00001100*/详见书中P34-35页2.2表达式与运算符图2.2-2运行结果运行结果如图2.2-2所示。2.2表达式与运算符2.2.4逻辑运算符表2.2-4列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假。表2.2-4逻辑运算符2.2表达式与运算符逻辑运算符的示例代码如下。publicclassTest{
publicstaticvoidmain(String[]args){
booleana=true;
booleanb=false;
System.out.println("a&&b="+(a&&b));
System.out.println("a||b="+(a||b));
System.out.println("!(a&&b)="+!(a&&b));
}}2.2表达式与运算符运行结果如下。a&&b=falsea||b=true!(a&&b)=true注意逻辑与运算符(&&)与位运算符(&)、逻辑或运算符(||)与位或运算符(|)在原理上存在本质区别,逻辑运算的结果只有真和假(true/false)两种值,在Java中,false对应于0,而非零的数都可以视为true。由于这种差异,逻辑运算和位运算得出的结果可能不同。例如,在逻辑运算中,表达式1&&2的运算结果为true,也就是1;而在位运算中,表达式1&2的运算结果为0,也就是false。因此,需要明确区分逻辑运算和位运算的语法规则和应用场景。2.2表达式与运算符2.2表达式与运算符2.2.5赋值运算符赋值运算符如表2.2-5所示。表2.2-5
赋值运算符2.2表达式与运算符赋值运算符的示例代码如下。publicclassTest{
publicstaticvoidmain(String[]args){
inta=10;
intb=20;
intc=0;
c=a+b;
System.out.println("c=a+b="+c);
c+=a;详见书中P37页2.2表达式与运算符运行结果如下。c=a+b=30c+=a=40c-=a=30c*=a=300c/=a=1c%=a=5c<<=2=20c>>=2=5c>>=2=1c&=a=0c^=a=10c|=a=102.2表达式与运算符2.2.6条件运算符条件运算符(?:)也被称为三元运算符,因为它包含3个操作数,并且需要根据一个布尔表达式的值来决定哪个值应该赋值给变量。示例代码如下。variablex=(expression)?valueiftrue:valueiffalsepublicclassTest{
publicstaticvoidmain(String[]args){
inta,b;a=10;//如果a等于1成立,则设置b为20,否则为30
b=(a==1)?20:30;详见书中P38页2.2表达式与运算符运行结果如下。Valueofbis:30Valueofbis:202.2表达式与运算符2.2.7instanceof运算符instanceof运算符用于操作对象实例,检查该对象是不是一个特定类型(类类型或接口类型)。instanceof运算符的使用格式如下。(Objectreferencevariable)instanceof(class/interfacetype)2.2表达式与运算符如果运算符左侧变量所指的对象是操作符右侧类或接口(class/interface)的一个对象,则结果为真。请看下面的一个例子。Stringname="James";booleanresult=nameinstanceofString;
//由于name是String类型,所以返回真2.2表达式与运算符如果被比较的对象兼容于右侧类型,则该运算符仍然返回true。classVehicle{}publicclassCarextendsVehicle{
publicstaticvoidmain(String[]args){
Vehiclea=newCar();
booleanresult=ainstanceofCar;
System.out.println(result);
}}2.2表达式与运算符运行结果如下。True2.2表达式与运算符2.2.8运算符优先级当多个运算符出现在同一个表达式中时,它们具有一定的计算顺序,这会涉及运算符的优先级别的问题。在一个包含多运算符的表达式中,不同的运算符优先级会导致最终得出的结果差别甚大。2.2表达式与运算符表2.2-6中优先级运算符的类别是由高到低排列的。表2.2-6运算符的优先级2.2表达式与运算符续表2.3Java流程控制2.3.1条件判断语句在Java中条件语句主要有if语句和switch语句两种。if语句允许程序通过判断条件是否成立而选择是否执行语句。if语句分为简单的if语句、if-else语句,if-elseif-else语句和if语句的嵌套。2.3Java流程控制1.if语句if语句的基本语法格式如下。if(条件表达式){语句块}(1)条件表达式用于表示判断条件,其值必须为布尔型(即真或假)。条件表达式可以是变量或者是常量,也可以是关系表达式或者是逻辑表达式。(2)如果条件表达式的值为true,则执行语句块。语句块可以由一条语句或多条语句组成,如果仅有一条语句,则可以省略if语句中的“{}”。2.3Java流程控制ifscore=60;if(score>=60)
System.out.println("及格");上述代码中,score的值为60,则表达式的值为true,所以执行语句块后,输出结果为“及格”。由于语句块只有一条语句,所以大括号“{}”可省略不写。2.3Java流程控制2.if-else语句if-else语句的语法格式如下。if(条件表达式){
语句块1;}else{
语句块2;}2.3Java流程控制如果if语句的条件表达式为true,则执行语句块1。如果if条件表达式为false,则执行语句块2。相关示例代码如下。intscore=59;if(score>=60){
System.out.prntln("及格");}else{
System.out.println("不及格");}在上述代码中,score的值为59,if条件表达式为false,所以执行else语句,输出结果为“不及格”。2.3Java流程控制3.if-elseif-else语句if-elseif-else语句的语法格式如下。if(条件表达式1){
语句块1;}elseif(条件表达式2){
语句块2;}
…elseif(条件表达式n){
语句块n;}else{
语句块n+1;}在上述语句的代码中,依次判断条件表达式的值。如果某个条件表达式的值为true,则执行相应的语句。如果所有的条件表达式的值都为false,则执行最后一个else对应的语句块,然后继续执行后续程序。2.3Java流程控制操作2.1编写学生成绩等级系统。将输入学生的成绩score转化成相应的等级后输出,如表2.3-1所示。表2.3-1分数及其对应的等级2.3Java流程控制实现代码如下。publicclassScoreIf{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
System.out.println("请输入分数");
doublescore;详见书中P42页2.3Java流程控制(1){}只是为了将一个代码块里面多个语句括起来,如果代码块只有一条语句,那么可以省略不用。例如,“if(score>=80){System.out.println("优良");}”可以写成“if(score>=80)System.out.println("优良");”。(2)人的思维是线性思维,因此使用条件判断语句时,也应尽量减少条件层数,最多在5层以内,条件多了,代码的可读性会很差。注意2.3Java流程控制publicclassScoreIf{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);详见书中P43页编程经验if-else语句使用时会使代码看起来烦琐,如果if-else语句块中含有跳出当前方法或循环的语句,那么此时就可以将该语句块摘出来,改成单独的if语句。例如ScoreIf代码也可以改成以下形式。2.3Java流程控制4.switch语句switch(表达式){case常量表达式1:语句块1break;case常量表达式2:语句块2break;case常量表达式3:语句块3break;…case常量表达式n:语句块nbreak;default:语句n+1}Java提供了switch语句来运行分支比较多的程序,以增强程序的可读性。它是通过数据匹配的方式实现程序的多分支控制的,其语法结构如下。1)switchswitch表示“开关”,其关键在于switch关键字后小括号内的值。这个小括号内必须放置一个整型(byte、short、int)或字符型(char)变量。Java7增强了switch语句的功能,允许switch语句的控制表达式为java.lang.String类型的变量或表达式。但需要注意,这里的字符串类型仅限于java.lang.String类型,而不包括StringBuffer或StringBuilder这两种字符串的类型。2.3Java流程控制其中,switch、case、default和break都是Java的关键字。2)casecase用于表示枚举常量。如果表达式的值与case标签相等,则执行该case下的代码。case标签可以是char、byte、short、int类型的常量表达式。从JDK7版本开始,case标签也可以是String类型的常量表达式。3)defaultdefault表示“默认”,即其他情况都不满足。default后要紧跟冒号,default块和case块的先后顺序可以变动,不会影响程序执行结果。通常,default块放在末尾,也可以省略不写。4)breakbreak表示“停止”,即跳出当前结构。2.3Java流程控制2.3Java流程控制操作2.2在节目的抽奖环节中,节目组会根据每位嘉宾的座位号进行抽奖,并根据不同的号码来决定奖项的大小。具体实现方式是:当用户输入的号码为888时,程序会捕获这个输入的num值为888,然后将其与switch语句中的第三个case后的值进行比较,如果相匹配,则执行它后面的语句,输出“恭喜你,获得了一等奖!”,然后执行break语句,跳出整个switch结构。如果输入的号码与case中的值都不匹配,则执行default后的语句。2.3Java流程控制publicclassSwitchCase{
publicstaticvoidmain(String[]args){
System.out.println("请输入座位号码:");
Scannersc=newScanner(System.in);详见书中P44-45页程序运行结果如下。请输入座位号码:88恭喜你,获得了二等奖!2.3Java流程控制2.3.2while循环语句while语句的语法格式如下。while(条件表达式){
循环体语句;}在while语句中,首先会判断while语句后面的条件表达式,如果表达式的结果为true,则执行循环体语句。执行完循环体语句后再次判断while后面的条件表达式,如果表达式继续为true,则继续执行循环体语句,如此往复,直到条件表达式为false时,才会跳出循环。2.3Java流程控制操作2.3
下面的程序从一个String字符串中读取一行信息。为了读取第一行信息,程序从第一个字符开始读,读完后若碰到换行字符则立即结束。publicclassDoWhileDemo{
publicstaticvoidmain(String[]args){
Stringstr="thisisfirstline\r\n"+详见书中P45-46页运行结果如下。thisisfirstline2.3Java流程控制2.3.3do-while循环语句除了while语句外,Java还提供了do-while语句来实现循环结构。do-while语句用于先执行完一遍循环体,再通过while语句判断是否继续执行循环体。其中,while语句包含循环条件,其语法结构如图2.3-1所示。do{
//循环体}while(判断条件)图2.3-1do-while循环语句流程2.3Java流程控制操作2.4
下面的程序用于从一个String字符串中读取第一行信息。程序会从字符串的第一个字符开始读取,一直读取到遇到换行符(如\n)为止,此时读取操作结束,并认为已经读取了第一行信息。publicclassDoWhileDemo{
publicstaticvoidmain(String[]args){
Stringstr="thisisfirstline\r\n"+
"thisissecondline\r\n"+
"thisisthirdline";
if(str==null||str.isEmpty()){详见书中P46-47页2.3Java流程控制思考什么情况下需要使用循环语句?当一个语句要重复执行时,需要用到循环语句。当一条语句只执行一次时,就不需要添加循环语句。2.3Java流程控制2.3.4for循环语句for循环语句的语法格式如下。for(初始化语句;判断语句;收尾语句){
//循环体}2.3Java流程控制在执行for语句时,如果循环条件的值为true,则会执行循环体内的代码段。执行完毕后,会重新判断循环条件,这个过程会一直重复,直至循环条件的值为false时,循环才会终止,并继续执行循环之后的代码。for语句的执行流程如图2.3-2所示。for循环语句工作流程:先执行初始化语句,再执行判断语句,判断无误则进入循环体,循环一遍之后则进入收尾语句,接着进入判断语句……。其先判断再循环的方式类似于while语句,因此,可以将其看作是增强版的while语句。图2.3-2for语句的执行流程2.3Java流程控制操作2.5
以下代码用于查询10以内的偶数。代码中先定义一个变量i作为计数器,然后通过一个循环将i的值从1开始,每次递增1,直到i的值达到10为止。在循环体中,通过判断i是否能被2整除来确定当前的i值是否为偶数。//10以内的偶数publicvoideven(){
for(inti=1;i<=10;i++){
if(i%2==0){详见书中P48-49页2.3Java流程控制foreach与for实现的原理不同,其实现的背后是while语句。foreach只接受数组或Iterable作为参数一,Iterable与List、Set、Queue之间的关系如图2.3-3所示(图中的
表示继承关系)。图2.3-3Iterable与List、Set、Queue之间的关系2.3Java流程控制将遍历人员信息的程序数组改成Iterable,为了展示程序的调用过程,给相应的方法加上日志,编写类程序如下。publicclassPersonsIterableimplementsIterable{String[]persons=newString[100];intsize=0;PersonsIterableaddPerson(Stringperson){persons[size++]=person;详见书中P49-51页2.3Java流程控制可以发现,无论是使用while语句和iterator遍历,还是使用foreach循环,其执行效果都是一样的,运行结果如图2.3-4所示。图2.3-4运
行
结
果2.3Java流程控制思考从产品的角度考虑,Java的开发者是希望针对for语句进行优化。那么你认为这次优化成功吗?注意:无论是while语句,还是for循环语句,当循环体只有一条语句时,大括号可以省略不写;当超过一条语句时,必须添加大括号。2.3Java流程控制2.3.5多重循环语句一个循环语句的循环体内包含另一个循环语句,称为循环语句嵌套。while语句、do-while语句和for循环语句都可以相互嵌套,自由组合。编写九九乘法口诀表,代码如下。publicclassMultiCircle{
publicstaticvoidmain(String[]args){
for(inti=1;i<10;i++){
for(intj=1;j<=i;j++){详见书中P48-52页2.3Java流程控制在编写循环语句时,应尽量减少循环的层数,一般建议不超过3层。因为过多的循环会带来两个负面影响:一是循环层数多通常意味着程序逻辑较为复杂,可能导致代码执行时间难以平稳且可控,这时需要对代码进行优化;二是多重循环会增加人类思维的负担,使其更难以理解和追踪。注意2.3Java流程控制2.3.6continue语句在执行程序时,有时并不希望终止整个循环的操作,而是希望提前结束本次循环,接着执行下一次循环,这时可以用continue语句。break是直接结束循环,与break语句不同,continue是结束本次循环,开始执行下一次循环。下面编写代码输出1到20之间所有的奇数,具体代码如下。publicclassContinueDemo{
publicstaticvoidmain(String[]args){
intn;
for(n=1;n<=20;n++)详见书中P48-53页2.3Java流程控制2.3.7break语句前面已经在switch语句中介绍过break语句的使用。实际上,break语句同样可以在循环语句中使用,以跳出循环体并执行循环之后的语句。在循环结构中,break语句通常与if语句配合使用,以便在满足特定条件时提前终止循环。编写一个密码验证程序。当从键盘输入正确的用户名admin和密码123456之后,执行break语句跳出当前的循环结构。publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
intn=3;
do{详见书中P53-54页2.3Java流程控制运行结果如图2.3-5所示。图2.3-5运
行
结
果2.3Java流程控制2.3.8拓展:breakpoint由于break语句默认只能跳出一层循环,如果碰上多层循环,并且需要跳出多层循环的情况,这时候就需要用breakpoint指定跳出的循环层次。以下程序代码可获取边长在10以内的最大三角形。程序先定义跳转点point,当获取三角形以后就通过break语句跳转到该跳转点,并退出循环。publicstaticvoidmain(String[]args){
System.out.println("开始计算…");
StringtriAngle=null;
//跳转点详见书中P54-55页2.3Java流程控制以上代码嵌套层次过多,既影响阅读,也使得程序运行效率随着边长大小的增长产生较大影响,这不符合代码规范。读者可以试着将其改为2层嵌套。注意2.4拓展:代码规范软件开发是一项系统性的工程,它要求团队协作,其中代码规范非常重要。代码规范是指在程序开发过程中,为了增强程序的可读性和可维护性,程序员需要自觉遵守的一系列规范。不遵守代码规范的程序虽然不一定会产生编译错误,但会妨碍团队协作,有时甚至会降低代码执行效率。思考本书所有代码均遵循既定的代码规范,结合网上资料总结本书所用到的代码规范。感谢观看THANKS数据类型第3章学习目标掌握数据类型在编程中的基本作用和重要性,了解数据类型是编程中用来存储和操作数据的基本单元。理解为什么需要不同类型的数据来表示不同的信息,包括数据的大小、精度和范围等。熟悉Java的八种基本数据类型(byte、short、int、long、float、double、char和boolean),包括它们的存储大小、取值范围及默认值。理解自动类型转换(隐式转换)和强制类型转换(显式转换)的规则,以及在转换过程中可能出现的数据丢失或类型不匹配的问题。知识目标学习目标能够编写代码进行不同数据类型之间的正确转换,包括不同类型之间的自动转换和需要显式转换的情况,以避免数据丢失或类型不匹配的错误。熟练掌握Java中的运算符,包括算术运算符、比较运算符和逻辑运算符等,能够根据数据类型的不同选择合适的运算符进行运算。技能目标培养对数据类型选择和类型转换的敏感性及谨慎性,保证程序在处理数据时不出现错误。培养对运算符的熟练应用能力,确保在编写代码时能够选择和使用合适的运算符,提高代码的效率和可读性。素养目标3.1.1进制及转换计算机数据的基本表示单位为比特(bit),一个比特就是一个二进制位,表示0或1。这种表示是为了简化电子元器件的使用,因为内存中的一个比特通常由一个晶体管实现,仅通过高低电压即可区分。在计算机内存中,每8个bit被组合在一起,构成一个字节(byte),而内存寻址则是以byte为单位进行的。为了更好地处理数据,可以将一个byte看作由2个4bit的数据组成,每个4bit表示0000到1111的数值,即0~15,共16个数字。当数值达到16时,就向更高位进位,因此这种表示法称为十六进制。在十六进制中,0~9仍然用0~9表示,而10~15则用A~F表示,所以一个Byte的大小范围就在0X00~0XFF之间(即0~255)。十六进制与二进制之间的关系如图3.1-1所示。3.1计算机数据组织图3.1-1十六进制与二进制之间的关系3.1计算机数据组织将十六进制数转换成十进制数。由于十六进制数中每一位的权值是前一位的16倍,因此可以递归地从最高位开始,将每一位乘以对应的16的幂次方,然后加上低位得到的值。将十进制数转换成十六进制数。该过程与之前的转换方向相反,具体方法是,将十进制数每次除以16,得到的余数即为当前位的十进制表示(也是这次的低位,最低位最先得到)。而除完以后的商则作为新的被除数继续被16除,直到商为0或不能被16整除为止(实际上,当商小于16时,就不能再被16整除了,此时商就是最高位)。在记录结果时,需要从最后得到的余数(即最低位)开始,依次记录每次的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省玉溪地区2026年初三第一次统一考试英语试题含解析
- 甘肃省兰州十九中学教育集团2025-2026学年初三下学期第四次质量检测试题英语试题含解析
- 工程项目进度管理工具项目阶段与成果可视化版
- 合作方信任生态建设承诺书(5篇)
- 儿童保护与成长关怀承诺书7篇范文
- 项目预算审批流程及资金使用计划工具
- 企业文化构建可持续发展承诺函(4篇)
- 企业会议管理流程与会议纪要模板
- 老人走失社区快速查找预案
- 网络信息安全运营承诺函(4篇)
- 年鉴编纂基本知识课件
- 2026年保安员证考试题库完整版
- 2026年四川单招语数英基础提升分层试卷含答案适配不同水平
- 基于AI的API安全风险评估模型
- 仰卧起坐课件
- 2025考研中共党史党建学真题(浙江省委党校)
- 基于数字孪生的故障诊断
- T-AOPA0070-2024架空输电线路无人机激光扫描数字航拍勘测技术规范
- GB 11417.3-2025眼科光学接触镜第3部分:软性接触镜
- 2025年软件评测师考试下午真题加答案解析(一)
- 2025年NISP信息安全专业人员一级考试真题(一)(含答案解析)
评论
0/150
提交评论