版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计基础大连理工大学出版社第一章引言1.2Java是什么1.1什么是编程1.1什么是编程计算机程序告诉计算机应该做什么。计算机执行的任何操作都是由程序控制的。程序设计是将计算机要执行的操作或者计算机要解决的问题转变成程序的过程。程序设计的过程主要包括分析问题、确定算法、用选定的程序设计语言编写源程序、调试和运行程序。
1.1什么是编程(续)程序员可以用各种程序语言编写指令,有些语言是计算机直接能理解的,有些则需经过中间的“翻译”步骤。目前使用的计算机语言有数百种,大致可以划分为三大类:
机器语言汇编语言高级语言
1.1什么是编程(续)机器语言所有计算机都能直接理解自己的机器语言。机器语言是任何一台特定计算机的“自然语言”。这种语言由计算机的硬件设计所定义。机器语言通常由大量数字字符串0、1组成,它们指示计算机一次执行一个最基本的操作。例:使用机器语言编写将英语分数与数学分数相加,并将结果存到总分数里:+1300042774+1400593419+12002740271.1什么是编程(续)汇编语言机器语言编程较慢、不易于理解。因此程序员不再使用机器语言,开始采用类似于英语的缩写指令来表示基本操作。汇编语言是一种翻译程序,以计算机速度将汇编语言程序翻译成机器语言。例:使用汇编语言编写将英语分数与数学分数相加,并将结果存到总分数里:
LOADMathScoreADDEnglishScoreSTORETotalScore1.1什么是编程(续)高级语言汇编语言出现后,计算机应用迅速增长。但即使用汇编语言编程,完成最简单的任务也需要编写许多指令。于是,高级语言孕育而生了,仅一条语句就能完成大量任务。例:使用高级语言编写将英语分数与数学分数相加,并将结果存到总分数里:
TotalScore=MathScore+EnglishScore
1.1什么是编程(续)高级语言计算机高级语言更接近于人类的自然语言,易于理解,得以广泛流行。C、C++和Java均是时下最流行的、功能较强大的高级程序设计语言。
1.2Java是什么Java的语言背景
1991年,SUNMicroSystem公司的JameGosling、BillJoe等人,为在电视、控制烤面包箱等家用消费类电子产品上进行交互式操作而开发了一个名为Oak的软件,但当时并没有引起人们的注意,直到1994年下半年,Internet的迅猛发展,环球信息网WWW的快速增长,促进了Java语言研制的进展,使得它逐渐成为Internet上受欢迎的开发与编程语言。1.2Java是什么(续)自从Sun推出Java以来,按应用来分主要分为三大块:J2SE(Java2StandardEdition):Java2的标准版,主要用于桌面应用软件的编程。J2ME(Java2MicroEdition):主要应用于嵌入是系统开发,如手机和PDA的编程。J2EE(Java2Platform,EnterpriseEdition):Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
这是SunONE(OpenNetEnvironment)体系。
1.2Java是什么(续)Java语言的应用
1.2Java是什么(续)Java的技术特点
Java是目前使用最为广泛的网络编程语言之一,具有简单、动态、面向对象、分布式、解释执行、健壮、安全、结构中立、可移植、高效能、多线程等多种特点。1、简单性2、面向对象3、分布性4、鲁棒性5、安全性1.2Java是什么(续)Java的技术特点
(续)6、体系结构中立7、可移植性8、解释执行9、高性能10、多线程11、动态性1.2Java是什么(续)Java平台介绍
Java平台由两大部分组成:Java虚拟机(JavaVirtualMachine)Java应用编程接口(JavaApplicationProgrammingInterface)1.2Java是什么(续)Java平台介绍
(续)Java虚拟机(JavaVirtualMachine)JVM是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。1.2Java是什么(续)Java平台介绍
(续)Java应用编程接口JavaAPI是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。JavaAPI包括一些重要的语言结构以及基本图形,网络和文件I/O、数据库操作组件等等。是软件组件的集合。1.2Java是什么(续)Java平台介绍
(续)1.2Java是什么(续)
Java平台介绍
(续)JDK为JavaDevelopmentKit(Java开发工具包),包括运行环境、编译工具及其它工具、源代码等。JRE为JavaRuntimeEnvironment(Java运行环境),运行Java程序所必须的环境的集合,包含JVM标准实现及Java核心类库等。
1.2Java是什么(续)Java运行系统
通过编译器,可以把Java程序翻译成一种中间代码(称为字节码)可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。1.2Java是什么(续)Java运行系统(续)Java字节码使编译一次,到处运行成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可运行在任何JavaVM上。本章小结程序设计语言是计算机能够理解的、用于人和计算机之间进行交流的语言。程序设计的过程主要包括分析问题、确定算法、用选定的程序设计语言编写源程序、调试和运行程序。计算机语言大致可以划分为三大类:机器语言、汇编语言、高级语言。SunONE体系:J2SE,J2ME和J2EE。Java平台由两大部分组成:Java虚拟机和Java应用编程接口。JDK为JavaDevelopmentKit,包括运行环境、编译工具及其它工具、源代码等。而JRE为JavaRuntimeEnvironment,运行Java程序所必须的环境的集合,包含JVM标准实现及Java核心类库。Java语言程序具有“一次编写,重复使用”的特点。
Java程序设计基础大连理工大学出版社第二章声明与访问控制2.2类与对象2.1标识符、关键字2.3静态成员2.4常量与变量2.1标识符、关键字标识符:标识符是用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列。Java语言规定标识符由字母、下划线、美元符号和数字组成,并且需遵循以下规则:(1)区分大小写。(2)不能以数字开头。(3)以字母或下划线_或$符号开头。(4)不能使用Java的关键字。注释的优点一方面,注释可以帮助自己或者他人能更好地理解源代码的用途,使用条件,使用方法,结果等;另一方面,便于以后的系统维护和升级等。Java支持三种形式的注释。//:单行注释行注释也称单行注释。行注释使用//注释文字来对某行/某段代码加以说明。/*……*/:多行注释段落注释也称多行注释。为某段代码加以说明。当说明文字比较长需要换行时使用段落注释方法。2.1标识符、关键字(续)/**……*/:Java特有的文档注释文档化注释也称Javadoc注释。采用这种方法的注释,可以采用javadoc命令或工具抽取源文件里的Javadoc注释,生成组织有序的帮助文档(HTML格式的文件)。有关Javadoc的详细说明请读者自行查阅相关文档。2.1标识符、关键字(续)/**……*/:Java特有的文档注释(续)
/***Javadoc注释方法:这是一个HelloJava!的程序*<p>*可以打印HelloJava!**@author刘嵩*@version1.0.1,2008-01-25**/publicclassHelloJava{ /* *段落注释方法:main()方法是程序执行的入口 */ publicstaticvoidmain(String[]args){ //行注释方法:
//向命令行打印输出HelloJava! System.out.println("HelloJava!"); }}2.1标识符、关键字(续)2.1标识符、关键字(续)
分隔符:圆括号()在定义和调用方法时用来容纳参数表,在控制语句或强制类型转换组成的表达式中用来表示执行或计算的优先权。花括号{}用来包括自动初始化的数组的值,也用来定义程序块、类、方法以及局部范围。方括号[]用来声明数组的类型,也用来表示撤消对数组的引用。分号;用来终止一个语句。逗号,在变量声明中,用于分隔变量表中的各个变量。在for控制语句中,用来将圆括号内的语句连接起来。句号.用来将软件包中的名字与它的子包或类分隔,也用来将引用变量与变量或方法分隔。另外,还有一种较为特殊的空白分隔符,空格、Tab跳格键及换行符均属于这种分隔符。2.1标识符、关键字(续)
关键字:关键字是Java语言中已经被赋予特定意义的单词,一般用来表示一种数据类型,或者程序的结构等。保留字是为Java预留的关键字。目前Java语言定义的关键字如下:const(保留字)goto(保留字)abstractfinally
intpublicthisbooleancontinuefloatinterfacereturnthrowbreakdefaultforlongshortthrowsbytedo
nativestatictransientcasedoubleifnewstrictfptrycatchelseimplementspackagesupervoidcharextendsimportprivateswitchvolatileclassfinalinstanceofprotectedsynchronizewhile2.2类与对象对象类实体抽象数据类计算机世界现实世界实例化抽象映射计算机逻辑的实现概念世界面向对象技术:计算机世界向现实世界靠拢面向过程技术:现实世界向计算机世界靠拢对象的状态在计算机内部是用变量来表示,而对象的行为在计算机内部是用方法来表示的下图展现了类与对象的基本关系:
2.2类与对象类定义的通用格式如下:
class类名{
typeinstance-variable1;
//...
typeinstance-variableN;
typemethodname1(parameter-list){
//方法体
}
//...
typemethodnamen(parameter-list){
//方法体
}
}2.2类与对象(续)2.2类与对象(续)面向对象程序设计的核心是对象,程序是一系列对象的组合。单个对象能够实现的功能是有限的,应用程序往往包含很多的对象,这些对象相互调用彼此的方法,交互作用以实现更高级、更复杂的功能。在程序中当需要使用新对象时,应进行对象的创建,为其分配内存空间,在对象完成了自己的功能后可以销毁它以释放占用的内存。2.2类与对象(续)在Java中,利用new关键字可以创建类的对象,这是最常用的创建对象的方式。用new创建对象的语法格式如下所示:SomeClassob=newSomeClass(参数列表);new关键字后调用的是类的构造方法。2.2类与对象(续)对象的创建过程主要包含了如下的步骤:
给对象分配内存空间。若类的实例变量在定义时未赋初值,则将它们自动初始化为其所属类型的默认值。调用类的构造方法进行对象的初始化工作,若构造方法中包含对实例变量赋值的语句,则为实例变量赋予相应的初始值。注意:类的实例变量,指的是类中未被static修饰的成员变量。2.2类与对象(续)可以使用new来创建具体学生对象来,如:StudentaStudent=newStudent(“Tom”,19,”计算机”);对象创建之后,可通过访问对象的变量或是调用对象的方法来使用对象2.2类与对象(续)访问对象的变量
访问对象的变量的一般格式如下:对象名.变量名通过访问对象的变量可以修改对象的属性值,如给学生改名:aS=“John”;需要注意的是:像这样直接操纵对象的属性的做法是不提倡的,更好的访问方式是通过各个属性的get和set方法来访问。2.2类与对象(续)调用对象的方法
调用对象的方法的一般格式如下:对象名.方法名(参数列表)方法代表对象具有的行为,调用方法就相当于实施行为,能实现一定的功能。比如,如果希望对这个学生的信息进行修改,可以调用各个属性的set方法来实现:aStudent.setName(“John”);2.2类与对象(续)对象的销毁
在Java的运行时环境中,Java虚拟机提供了一个垃圾回收器线程,它负责自动周期性地检测、回收那些无用对象所占用的内存,这种内存回收的机制被称为自动垃圾回收(GarbageCollection),这也是Java显著的特色之一。2.2类与对象(续)同种基本数据类型的变量之间可以互相赋值,比如:
inti=3;intj=i;与此类似,同种类型的对象之间也可以赋值,比如:Studentstu1=newStudent();Studentstu2=stu1;不同的是:同种基本数据类型的变量之间的赋值是值的拷贝,内容的拷贝。同种类型的对象之间的赋值叫引用赋值,不是拷贝对象的内容。2.2类与对象(续)对象名的引用作用如下图所示:同种类型对象之间的赋值,是将一个对象名所代表的引用赋给另一个对象名,使得2个对象名具有相同的引用,那么这2个对象名可以访问到同一个对象的存储空间,这种对象的赋值就叫做引用赋值。
2.2类与对象(续)空引用若对象只声明了类型,而没有创建,则对象的值为null,代表空引用,表示没有指向任何的对象。这时候如果试图使用对象,则会出错,例如:Studentjane;System.out.println("学生姓名:"+jane.getName());使用空引用的对象,在运行时会产生NullPointerException异常。
2.2类与对象(续)在创建类的对象时将会调用构造方法,构造方法一般实现对类的成员变量进行初始化的操作。
构造方法不同于成员方法,从其定义形式上也可以体现出来:
构造方法名必须与所属的类名保持一致,包括大小写(Java是大小写敏感的语言)。构造方法无返回类型,连void都没有。类中可以没有构造方法,这个时候系统会自动为类添加一个无参且方法体为空的默认构造方法。形如:publicClassName(){ }如果类中包含了构造方法,则用new调用构造方法创建对象时,必须按照构造方法定义的形式参数给出相应的实际参数。2.3 静态成员static关键字
static意为静态的,Java中用static关键字来表示静态的成员。静态成员与非静态成员,所处的存储空间不同,生命期也不一样。类中有static修饰的变量和方法叫做类的静态变量、静态方法,统称为类的静态成员。而无static修饰的则可相对的称为动态成员2.3 静态成员(续)static关键字(续)类的静态成员的使用格式如下:类名.静态变量名 类名.静态方法(参数列表)类的静态变量也称作类变量或域(field),无static修饰的成员变量也称作实例变量。无static修饰的成员方法也称作实例方法。类的静态成员,不依赖于类的实例,在不创建类对象的情况下就可以直接通过类名来访问,并且这些静态成员被类的所有实例所共享。
2.3 静态成员(续)
static变量静态变量与实例变量的区别:Java虚拟机只给静态变量分配1次内存,静态变量在内存中只有一个拷贝,任何类的实例对静态变量的修改都将有效。实例变量依赖于类的实例,即具体的对象,每创建一个对象,就为该对象的实例变量分配一次内存,各个对象的实例变量占用不同的内存空间,互不干扰,对象对各自实例变量的修改不会影响到其它对象的实例变量。在类的内部,可以在任何方法内部访问静态变量,在没有变量重名的情况下静态变量名前面可以不用带前缀。2.3 静态成员(续)
static变量类的静态变量主要有如下2个作用:能被类的所有实例共享,可以作为实例之间共享的数据。如果类的所有实例都需要一个相同的常量数据成员,可以把这个数据成员定义为静态的,从而节省内存空间。若要将变量的值固定成为常量,则应在变量的类型前加上final关键字。2.3 静态成员(续)
static方法
方法的返回类型前有static关键字修饰的成员方法即为类的静态方法。与静态变量类似,类的静态方法也不依赖于类的实例,不需要创建类的对象就可以通过类名来调用。
2.3 静态成员(续)
成员与静态方法的关系
静态方法是随类加载的,只要类存在,静态方法就可以调用、执行。而实例变量、实例方法这些非静态的成员都是依赖于类的实例的,必须在类对象存在的前提下,才可以使用实例变量和实例方法。因此,静态方法体中不能使用无法确定是否存在的实例变量和实例方法。2.3 静态成员(续)
成员与静态方法的关系
静态方法是随类加载的,只要类存在,静态方法就可以调用、执行。而实例变量、实例方法这些非静态的成员都是依赖于类的实例的,必须在类对象存在的前提下,才可以使用实例变量和实例方法。因此,静态方法体中不能使用无法确定是否存在的实例变量和实例方法。2.3 静态成员(续)
成员与静态方法的关系(续)
publicclassStaticTest3{ inta=10; intb=20; publicstaticvoidmain(String[]args){ intsum=a+b; System.out.println("sum="+sum); } }错误:不能在静态上下文中访问非静态的a和b。2.3 静态成员(续)
成员与静态方法的关系(续)
在本例中,由于a和b均为非static的实例变量,它们在类的对象创建之后才会被分配内存而存在,在静态的main()方法中不能对其进行引用。解决上述访问问题的方法有2种:一种是将a和b改为static变量,则它们与main()方法一样是静态成员,都随类加载,不依赖于对象的存在与否,在main()中可以访问它们,在其它的静态方法中也可以访问。如下所示:staticinta=10;staticintb=20;2.3 静态成员(续)
成员与静态方法的关系(续)
另一种解决方法是:静态的main()方法中先创建类的对象,再用对象来访问这些实例变量。如下所示:StaticTest3ob=newStaticTest3();intsum=ob.a+ob.b;
2.3 静态成员(续)
成员与静态方法的关系(续)
如果在静态方法中调用实例方法,又会出现什么情况呢。
publicclassStaticTest4{ publicstaticvoidmain(String[]args){
intsub=sub(13,5);
System.out.println("sub="+sub); } publicintsub(inta,intb){ returna-b; }}2.3 静态成员(续)
成员与静态方法的关系(续)
同试图在静态方法中访问非静态的实例变量类似,此问题的出现也是因为非静态的实例方法依赖于类的实例,故在静态方法中不能调用实例方法。
解决方法有二:一是改sub()方法为静态方法,如下所示:publicstaticintsub(inta,intb){ returna-b;}2.3 静态成员(续)
成员与静态方法的关系(续)
另一种解决办法:静态的main()中先创建类的对象,再调用实例方法如下所示:StaticTest4ob=newStaticTest4();intsub=ob.sub(13,5);反过来,没有static修饰的实例方法中没有这样的限制,实例方法可以访问类的静态变量、调用静态方法,也可以访问实例变量、调用实例方法。
数据类型的概念每一种数据类型定义了一个具有相同性质的数据集合。各种数据类型的数据具有不同的性质。程序中所用到的每一个数据,包括常量和变量都有一个和它相联系的类型。由此决定了数据所具有的值,也决定了对该数据所能进行的操作。2.4常量与变量变量在程序执行过程中其值可以改变的数据,称为变量。每个变量都要有一个名称,这就是变量名。变量名由用户自己定义,但必须符合标识符的规定。在一个程序中,一个变量只能属于一种确定的数据类型。程序中出现的每个变量都必须说明其数据类型,这样就规定了该变量的取值范围,也决定了对该变量所能执行的运算操作。
2.4常量与变量(续)变量(续)intn;定义了一个变量,变量名为n,变量类型为int类型。Stringname,password;定义了两个变量,变量名分别为name和password,变量类型都是String类型。在Java中相同类型的变量定义可以在一起进行,变量名之间用逗号隔开。变量定义之后必须使用“=”赋值才能使用。2.4常量与变量(续)变量(续)publicclassVariable1{ publicstaticvoidmain(String[]args){ intn=1;//定义变量n,将n的值赋值为1 System.out.println(n);//输出当前变量n的值
n=2;//将n的值赋值为2,变量的"变"在这里体现
System.out.println(n); }}2.4常量与变量(续)常量在程序执行过程中其值不能改变的数据,称为常量。Java中的常量值是用文字串表示的,它区分为不同的类型,例如:整型常量123,实型常量1.23,字符常量’a’,布尔常量true、false以及字符串常量"Thisisaconstantstring."。Java中可以通过关键字final将变量定义为常量。一个变量如果被定义为常量则这个常量的值不可再修改。例如:finaldoublePI=3.14;//正确PI=3.1415926;//错误,试图修改一个常量的值一般习惯将常量的标识符大写。2.4常量与变量(续)基本数据类型Java编程语言为八个原始数据类型和一个特殊类型定义了文字值。原始类型可分为四种:逻辑类型boolean字符类型char整数类型byte,short,int,long浮点类型double,float2.4常量与变量(续)逻辑类型boolean
逻辑值有两种状态,即人们经常使用的“on”和“off”或“true”和“false”或“yes”和“no”或者“真”和“假”,这样的值是用boolean类型来表示的。Java中boolean有两个合法值,即true和false。以下是一个有关boolean类型变量的声明和初始化:booleantruth=true;//定义一个boolean类型的变量truth,并且赋值为true逻辑类型也可以叫做布尔类型,其值也可以叫做布尔值。2.4常量与变量(续)字符类型char
使用char类型可表示单个字符。一个char代表一个16-bit无符号的(不分正负的)Unicode字符。一个char文字必须包含在单引号内,如’a’,’d’,’你’,’!’。以下是一个有关char类型变量的声明和初始化:charc=’我’;//定义一个字符类型的变量c,并且赋值为’我’2.4常量与变量(续)整数类型在Java编程语言中有四种整数类型,每种类型可使用关键字byte(字节型),short(短整型),int(整型)和long(长整型)中的任意一个进行声明。这四种整数类型的区别在于它们能够表示的范围不同。每个整数数据类型具有下列范围:Java中可以在整数数值后面加字母l或者L表示长整型long。2.4常量与变量(续)浮点类型如果一个数字文字包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数字文字为浮点类型。浮点数除非在末尾强制加F或者f表示float,否则默认浮点数都是double类型。浮点数据类型具有下列范围:浮点长度名称或类型
32bitsfloat64bitsdouble2.4常量与变量(续)浮点类型(续)下面是浮点数的示例:floatf=0.05;
//错误浮点数默认是double类型,0.05是double类型超出了float的范围floatf=0.05F;
//正确doubled=0.928;
//正确2.4常量与变量(续)
类型转换基本数据类型按精度从低到高排序:byteshort intlongfloatdouble当把低精度的值赋给高精度的变量时,系统会自动完成类型转换。如:floatf=100;输出f的结果不是100而是100.0。
当把高精度的值赋给低精度的变量时,必须使用强制类型转换进行数据类型转换.转换格式:(希望转换的类型名)要转换的值2.4常量与变量(续)基本数据类型的包装类Java是一种面向对象语言,Java中的类把方法与数据连接在一起,并构成了自包含式的处理单元。在Java中不能定义基本类型,为了能将基本类型视为对象来处理,并能连接相关的方法,Java为每个基本类型都提供了包装类。包装类有Byte,Short,Integer,Long,Float,Double,Boolean,Character等。2.4常量与变量(续)基本数据类型的包装类(续)
publicclassStringToInt{
publicstaticvoidmain(Stringargs[]){
inti;
Strings="126";
i=Integer.parseInt(s);
System.out.println(i);
}
}2.4常量与变量(续)引用类型简介
Java中除了前面提到的基本数据类型外更多的是引用数据类型。基本数据类型的值存放在栈内存中,而引用数据类型的值在堆内存中创建,在栈内存中存放的是堆内存中的地址,因而称为引用数据类型。包装类,字符串String以及所有的Java系统类和自定义的类都属于引用数据类型。2.4常量与变量(续)
Java程序设计基础大连理工大学出版社第三章运算符与赋值3.2表达式与语句3.1运算符与表达式3.3数组3.4方法Java提供了丰富的运算符环境。Java有4大类运算符:算术运算、位运算、关系运算和逻辑运算。Java还定义了一些附加的运算符用于处理特殊情况。3.1 运算符与表达式算术运算符
3.1 运算符与表达式(续)位运算符
位运算是对操作数以二进制比特位为单位进行的操作和运算,位运算的操作数和结果都是整数类型。这些整数类型包括long,int,short,char及byte。
3.1 运算符与表达式(续)位运算符(续)3.1 运算符与表达式(续)位运算符(续)移位运算是将某一变量所包含的各比特位按指定的方向移动指定的位数3.1 运算符与表达式(续)位运算符(续)public
classMultByTwo{
public
static
voidmain(Stringargs[]){
inti;
intnum=0xFFFFFFE; num=num<<1; System.out.println(num); num=num<<1; System.out.println(num); }}3.1 运算符与表达式(续)从上面的程序运行结果可以看出每次左移都可以使原来的操作数翻倍,程序员们经常使用这个办法来进行快速的2的乘法。但是要小心,如果将1移进高阶位(31或63位),那么该值将变为负值。同样的,将值每右移一次,就相当于将该值除以2并且舍弃了余数。可利用这个特点将一个整数进行快速的2的除法。关系运算符
关系运算符决定值和值之间的关系3.1 运算符与表达式(续)关系运算符
Java中的任何类型,包括整数,浮点数,字符,以及布尔型都可用“==”来比较是否相等,用“!=”来测试是否不等。故常常用在if控制语句和各种循环语句的表达式中。一定要注意的是两个数是否相等是通过两个等号“==”进行判断,一个等号“=”表示赋值。3.1 运算符与表达式(续)逻辑运算符
逻辑运算符的运算数只能是布尔型,而且逻辑运算的结果也是布尔类型。
3.1 运算符与表达式(续)表达式与语句表达式是由变量、常量、对象、方法调用和操作符组成的公式。符合语法规则的表达式可以被编译系统理解、执行或计算,表达式的值就是对它运算后所得的结果。计算机程序是一组指令,告诉计算机如何做,其中的每个指令称为语句。语句由表达式后面加分号构成。3.1 运算符与表达式(续)所有的Java程序自动导入java.lang包。该包定义了一个名为System的类,该类封装了运行时环境的多个方面。System是一个系统类,它的完全类名是“java.lang.System”。使用System.out.println()和System.in.read()3.2 简单输入输出System同时包含三个预定义的流变量,in,out和err。System.out引用了System的一个静态成员“out”。在JRE启动时,System.out被初始化成标准输出对象。类似的还有System.err,代表标准错误。println是System.out的一个方法,它向标准输出(屏幕)打印出指定字符串,然后换行。例如:System.out.println("Hello,world!");System.in是inputStream的对象;System.out和System.err是PrintStream的对象。它们都是字节流,它们用来读写外设的字符。Java中,键盘输入由从System.in读取数据来完成。3.2 简单输入输出(续)JOptionPane类是Java类库提供的可供程序员使用的类,主要用于创建简单输入输出对话框,以完成简单的输入输出操作。要在程序中使用JOptionPane类,需使用如下语句在程序中引入该类:importjavax.swing.JOptionPane;import语句要出现在程序开头的地方,也就是类定义之前创建输入对话框的方法:JOptionPane.showInputDialog(Stringmessage)参数message用于指定对话框中的提示消息。该方法的返回类型为String类型,因此,如果用该方法输入数据时,需要进行字符串数值类型的转换。3.2 简单输入输出(续)消息对话框是有模式对话框(即未点击确定之时,不能对窗口进行任何动作),进行一个重要的操作之前,最后能弹出一个消息对话框。JOptionPane.showMessageDialog()是javax.swing包中的静态方法:JOptionPane.showMessageDialog(ComponentparentComponent,Stringmessage,Stringtitle,intmessageType)3.2 简单输入输出(续)创建一个消息对话框,其中参数parentComponent指定消息对话框所依赖的组件,消息对话框会在该组件的正前方显示出来;message指定对话框上显示的消息;title指定对话框的标题;messageType确定对话框的外观。messageType常量类型:
3.2 简单输入输出(续)3.3 数组数组是指一组相同类型数据的集合。数组提供了一种把相关数据集合在一起的便利方法,应用很广泛。
数组中的每个数据称为数组的元素,数组中的元素可以是任意类型的,既可以是基本数据类型,也可以是引用类型。
Java把数组作为对象来实现的,用new关键字创建数组,开辟其存储空间,数组名是一个引用变量。3.3 数组数组的声明和创建,2步骤1)声明数组变量及其类型(即每个元素所属的类型)2)使用new关键字创建数组,为数组对象分配存储空间数组的声明和创建语句可以写在一起:
数组类型[]数组名;数组类型数组名[];new数组类型[数组长度]数组类型[]数组名=new数组类型[数组长度];3.3 数组(续)数组初始化数组在创建之后,每个元素会自动赋予其数据类型的默认值,如数值类型将赋0值,boolean类型将赋false等。如果需要,可以对数组进行显式的初始化,在定义数组的时候就给数组的每个元素赋值:将所有的初始值用{}括起来,每个值之间用逗号“,”隔开。例如:int[]arr=newint[]{1,2,3};char[]chs=newchar[]{‘H’,’E’,’L’,’L’,’O’};元素的引用数组中的每个元素都有一个索引,或者称为下标,代表了元素在数组中所处的位置。索引的范围:0~数组长度-1元素的引用格式:设有:int[]arr={1,2,3}; 则数组名[元素的索引]3.3数组(续)7.1 基本数据类型的一维数组(续)数组与for循环的结合运用:以数组元素的索引值作为循环变量,结合循环结构实现遍历数组中的所有元素。一般格式:示例for(i=0;i<arr.length;i++){//对arr[i]的操作}3.3数组(续)实例运用从控制台输入若干整数,求其最大值和和值。用选择排序算法对数组进行升序排序。用冒泡排序算法对数组进行升序排序。3.3数组(续)对象数组的各个元素均为对象。对象数组的创建除了用new开辟内存空间之外,还需要进一步地为每一个元素(都是对象)赋引用值。例如:String[]hello=newString[3];hello[0]=“早上好”;hello[1]=“中午好”;hello[2]=“晚上好”;3.3数组(续)对象数组的各个元素均为对象。对象数组的创建除了用new开辟内存空间之外,还需要进一步地为每一个元素(都是对象)赋引用值。例如:示例String[]hello=newString[3];hello[0]=“早上好”;hello[1]=“中午好”;hello[2]=“晚上好”;3.3数组(续)数组的数组:理解多维数组的形成多维数组可以看做是数组的数组,即数组中的每一个元素又是一个数组。3.3数组(续)二维数组的定义例如:int[][]a=newint[3][2];
数组类型[][]数组名;数组类型[]数组名[];数组类型数组名[][];3.3数组(续)不规则的二维数组int[][]b=newint[3][];b[0]=newint[2];b[1]=newint[3];b[2]=newint[4];3.3数组(续)二维数组的初始化示例int[][]a={{1,2},{3,4}};int[][]b={{1},{2,3},{3,4,5}};3.3数组(续)二维数组元素的引用行标取值范围:0~第一维长度-1列标取值范围:0~第二维长度-1。示例数组名[行标][列标]3.4方法方法的定义、调用和返回
类的组成主要包括成员变量和成员方法2部分,成员变量描述属性,成员方法描述行为。对象所具有的行为能力都是通过方法体现的。
方法的定义
在Java中,方法是类的组成部分之一,每个方法都属于特定的类,方法的定义必须位于类体之中。方法定义的一般格式为:返回值类型方法名(形式参数列表){ //方法体}3.4方法(续)方法的定义、调用和返回(续)
左花括号{之前的部分为方法定义的头部,主要包括返回值类型、方法名和形参列表。方法名,必须是合法的标识符,应按照Java的命名规范进行命名,最好还能做到见名知意。返回值,如果方法执行完后会带回一个值,这个值就叫做返回值。返回值类型,表示该方法执行完毕后带回的值所属的类型,可以是基本数据类型,也可以是对象类型。但如果方法只是完成一定的操作而没有带回任何的值,则返回值类型应该声明为void。形式参数列表代表的是:使用这个方法实现一定功能时需要传递给方法的若干数据,可以是0个,也可是多个,各个参数之间要用逗号“,”分隔,每个参数都必须带上类型的声明。{和}之间是方法体,包含若干的可执行语句,用于实现方法的功能。方法定义时的可缺省部分这里并未列出,后面的章节将讨论到其它部分。3.4方法(续)方法的定义、调用和返回(续)
一个合法的方法声明
intadd(inta,intb){ intsum=0; sum=a+b; returnsum;}
add()方法实现求2个加数的和值,当需要使用该功能时,应调用add()方法,提供2个实际的加数分别传给形式参数a和b,方法体结束之前通过returnsum;语句将计算得到的和值带回给调用者。3.4方法(续)方法的定义、调用和返回(续)
方法的调用方法由类的对象,用圆点运算符“.”来调用,方法调用的格式为:对象名.方法名(实际参数列表)方法定义时,方法名后()中的参数称为形式参数,代表该方法在执行时需要哪些数据。在发生方法调用时,执行流程将转去执行方法体。3.4方法(续)方法的定义、调用和返回(续)
在调用方法时,应注意如下几点:实际参数应与形式参数的个数、类型、顺序均保持一致。实际参数的值将对应地传给形式参数。若方法定义时未定义任何形式参数,则调用方法时参数列表留空,但是()一定不能省。若方法定义时的返回值类型非void,则方法调用就相当于是同类型的一个值(因为有返回值的方法必会用return返回一个同类型的值)。若方法定义时的返回值类型为void,则方法调用一定不能出现在赋值运算符“=”的右边。3.4方法(续)方法的定义、调用和返回(续)
方法的返回
发生方法调用时会转去执行方法体,方法体执行完毕则从方法返回,表示方法调用结束,将返回到被调用处,如果有必要还可以返回值给调用者3.4方法(续)方法的定义、调用和返回(续)
方法的返回
(续)return语句的格式如下:return[表达式];其后的表达式是可以缺省的部分,是否缺省视方法是否返回值而定。如果方法定义时声明了返回值类型,就必须使用return表达式返回一个同类型的值。如果方法的返回值类型被声明为void,则方法体中不能用return表达式带回值。
3.4方法(续)方法的定义、调用和返回(续)关于方法的定义、调用和返回的补充说明:
调用类的成员方法,一般需要先创建类的对象(调用类的静态方法不用如此),再以对象名.方法名(实际参数列表)的格式调用。main()方法中可以创建自己所属的类自身的对象。3.4方法(续)方法的定义、调用和返回(续)方法的嵌套调用
如果将一个方法调用作为另一个方法的实际参数,就形成了方法的嵌套调用。如果有形如:funa(funb(func(参数),其它参数),其它参数)的多层嵌套调用,执行时将从处于最内层的方法调用开始,依次返回到上一层方法调用。即最先执行func()方法,从func()返回后,将返回值传给funb()方法的形参开始执行funb(),从funb()返回后再将其返回值传给funa()的形参,开始执行funa()。3.4方法(续)从方法返回对象
方法的返回类型除了基本数据类型外,还可以是对象类型,即可以从方法返回对象。3.4方法(续)区别同名的局部变量与成员变量:this引用出现在类中各个不同位置的变量都是有其作用域的,在其作用范围内,这个变量才能使用。在相同的作用范围内,不能定义同名的变量。在类体中、方法外声明的变量为类的成员变量,其作用域为整个类体。方法的形式参数,以及方法体内部声明的变量,都属于局部变量,作用域仅为方法体,一旦方法调用结束,这些局部变量也将消失。3.4方法(续)区别同名的局部变量与成员变量:this引用(续)在类体中,引用成员变量时可以加上this引用:将this.
作为成员变量的前缀。那么在出现成员变量与局部变量同名的情况时,就可以区分了:使用了this引用的是成员变量,而无this引用的是局部变量。
Java程序设计基础大连理工大学出版社第四章 程序的流程控制4.4跳转控制4.3重复执行4.2选择性执行4.1Java的流程控制语句4.1 Java的流程控制语句在程序设计中,为完成一定的操作或实现一定的功能,需要按照一定的顺序安排好需要执行的语句,这就是流程控制。Java语言支持3种流程控制结构:顺序结构:默认的选择结构:if-else语句和switch语句循环结构:for语句、while语句和do-while语句4.1 Java的流程控制语句(续)默认的顺序结构如图:classSequenceDemo1{
public
static
voidmain(String[]args){ Stringname="ZhangSan"; Stringgreetings="WelcometoJavaWorld!"; System.out.print(name); System.out.print(":"); System.out.println(greetings); }}4.2 选择性执行在某些应用场景中,需要根据特定条件判断的结果,选择性的执行某些语句。Java的分支结构语句就能实现这种选择性的执行if-else语句switch语句4.2 选择性执行(续)二选一:if-else语句当这个特定的条件只有正、反2面时,可以用基本的if-else语句来实现二选一结构:条件为“正”——即条件成立时,执行某些语句;条件为“反”——即条件不成立时,执行另外的语句。4.2 选择性执行(续)二选一的if-else语句语法:执行流程:布尔表达式结果为true,代表条件成立,将执行if后{}中的语句序列1;布尔表达式结果为false,代表条件不成立,将执行else后{}中的语句序列2。示例if(布尔表达式){
语句序列1}else{
语句序列2}4.2 选择性执行(续)if-else语句在使用时的一些注意事项:if后的表达式必须是布尔表达式,其值只能是true或者false。if分支或else分支,若其后的执行语句只有1条,则{}可以省略(但不推荐省略)。else分支并不是必须的。如果只需要在满足一定条件时执行一定的操作,而条件不满足时什么也不必做,则可以省略else分支。4.2 选择性执行(续)多选一:嵌套的if-else结构嵌套的if-else结构,可以实现从多种(主要是3种及以上)分支中选其一执行。规整的嵌套if-else结构(也称作if-else-if结构),如图所示:4.2 选择性执行(续)规整的嵌套if-else语句语法:示例if(布尔表达式1){
语句序列1}elseif(布尔表达式2){
语句序列2}elseif(布尔表达式2){
语句序列3}……else{
语句序列N}4.2 选择性执行(续)嵌套的if-else变形1:在if分支中再嵌套if-else结构。if(布尔表达式1){ //还可以包含其它语句if(布尔表达式2){
语句序列1 }else{
语句序列2 } //还可以包含其它语句}else{
语句序列3}4.2 选择性执行(续)嵌套的if-else变形2:在else分支中再嵌套if-else结构。if(布尔表达式1){
语句序列1}else{ //还可以包含其它语句
if(布尔表达式2){
语句序列2}else{
语句序列3}//还可以包含其它语句}4.2 选择性执行(续)嵌套的if-else结构补充说明:如果有必要的话上述结构中的else分支都是可以省略的。即使if或else分支中的可执行语句只有1条,也最好不要省略{},如果分支中嵌套了if-else语句,就更不要省略{},{}可以界定if或else分支的范围,以方便对if和else进行匹配。在嵌套的if-else结构中,else与if配对的原则是:else总是与其前面最近的一个未配对过的if配对。弄清else与哪个if配对,才能理清所描述的条件。示例4.2 选择性执行(续)另一种多选一:switch语句switch(表达式){ case值1:语句序列1 case值2:语句序列2 …… case值N:语句序列N default:语句序列N+1}4.2 选择性执行(续)switch语句使用说明switch后的表达式必须是一个能得到整型值的表达式,简单的说,switch后必须是一个整数。case后的值也必须是整数值,case与值之间必须有空格。4.2 选择性执行(续)switch语句使用说明(续)执行方式:计算switch后表达式的值,然后顺序的与每一个case后的值进行匹配,如果找到相等的值,即是找到了执行的入口,接下来就从该case子句的语句序列开始顺次地向下执行,直至遇到switch的}为止;如果表达式的值与每一个case后的值都不相等,则执行default后的语句,直至遇到switch的}为止。4.2 选择性执行(续)switch语句使用说明(续)使用default的意图是:若switch的表达式没有找到匹配的值,即没有满足条件的分支,则执行default后的语句,可以给用户一些提示信息。default子句是可以省略的。示例4.2 选择性执行(续)实例运用输入3个整数,找出其中的最大者并输出输入一个分数值,然后判定该分数对应的成绩等级,假设:分数>=90,等级为A;分数>=80而<90,则为B;分数>=70而<80,则为C;分数>=60而<70,则为D;分数<60就为E。改用switch结构来实现上述应用4.3 重复执行有些问题可以通过重复执行某些操作来解决,比如说求1+2+……+100的值。Java提供了几种实现重复执行的语句(循环语句)while语句for语句do-while语句4.3 重复执行(续)while语句:执行流程:示例while(循环条件){//需要重复执行的语句,也叫做循环体}4.3 重复执行(续)while循环使用时的注意事项:一般在进行循环条件判定之前给循环变量赋初值。为避免死循环的出现,循环体中应包含能使循环趋向结束的语句。比如修改循环变量的值,使得某个时刻循环条件不再成立而退出循环。4.3 重复执行(续)for语句:执行流程:for(表达式1;表达式2;表达式3){ //循环体}4.3 重复执行(续)说明:表达式2代表循环条件,应是一个布尔表达式,根据其值为true或为false确定是否执行循环体语句。表达式1通常用于给循环变量赋初值,这部分只会执行一次。表达式3通常用于修改循环变量的值,使得最终表达式2代表的循环条件可能成为false,从而退出循环。表达式3在每次循环体执行完毕之后都会执行一次。示例4.3 重复执行(续)表达式缺省的说明:无论缺省哪个表达式,或是表达式全部缺省,其中分隔3个表达式的分号“;”一个都不能少。表达式1可以缺省,则循环变量赋初值应放到for语句之前进行。表达式2可以缺省,但这样就相当于是循环条件永远为true,循环将无限次地运行下去。表达式3可以缺省,则循环变量值的改变需要放至循环体中进行。3个表达式全部可以缺省(不推荐)。4.3 重复执行(续)do-while语句:执行流程:示例do{ //循环体}while(循环条件);4.3 重复执行(续)循环的嵌套一个循环体内部又包含另一个完整的循环结构,就称为循环的嵌套。内嵌的循环中还可以再嵌入循环结构,这样就可以形成多层循环。3种循环语句while语句、do-while语句和for语句之间可以互相嵌套。示例4.3 重复执行(续)实例运用求1!+2!+……+20!的和值用π/4≈1-1/3+1/5-1/7+……公式求π的近似值,直到某一项的绝对值小于10-6为止。百钱买百鸡问题:现有100钱,要买100只鸡,已知母鸡5钱1只,公鸡3钱1只,小鸡1钱3只,要求找出用100钱买100只的方案。4.4 跳转控制分支语句、循环语句都有自己的执行流程,尤其是循环语句,若不遇到合适的条件循环不会终止,但有的时候在特定条件出现的时候,可能会希望能将现有的执行流程改变,而跳转到其它地方继续执行。Java提供了一些可以控制执行流程转向的跳转控制语句:break语句continue语句4.4 跳转控制(续)break语句:使用范围:用在循环语句for、while、do-while语句和分支语句switch中。break;4.4 跳转控制(续)break用于switch结构,表示终止该switch语句的执行,转去执行switch语句之后的语句。break用于循环结构,表示终止break语句所在的该层循环的执行,转至该循环语句之后的语句继续执行。示例4.4 跳转控制(续)跳转至下一轮迭代:continue语句使用范围:continue只能用在循环结构中。循环体中遇到continue语句时,将跳过其后还未执行的循环体语句,转去判断循环条件是否成立而决定是否要进入下一轮迭代(即再次进入循环体执行)。示例continue;本章小结程序的流程控制结构共3种:顺序结构、选择结构(或叫分支结构)和循环结构。Java使用if-else语句实现基本的二选一分支结构,使用嵌套的if-else和switch语句可以实现多分支结构。Java使用for语句、while语句和do-while语句来实现循环结构,其中for语句的使用最为灵活。break语句可以从switch结构中跳出,或是终止循环的执行,continue可以终止本次循环体的执行,转去执行下一轮循环的判定。
Java程序设计基础大连理工大学出版社第5章 深入讨论类(续)5.4 包与访问控制修饰符
5.3 抽象类与接口
5.2 继承
5.1 表现多态:方法重载
5.1 表现多态:方法重载面向对象编程的多态特征,简单的说就是“对外一个接口,内部多种实现”。有时候,一种功能可能会有多种不同的实现方式。Java支持方法重载(overload),可以在同一个类中定义多个名字相同但参数不同的方法。那么同一个方法名就是对外的统一接口,参数不同导致内部实现也不同,方法重载是面向对象编程多态特征的一种表现形式。方法重载是编译时的多态,编译器在编译时刻确定具体调用哪个被重载的方法。5.1 表现多态:方法重载(续)如何定义和调用重载的方法
在Java中,定义重载的方法必须遵循以下原则:方法名相同,包括大小写。方法的参数列表必须不同,也就是参数的类型、个数、顺序至少有一项不同。编译器将参数列表的不同作为重载的判定依据。方法的返回类型、修饰符可以相同,也可以不同,它们不作为重载的判定依据。5.1 表现多态:方法重载(续)构造方法的重载
构造方法也可以重载,这样在创建对象时可以调用不同版本的构造方法来进行初始化操作。在构造方法中可以使用this关键字调用其它版本的构造方法,减少重复编码。需要注意的是:重载构造方法时,若要使用this调用其它版本的构造方法,则该this调用语句必须作为构造方法的方法体中的第一条语句。5.2 继承继承是实现代码重用的一种有力手段。如果有多个类具有一些相同的属性和方法,可以将这些相同的属性和方法抽象出来定义为一个父类,在父类中定义这些属性和方法,则具有这些属性和方法的其它类可以从这个父类派生出来,不必再重新定义这些属性和方法,称这些派生而来的类为子类。
5.2 继承(续)类的继承
在继承关系中,被继承的类称为父类、超类或基类,其中定义了子类所共有的属性和方法。由继承方式创建的类称为子类,子类将父类的属性和方法继承过来,不必重新定义,并且可根据需要增加新的属性和方法。Java的所有类都直接或间接地继承自java.lang.Object类。类定义没有用extends继承某个类时,实际上隐式继承了Object类。5.2 继承(续)
类的继承(续)
在继承关系中,被继承的类称为父类、超类或基类,其中定义了子类所共有的属性和方法。由继承方式创建的类称为子类,子类将父类的属性和方法继承过来,不必重新定义,并且可根据需要增加新的属性和方法。Java的所有类都直接或间接地继承自java.lang.Object类。类定义没有用extends继承某个类时,实际上隐式继承了Object类。5.2 继承(续)
类的继承(续)
5.2 继承(续)
类的继承(续)Java中类的继承用关键字extends实现,如下所示:classSonClassextendsSuperClass{ ……}5.2 继承(续)
super关键字
在继承关系中,也存在类似的问题:若子类中定义了与父类同名的成员变量,则父类的成员变量被隐藏。若子类的方法中定义了与父类成员变量同名的局部变量,则父类的成员变量被隐藏。若子类中定义了与父类相同的成员方法(同方法名,同参数列表,同返回类型),则父类方法被覆盖,在子类范围内,父类方法不可见。5.2 继承(续)
super关键字(续)
解决继承关系中类变量或方法不可见的问题,需要使用关键字super。
super可以用来引用继承自父类的成员。super的使用有如下几种形式:super.变量名:引用父类成员变量。super.方法名(参数列表):调用父类成员方法。super(参数列表):调用父类构造方法,在子类构造方法中调用父类的构造方法以实现对继承自父类的成员变量的初始化,5.2 继承(续)
继承中的final修饰符
出于安全考虑,类的实现细节不允许被改动,或者不允许子类覆盖父类的某个方法,这时候就可以对类或成员方法使用final修饰符。final有不可改变的含义,可以用于修饰类、成员方法以及成员变量。5.2 继承(续)
继承中的final修饰符(续)
定义类时,在class关键字前可以加上final修饰符,则这个类将不能再派生子类,即不能被其它类所继承。例如:publicfinalclassA{ ……}则类A不可被继承。声明类的成员方法时,在返回类型前可以加上final修饰符,则方法所属的类被继承时,这个方法不会被重写。例如:publicfinalvoidmethod(){ ……}5.2 继承(续)
继承中的final修饰符(续)
final修饰成员变量与继承无关,它表示的是变量一经赋值,其值将不能改变,也就是通过final可以定义常量,常量名一般全部大写。例如:finalintMAX_NUM=100;如果程序中试图修改由final修饰的MAX_NUM的值,将会产生编译错误。
5.3 抽象类与接口抽象类与抽象方法
Java中可以用abstract修饰符修饰类和成员方法。用abstract修饰的类为抽象类。在类的继承体系中,抽象类常位于顶层。抽象类不能被实例化,即不能创建抽象类的对象。用abstract修饰的方法为抽象方法,抽象方法没有方法体,一般用来描述具有什么功能,而不提供具体的实现。5.3 抽象类与接口(续)抽象类与抽象方法(续)
以下代码中AbstractClass为抽象类,它包含一个抽象方法method1()和一个具体方法(非抽象方法)method2()。
publicabstractclassAbstractClass{ publicabstractvoidmethod(); //抽象方法,无方法体
publicvoidmethod2(){ //具体方法,即是方法体为空,{}也不能省略
…… }}5.3 抽象类与接口(续)抽象类与抽
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保山市隆阳区2027届三上数学期末调研试题含解析
- 2027届广州市番禺区六年级数学第一学期期末学业水平测试试题含解析
- 2025年聊城市东昌府区中小学教师招聘笔试试题及答案详解
- 2026年哈尔滨市呼兰区中小学教师招聘考试参考试题及答案详解
- 2026年吴忠市红寺堡区街道办人员招聘笔试备考题库及答案详解
- 2027届昌都地区丁青县六年级数学第一学期期末质量跟踪监视试题含解析
- 2026四川阿坝州黑水县二道桥电站有限责任公司招聘2人笔试模拟试题及答案详解
- 浙江省景德镇市2027届四上数学期末考试模拟试题含解析
- 2026年哈尔滨市松北区中小学教师招聘笔试备考试题及答案详解
- 2026年四川省乐山市法检系统书记员招聘考试参考试题及答案详解
- 电力工程项目投标文件撰写模板
- GCP汇报课件教学课件
- 平房灭火救援授课课件
- 判决书不公开申请书模板
- GB/T 5780-2025紧固件六角头螺栓C级
- 《施工组织设计专项施工方案资料》铁路客运专线土建工程全套施工组织设计第八章-安全目标和安全保证体系及措施
- 品质部纪律管理办法
- 《四川省信息化项目费用测算标准》(修订征求意见稿)
- T/CBMCA 011-2020瓷质砖背胶
- DB4201-T 704-2024 武汉市党政机关物业管理服务规范
- JT-T-1284-2020低平板半挂车技术规范
评论
0/150
提交评论