版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
标识符与关键字标识符与关键字标识符:用于给类、方法、变量等命名的字符串标识符由字母、数字、下划线和美元符号$组成首字符不能是数字区分大小写不能是关键字如true,false,nullpublic,class,staticvoid,int,new等关键字:Java语言里事先定义的具有特别意义的标识符标识符与关键字注意:在起名字的时,为了提高阅读性,要尽量有意义,“见名知意”。关键字标识符:关键字的定义和特点定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所有字母都为小写,大多编辑器会将关键字用特殊的方式标出,共有48个。关键字用于定义数据类型的关键字classinterfaceenumbyteshortintlongfloatdoublecharbooleanvoid用于定义数据类型值的关键字truefalsenull用于定义流程控制的关键字ifelseswitchcasedefaultwhiledoforbreakcontinuereturn关键字用于定义访问权限修饰符的关键字privateprotectedpublic用于定义类,函数,变量修饰符的关键字abstractfinalstaticsynchronized用于定义类与类之间关系的关键字extendsimplements用于定义建立实例及引用实例,判断实例的关键字newthissuperinstanceof用于异常处理的关键字trycatchfinallythrowthrows用于包的关键字packageimport其他修饰符关键字nativestrictfptransientvolatileassertJava中的名称命名规范Java中的名称命名规范:包名:多单词组成时所有字母都小写:xxx.yyy.zzz类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZlastNameuserNamesurveyNameorderName单元问题或练习问题一下列哪些是合法的标识符?true,default,_int,good-class,2a,b_3,yly@zjnu,$_11注释注释注释:用于解释说明程序的文字提高了代码的阅读性Java中的注释类型:单行注释多行注释文档注释(java特有)注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现注释单行注释格式://注释文字多行注释格式:
/*注释文字*/文档注释格式:
/**注释文字*/对于被注释的文字,不会被JVM(java虚拟机)解释执行。常量和变量常量和变量Java的常量值用字符串表示,区分为不同的的数据类型。如整形常量123实数形常量3.14,3.14f字符常量‘a’逻辑常量true、false字符串常量“helloworld”
注意:区分字符常量和字符串常量。注意:常量这个名词还会在另外其它语境中表示值不可变的变量。参见final关键字例如:finaldoublePI=3.14;基本数据类型Java是一门强数据类型语言,Java程序中定义的所有数据都有一个固定的数据类型。Java中的数据类型基本可以分为两类:基本数据类型和引用数据类型。数据类型对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。常量和变量变量的概念:内存中的一个存储区域该区域有自己的名称(变量名)和类型(数据类型)Java中每个变量必须先申请(声明),然后必须进行赋值(填充内容),才能使用该区域的数据可以在同一类型范围内不断变化定义变量的格式:
常量和变量变量的概念:内存中的一个存储区域该区域有自己的名称(变量名)和类型(数据类型)Java中每个变量必须先申请(声明),然后必须进行赋值(填充内容),才能使用该区域的数据可以在同一类型范围内不断变化定义变量的格式:
100int类型i常量和变量变量变量是通过使用变量名来访问这块区域的Java是强类型语言,每个变量必须先声明类型,后使用.使用变量注意:变量的作用域:一对{}之间有效常量和变量动态生成内存空间(堆)单元问题或练习问题一如何交换两个变量x,y的值?1基本数据类型与类型转换运算基本数据类型逻辑类型常量:true、false使用关键字boolean来声明逻辑变量,例如:booleanmale=true,flag=false;整数类型整数常量的三种表示12,012,0x12四种整数类型byte,short,int,long类型关键字所占内存取值范围byte类型byte1个字节-27~27-1short类型short2个字节-215~215-1int类型int4个字节-231~231-1long类型long8个字节-263~263-1基本数据类型字符类型字符常量用单引号括起来的一个字符例如:’A’,’b’,’好’使用关键字char来声明字符变量例如:charch=’A’,home=’家’;有些特殊字符需要利用转义字符来实现,例如:charch1=’\n’,ch2=’\”’,ch3=’\’’,ch4=’\\’;Char类型变量占2个节点,里面存储的是某个字符的Unicode编码基本数据类型float类型(占4个字节、8个有效数位)常量表示:123.456f、234.5678F、12E34F用float关键字来声明变量例如:floatx=1.4f,y=120.3456789f;注意:变量y的值为120.34568(8个有效数位)double类型(占8个字节、16个有效数位)常量表示:123.4、123.456789d、1.234E2、1.234E2D用double关键字来声明变量例如:doubleh=173.0,w=63.8d;基本数据类型float类型(占4个字节、8个有效数位)double类型(占8个字节、16个有效数位)类型占用存储空间表数范围单精度float4字节-3.403E38~3.403E38双精度double8字节-1.798E308~1.798E308类型转换运算按精度从低到高排列的类型byte<short,char<int<long<float<double低级别类型的值赋给高级别变量时,系统会自动转换类型例如:floatx=100;高级别类型的值赋给低级别变量时,需要强制转换类型例如:intx=(int)34.59;类型byteshortcharintlongfloatdouble占用空间1Byte2Byte2Byte4Byte8Byte4Byte8Byte数值范围-27~27-1-215~215-10~216-1-231~231-1-263~263-1单元问题或练习问题一下列哪些是赋值语句是否合法?若不合法,说明理由booleanflag=‘true’;bytea=260;floatb=2.34;doublec=100;intd=(byte)(13.14);charx=250;12问题二编写一个Java程序,要求输入一个正方形的边长,计算并输出正方形的周长与面积基本数据类型的输入输出基本数据类型的输入Scanner类创建Scanner类的对象Scannerreader=newScanner(System.in);Scanner类对象实现对标准输入对象(System.in)的封装Scanner类的对象读取数据的方法nextBoolean(),nextByte(),nextInt(),nextFloat,…Scanner类使用举例基本数据类型的输出标准输出流对象System.outprintln()方法和print()都可输出字符串、表达式的值,也可以使用“+”将变量、表达式、常数及字符串连接并输出前者输出数据后换行,后者输出数据后不换行printf()方法:其用法与C语言中的printf函数类似输出结果单元问题或练习问题一下列哪些几条语句有问题?请说明理由Scannerreader=newScanner(System.in);boolean
b=reader.nextBoolean;float
x=reader.nextInt();float
y=reader.float();reader.close();12问题二下列代码的输出结果是什么?算术运算符与算术表达式常用算术运算符+,-,*,/,%,++,--/运算符兼具普通除与整除(两边都为整数)的功能%运算符表示求除问题:如何获得一个三位整数的百位数字、十位数字和个位数字?算术运算符优先级(从高到低)()>>++、-->>*、/、%>>+、-算术表达式结果的精度问题算述表达式结果的精度是精度最大运算数的精度例如:表达式5.0f/2+10.2的结果是double类型算术运算符与算术表达式关系运行符与关系表达式关系运算符关系表达式n>=1,n%5==0,Math.round(Math.sqrt(x))==Math.sqrt(x)如何表达1<n<5?
运算符含义运算结果(设x=8,y=6)==等于x==yfalse!=不等于x!=ytrue>大于x>ytrue<小于x<yfalse>=大于等于x>=ytrue<=小于等于x<=yfalse逻辑运行符与逻辑表达式逻辑运算符逻辑表达式1<n&&n<5,!3>4||4+2!=6,x%5==0&&Math.round(x)==x&&和||具有短路功能(x=1)==0&&(y=2)>0,(x=1)==1||(y=2)>0运算符含义运算x=falsey=falsex=truey=falsex=falsey=truex=truey=true!非!xtruefalsetruefalse&&与x&&yfalsefalsefalsetrue||或x||yfalsetruetruetrue^异或x^yfalsetruetruefalse逻辑运行符与逻辑表达式常用位运算符位异或运算应用(实现加密解密)运算符含义运算结果(设x=11010110,n=2,y=01011001)~位非~x00101001&位与x&y01010000|位或x|
y11011111^位异或x^y10001111<<左移x<<n01011000>>右移x>>ny>>n
11110101
00010110运行符的优先级顺序各类运算符的优先级顺序(由高到低)括号运算符>>算术运算符>>关系运算符>>逻辑运算符>>赋值运算优先级相同的情况赋值符运算,从右往左例如:a=b=10;等价于b=10;a=b;其它运算符,从左往右例如:z=20%8*2/4;等价于z=((20%8)*2)/4;注意:在Java语言中,%、*、/的优先级相同常用数学函数Math类常用数学函数由Math类的相应方法实现Math.abs(x)返回x的绝对值Math.sqrt(x)返回x的平方根Math.power(x,y)返回x的y次方Math.log(x)返回x以e为底的对数Math.sin(x)返回弧度x对应的正弦值Math.asin(x)返回正弦值x对应的弧度Math.random()返回一个[0,1)之间的随机数Math.round(x)返回x经四舍五入后的结果单元问题或练习练习一假设x为10、y为20、z为30,求下列表达式的值。x<10||x>10x>y&&y>z(x<y+z)&&(z%y==x)!(x<y+z)||!(x+10<=20)!(x!=y)&&x==y&&(x<y^y<z)12练习二根据下列要求写出相应的逻辑表达式判断整数x是正偶数的逻辑表达式判断边长为a,b,c的三角形是直角三角形的逻辑表达式判断年份y是闰年的逻辑表达式程序的三种结构顺序结构举例选择结构if语句switch语句循环结构for语句while语句do~while语句三种if语句结构
三种if语句结构if结构(无else部分)if(<条件>)语句;if
(<条件>){语句块}应用举例输入两个整数,并按从小到大顺序输出思考:如何把三个数按从大到小的顺序输出?三种if语句结构if~elseif结构if(<条件1>)
语句1;elseif
(<条件2>)
语句2;……elseif(<条件n>)语句n;else
语句n+1;三种if语句结构if~elseif结构if(<条件1>){
语句块1;}elseif
(<条件2>){
语句块2;……}elseif(<条件n>){
语句块n;}else{语句块n+1;}三种if语句结构
三种if语句结构if~elseif结构应用举例根据身高体重判断体型标准体重=身高(单位cm)-105体重与标准体重关系体型体重>1.1*标准体重偏胖体重<0.9*标准体重偏瘦其它情况正常单元问题或练习练习一输入三个整数,并按从小到大顺序输出。1成绩(score)绩点(xfjd)Score=1005.095<=score<1004.590<=score<954.085<=score<903.580<=score<853.075<=score<802.570<=score<752.065<=score<701.560<=score<651.0score<600.02问题二根据百分制成绩计算学分绩点。if语句的嵌套系统登录提示问题下面代码实现中存在的问题(代码效率低下)用户名(1001)密码(888888)提示信息
欢迎使用系统
×密码错误×
账号不存在××账号与密码都不正确if语句的嵌套分析流程图账号正确(userID==1001)账号不正确(userID!=1001)userPWD==888888userPWD!=888888userPWD==888888userPWD!=888888欢迎使用系统密码错误账号不存在账号与密码都不正确if语句的嵌套流程图与对应的代码使用{}良好的代码缩进风格必要的注释if语句的嵌套代码对比if语句的嵌套
单元问题或练习练习一输入平面上的一个坐标(x,y),根据下列规则判断该坐标所在象限(或原点、x轴、y轴)1横坐标(x)纵坐标(y)象限x>0y>0第一象限x>0y=0x轴x>0y<0第四象限x=0y=0原点x=0y≠0y轴x<0y>0第二象限x<0y=0x轴x<0y<0第三象限switch语句switch语句switch(变量){case
常量1:
语句块1;
break;case
常量2:
语句块2;
break;……case
常量n:
语句块n;
break;default:
语句块n+1;}switch语句应用实例第几季度是什么季节使用switch语句的注意事项变量只能是整数、字符串和枚举允许有任意数量的case分支Default语句须放在最后,允许省略季度季节1Spring2Summer3Autumn4Winter其它Invalidseasonswitch语句应用实例什么季节是第几季度?使用switch语句的注意事项(续)若某个case分支语句中,省略了break子句,则执行完该分支语句后继续执行下一个case分支语句季节季度Spring1Summer2Autumn3Winter4Other0switch语句单元问题或练习练习一编写程序,使用switch语句和if语句实现如下功能:输入年份与月份,输出该年份指定月份的天数。12问题一
能够用if语句实现的功能是否一定可以用switch语句实现?for语句语法格式for(语句1;逻辑表达式;语句2){
循环体}应用举例for语句应用举例求1+2+3+……+100之和求n的阶乘(n!=1×2×……×n)for语句应用举例找出所有的水仙花数(153是水仙花数,因为13+53+33=153)解题思路:需要逐个地对100到999之间的数进行检查,判断它是否是水仙花数。单元问题或练习练习一编写程序,计算1+3+5+7+……+99之和。12练习二编写程序,找出所有被3除余2,被5除余3的三位数,并以5个一行显示(格式如下)113128143158173188203218233248263278293308323338353368383398……while语句语法格式while(条件){
循环体}实例讲解do~while语句语法格式do{
循环体}while(条件);实例讲解do~while语句while与do~while语句比较比较下面两个程序的执行效果while语句应用举例求某个数n各数位之和(例如n=1234时,其各数字之和为10)解题思路:先取出1234的个位数再取出123的个位数再取出12的个位数再取出1的个位数问题:个数位怎么取?怎么样去掉个位数字?什么情况下应该继续上述过程?do~while语句应用举例使用循环强制用户输入满足特定要求(不小于6的偶数)的数据单元问题或练习
12练习二利用辗转相除法(基本思想如下所示)求两个数的最大公约数。mnr=m%n345834583424342410241041042420break和continue子句break子句用在switch、for、while、do~while中用于提前退出所在语句(以for为例)输出结果为:1,2,n=3break和continue子句continue子句用在for、while、do~while中用于跳出当次循环,继续下一次循环输出结果为:1,2,4,5,6,7,9,n=10break和continue子句break和continue功能比较输出结果为:1,2,n=3输出结果为:1,2,4,5,6,7,9,n=10break和continue子句break子句应用举例判断整数n是否是质数基本思想:从2到n-1逐个检查是否能够整除n,若它们都不能整除n,则说明n是质数;只要有一个数能够整除n,则说明n不是质数。问题:当发现某个数能够整除n,还继续测试吗?单元问题或练习练习一编写程序,找出最大的水仙花数(其它水仙花数不要输出)12练习二
编写程序,找出第三小的水仙花数(其它水仙花数不要输出)利用多重循环实现图形输出n层星号金字塔(以n=6为例)问题分析:通过循环逐行打印1~n行。第i行有几个空格?有几个星号?还需要一个换行。利用多重循环实现图形输出打印九九乘法表问题分析:通过循环逐行打印1~9行。第i行有几个等式?每个等式的第1个乘数的变化范围是什么?第2个乘数的变化范围是什么?怎么保证每一列的几个式子能够对齐?利用多重循环实现图形输出打印九九乘法表单元问题或练习练习一编写程序,输出n层如右图所示的倒立金字塔。12练习二
编写程序,输出如下图所示的乘法表。多重循环实现穷举破译密码找出满足下图所示要求的A、B、C、D的值(它们互不相同)。问题分析:通过数学分析是否有可以确定A、D值?如何实现对B、C的穷举?判断表达式如何表示?单元问题或练习练习一编写程序,找出20枚硬币(五分、两分、一分三种规格)的金额刚好是六角的所有取法12
封装与类问题(下面的代码存在什么弊端?)两个圆的数据与一个矩形的数据混在一起,计算圆面积的代码需要重复编写。如何消除这些弊端?封装与类用类实现封装封装和继承、多态是面向对象语言的3个重要特性类的设计(类是对象的抽象,圆的抽象如下)具有半径这一数据具有根据它的半径计算面积的功能类的实现(根据得到的抽象声明Circle类)封装与类用类实现封装(续)类的使用(创建Circle类的实例,即对象)创建对象访问成员变量调用成员方法封装与类理解封装把关系密切的数据与操作放在一起封装成类,仅向外公开必要的信息和操作,并隐藏对象的其它内部信息和方法的实现细节。封装的意义有助于模块内部紧密耦合、模块之间松散耦合,提高模块独立性。有助于使用者理解和使用模块,例如“显示器”对象。有利于提高代码的可重用性。单元问题或练习问题一把计算圆面积的方法定义在Example4_1类中好不好?12问题二举例生活中有关封装的例子。类与对象理解类与对象类是对所有相关对象的抽象(共同的特性),对象是类的实例。程序最终操作的是对象,要创建并使用对象,必须先定义类。类的结构类由类头和类体组成两部分组成类体由成员变量与成员方法两部分成类与对象类的结构(续)成员变量成员变量的数据类型可以是基本数据类型,也可以是其它类(后面会讲)成员变量的作用域(即有效范围)在整个类体内都可访问该类的成员变量类与对象类的结构(续)成员方法成员方法用于实现特定功能,它由方法头与方法体两部分组成。方法的返回值就是调用方法后获得的结果注意:对成员变量的操作只能放在方法中,右上图所示的代码是错误的。类与对象对象的声明与创建对象的声明CirclemyCircle;变量myCircle用于存放Circle类型的对象,此时的myCircle是空对象对象的创建myCircle=newCircle();上面的语句创建一个Circle类型的对象,并赋值给myCircle变量。使用对象成员变量的访问:
myCircle.radius=12.0;成员方法的访问:doublearea=myCircle.getArea();类与对象UML类图UML(UnifiedModelingLanguage)类图由类名、成员列表和方法列表组成。单元问题或练习练习一编写程序,声明下图所示的两个类,并创建和使用这两个类的对象。1方法的定义与调用
方法的定义与调用方法的定义(定义在类中,并由方法头和方法体组成)class
类名{
返回值类型方法名(参数){
方法体 }}方法的调用对象名.方法名(参数)例如:MyToolmyTool=new
MyTool();intnum1=myTool.nfact(10);intnum2=myTool.nfact(x)*myTool.nfact(10-x);方法的定义与调用参数的传递形参(定义时声明的参数)实参(调用时给它的参数)实参
形参方法的返回值方法调用表达式的值它由return语句决定如何设计方法明确功能确定参数与返回值方法的定义与调用无返回值的方法定义class
类名{
void方法名(参数){
方法体 }}可以省略return语句方法的调用对象名.方法名(参数);例如:myTool.printDLT(5);myTool.printDLT(x+2);方法的定义与调用方法的定义与调用练习判断一个整数是否是质数要几个参数?什么类型?返回值是什么类型?如何调用它?求两个正整数的最大公约数要几个参数?什么类型?返回值是什么类型?如何调用它?在屏幕上显示n个Hello单元问题或练习练习一在MyTool类中定义一个方法,实现求某个数各个数位之和的功能12练习二在MyTool类中定义一个方法,实现求两个数的最小公倍数的功能3练习三在MyTool类中定义一个方法,实现在屏幕上输出n层杨辉三角的功能方法的重载方法的重载在Java语言中,允许定义与已有方法名称相同但参数(个数或类型)不同的方法,后定义的方法实现对已有方法的重载。运行时,Java自动根据实参个数与类型选择执行重载方法的某个版本。不允许定义两个仅返回值类型不同的方法方法的重载方法重载举例单元问题或练习练习一在MyTool类中定义两个名为max的方法,分别实现求两个整数的最大值和三个整数的最大值。12练习二通过在Eclipse中使用Java内部类(例如:System.out对象、System.in对象等),找找到方法重载的例子,并体会这样设计的好处。构造方法构造方法概念构造方法是一种定义在类中的特殊方法,用类创建对象时需要用到构造方法。例如:CirclemyCircle=newCircle();//Circle()就是构造方法如果类中没有编写构造方法,系统会隐式地为该类提供默认的构造方法,该方法没有参数,方法体内也没有代码。如下所示:Circle(){}构造方法构造方法的定义与调用构造方法的名字必须与它所在的类的名字完全相同,且没有类型。构造方法举例(Circle类)一旦显式地定义了构造方法,系统不再提供默认构造方法。因此,下面创建对象的语句是错误的。应采用下面的语句是创建对象。构造方法构造方法的重载定义了上述两个构造方法后,下面两条语句都是正确的。单元问题或练习问题一一般地,我们可以在构造方法里实现什么功能?12练习一根据下面UML类图编写Rectangle类,并在主类中创建并使用Rectangle类的对象。对象的内存模型对象的声明与创建过程的内存模型对象的声明CirclemyCircle;变量myCircle用于存放Circle类型的对象,此时的myCircle是空对象对象的创建myCircle=newCircle();上面的语句创建一个Circle类型的对象,并赋值给myCircle变量。对象的内存模型进一步理解对象的内存模型类的定义(Rectangle类)对象的内存模型进一步理解对象的内存模型(续)对象的声明与创建对象的内存模型进一步理解对象的内存模型(续)普通类型变量与对象的内存模型比较单元问题或练习问题一阅读下面的程序,写出程序运行结果。1参数的传递规则参数的传递形参定义时声明的参数实参调用时给它的参数实参
形参问题当形参在方法内部发生改变时,是否会影响实参?参数的传递规则参数的传递Java中的参数传递是“按值”传递,即形参得到的值是实参的“复印件”,也就是说,在方法中改变形参的值对实参不会有影响。参数是引用类型的情况上面的例子是否违背了Java参数按值传递的规则?参数的传递规则参数传递的内存模型单元问题或练习问题一Java中,参数是按什么方式传递的?12练习二若参数是基本类型,当形参在方法内部被修改,会不会影响实参?3练习三若参数是引用类型,当形参在方法内部被修改,会不会影响实参?依赖关系与关联关系依赖关系如果A类中某个方法的参数是B类的对象(或某个方法返回的数据类型是B类对象),则称A类依赖于B类。依赖关系的例子Radio类依赖于Battery类依赖关系与关联关系关联关系A类中成员变量是用B类声明的对象,则称A类关联于B类
,或A类组合了B类。关联关系也被称为对象的组合对象组合的例子圆柱体可抽象为属性1:底圆属性2:高度功能:计算体积依赖关系与关联关系对象组合的例子(续)圆柱体可抽象为:属性:底圆、高度功能:计算体积Cylinder类依赖关系与关联关系实例分析根据下面UML类图,说说LineSeg类、Point类和Circle类之间分别是什么关系?依赖关系与关联关系小结如果A类中某个方法的参数是B类声明的对象(或某个方法返回的数据类型是B类对象),则称A类依赖于B类。例如:前面的Radio类依赖于Battery类A类中成员变量是用B类声明的对象,则称A类关联于B类,或A类组合了B类。例如:前面Cylinder类关联于Circle类Java程序就是通过一系列相互依赖(或关联、或继承)的类(对象)的协作来实现特定功能类与类的继承关系将在后面继续介绍单元问题或练习问题一编写程序,实现下面UML类图所示的三个类。1实例成员与类成员实例成员变量在前面所有例子(类)中的成员变量都是实例成员变量实例成员变量必须通过对象来访问,不同对象(实例)的成员变量相互独立实例成员与类成员类成员变量(静态成员变量)类成员变量的定义类成员变量的特点类成员变量,既可通过类名访问(建议方式),也可通过对象访问该类的所有对象共享类成员变量实例成员与类成员类成员变量与实例成员变量比较实例成员与类成员类成员方法与实例成员方法类方法只能访问类变量和类方法,不可访问实例变量和实例方法实例方法仅可访问实例变量和实例方法,也可以访问类变量与类方法理解变量在内存中的生存周期实例成员与类成员类方法与实例方法的调用既可通过类名访问类方法(建议方式)也可通过对象(实例)访问类方法实例成员与类成员类方法与实例方法对类成员与实例成员的可访问性静态变量在内存中一直存在,而实例变量必须创建对象后才在内存中存在。静态方法可以通过类名直接访问(此时,可能还没有创建具体的对象),而实例变量在创建对象后才能访问。因此,静态方法无法访问实例变量。实例方法可能访问实例变量,因此,静态方法也不能访问实例方法。思考:为什么程序的入口main方法要设计成静态方法?静态(类)方法实例方法静态(类)变量(√)可访问(√)可访问实例变量(x)不可访问(√)可访问静态(类)方法(√)可访问(√)可访问实例方法(x)不可访问(√)可访问this关键字问题解决方法this关键字只能出现在实例方法中,不能出现在类方法中单元问题或练习练习一阅读下面的程序,写出程序运行结果。1包问题在不同的源文件中可能出现名字相同的类,如何区分他们?一个项目由几个模块组成,每个模块又有若干子模块组成,每个子模块又有若干个类组成,如何表达这样的关系以实现良好的可维护性?Java的解决方法可以将这些类放到不同的包中,在使用时加上包名来区分他们。为类指定包名包有包名的类的存储目录假设当前应用程序目录为D:\example4_9则Circle.java文件必须存放在D:\example4_9\aaa\bbb可以看到,包的功能与文件夹类似定包名有包名的类的编译编译有包名的类时,需要在类名前面加上包名所对应的目录。包使用在包中的类方法一(使用包名+类名)方法二(使用import语句)包在Eclipse中使用包创建类时指定包名在其它类中访问有包名的类包使用包来组织项目中的类类A在哪个包?类C在哪个包?类E在哪个包?….放在不同包里的类
在使用时有什么区别?单元问题或练习练习一用记事本编辑、保存如下图所示的Circle类,并用命令行编译此类,最后在默认包的主类中使用该类。1访问权限成员的访问权限是指某个类(对象)的变量(或方法)对其它类是否可见(可访问)公共变量和公共方法用关键字public修饰的成员变量(方法)公共变量(方法)对其它类是可见的(可访问)受保护的成员变量和方法用关键字protected修饰的成员变量(方法)受保护的变量(方法)对同包中的其它类可见,对不同包中的类不可见私有变量和私有方法用关键字private修饰的成员变量(方法)私有变量(方法)对其它类是不可见的(不可访问)。访问权限成员的访问权限不用关键字private、public、protected修饰的成员变量(方法)友好变量(方法)对同包中的其它类可见,对不同包中的类不可见成员访问权限举例对同一包中的类的可见性对不同包中的类的可见性访问权限成员的访问权限总结(由高到低排列)上述四种访问权限使得设计者可以根据需要为成员设置不同的访问权限,从而实现封装,使模块内部紧密耦合,模块之间松散耦合。保护成员与友好成员在区别在第5章介绍类别关键字同一包中的类不同包中的类公共变量和方法public(√)可见(√)可见保护变量和方法protected(√)可见(x)不可见友好变量和方法(省略)(√)可见(x)不可见私有变量和方法private(x)不可见(x)不可见访问权限类的访问权限公共类用关键字public修饰的类公共类对其它所有类(包内类和包外类)都可见友好类没有用关键字public修饰的类友好类对同一个包中的类可见,对不同包中的类不可见类的可见性总结类别关键字同一包中的类不同包中的类公共类public(√)可见(√)可见友好类(省略)(√)可见(x)不可见单元问题或练习问题一类的访问权限有哪几种?分别用什么关键字声明?它们具有怎样的可访问性?12问题二成员的访问权限有哪几种?分别用什么关键字声明?它们具有怎样的可访问性?数组的声明与使用问题如何输入并保存10个学生的成绩?定义10个变量吗?数组数组是具有相同数据类型变量组成的集合,用一个名字(数组名)表示。其中的变量称为元素,通过数组名[下标]来访问。例如:a[1]数组的声明与创建格式:类型说明符数组名[]=new类型说明符[元素个数]举例:inta[]=newint[10];也可写成:int[]a=newint[10];
数组的声明与使用使用数组举例:输入10个学生的成绩并保存到数组a中注意:访问元素时,下标不能超出范围数组的声明与使用其它声明与创建数组的方式方式一类型说明符数组名[];数组名
=new类型说明符[元素个数];例如:inta[];a=newint[10];方式二类型说明符数组名[]={初始值列表};例如:inta[]={78,54,66,98,76,87,90,73,68,83};数组的length属性数组的声明与使用阅读下面的程序,写出运行结果数组的声明与使用数组的内存模型数组由引用和实体两部分组成单元问题或练习练习一写出下面程序的运行结果。12练习二编写程序,输出费波纳切数列(1,1,2,3,5,8,13,21,34…)的前20项。数组相关的简单算法元素查找算法思想:对数组进行遍历,即逐个对数组中的元素进行检查,若找到,则退出循环数组相关的简单算法找最大(小)值数组相关的简单算法元素逆序思考:当数组有n个元素时,应该如何修改程序?数组相关的简单算法数据删除与插入先确定需要删除的元素,后面元素前移先确定插入位置,当前及后面元素后移单元问题或练习练习一编写程序,输入10个整数保存到数组a中,在此过程中数组元素始终按从小到大顺序排列(即插入排序)12练习二编写程序,为数组a随机生成10个[10,99]之间的整数,然而求这10个元素的平均值,并输出数组a中大于平均值的数。数组排序选择排序基本思想:首先让第0个元素分别与第1至第5个元素进行比较,若发现第i个元素比第0个元素大,就让第0个元素与第i个元素进行交换。完成这一趟(5次)比较后,第0个元素就成为最大的数。接下来再让第1个元素分别与第2至第5个元素进行比较……一共要几趟?第0趟:第0与第1~5比较第1趟:第1与第2~5比较第2趟:第2与第3~5比较……第i趟:第?与第?~?比较数组排序选择排序算法改进考虑数组具有如下元素的情况(要求降序排序),上述算法是有可以改进?43,56,78,92,42,95改进思想:先确定(剩余元素中)最大的元素,最后再进行位置交换数组排序冒泡排序基本思想:从前往后相邻元素两两比较,若发现前面的大于后面的,就交换位置(升序)。完成第一趟比较后,最后一个元素就是最大值。再进行第二趟比较……一共需要几趟比较?第0趟:第k和第k+1比较,k:0~4第1趟:第k和第k+1比较,k:0~3第2趟:第k和第k+1比较,k:0~2……第i趟:第k和第k+1比较,k:?~?数组排序选择排序算法改进考虑数组具有如下元素的情况(要求升序排序),上述算法是有可以改进?43,56,78,92,96,99改进思想:若在一趟两两比较过程中,没有元素需要交换,则可提前结束数组排序插入排序基本思想:从第2个数据开始按如下步骤操作确定插入位置插入位置及后面元素后移把数据存入插入位置元素单元问题或练习练习一编写程序,实现前面介绍的选择排序改进思想。12练习二编写程序,实现前面介绍的冒泡排序改进思想。二维数组的声明与使用二维数组的声明与创建格式:类型说明符数组名[][]=new类型说明符[正整数1][正整数2]举例:int
b[][]=newint[5][5];二维数组元素的表示数组名[下标1][下标2];例如:b[1][2],b[4][0];二维数组元素的遍历二维数组的声明与使用阅读程序,理解二维数组二维数组的声明与使用二维数组应用举例对用二维数组表示的矩阵进行转置分析:第?行至第?行有元素需要与对应位置交换?第i行中,第0列至第?列需要与对应位置交换?二维数组的声明与使用二维数组应用举例利用数组生成杨辉三角的数据分析:以5层为例,第?行至第?行有元素需要计算?第i行中,第0列至第?列需要计算?n层杨辉三角需要怎么生成?单元问题或练习练习一编写程序,利用二维数组生成扫雷游戏的雷场数据,效果如下图所示。1子类与父类问题(People类和Student类)。上面的设计存在二个问题:一、People类和Student类有部分代码重复。二、没有体现出Student也是People的概念逻辑。为了解决以上问题引入了继承的机制,产生了子类和父类。子类与父类继承是一种由已有的类创建新类的机制。利用继承,可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类。被继承的类称为父类(超类),由继承而得到的新类称为子类。子类继承了父类的状态和行为,并根据需要增加它自己的新的状态和行为。私有变量和私有方法。子类与父类Java不支持多重继承(子类只能有一个父类)。利用继承,可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类。子类与父类子类的定义格式。使用关键字extends来定义一个类的子类,格式如下:
class
子类名
extends
父类名{…
}
例如,若People是已定义好的类,则定义一个它的子类Student:classStudentextendsPeople
{…}子类与父类子类的定义格式。使用关键字extends来定义一个类的子类,格式如下:
class
子类名
extends
父类名{…
}
例如,若People是已定义好的类,则定义一个它的子类Student:classStudentextendsPeople
{…}子类与父类子类与父类子类与父类如果一个类的声明中没有使用extends关键字,则这个类被系统默认是Object类的子类,Object是java.lang包中的类。单元问题或练习问题一父类和子类是大类和小类的关系吗?12问题二举几个日常生活中父类与子类的例子?3问题二继承有什么优点?子类的继承性所谓子类继承父类的成员变量作为自己的一个成员变量,就好象它们是在子类中直接声明一样,可以被子类中自己定义的任何实例方法操作。所谓子类继承父类的方法作为子类中的一个方法,就好象它们是在子类中直接定义了一样,可以被子类中自己定义的任何实例方法调用。子类不仅可以从父类继承成员变量和方法,而且根据需要还可以声明它自己的新成员变量、定义新的方法。子类的继承性子类和父类在同一包中的继承性。子类和父类在同一个包时,子类继承父类中的除private访问权限以外的成员变量作为子类的成员变量、继承父类中除private访问权限以外的其他方法作为子类的方法。子类不仅可以从父类继承成员变量和方法,而且根据需要还可以声明它自己的新成员变量、定义新的方法。子类的继承性子类和父类不在同一包中的继承性。如果子类和父类不在同一个包中,那么,子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。子类的继承性继承关系(Generalization)的UML图。如果一个类是另一个类的子类,
那么UML通过使用一个实线连接两个类的UML图来表示二者之间的继承关系,实线的起始端是子类的UML图,终点端是父类的UML图,但终点端使用一个空心的三角形表示实线的结束。单元问题或练习问题一根据如下所示的UML,编写People类和Student类,并创建对象,调用相应的方法。1子类对象的内存模型继承的实例1子类对象的内存模型子类的内存模型子类对象的内存模型继承的实例2子类对象的内存模型子类的内存模型单元问题或练习练习一根据下面的代码,画出Student类对象的内存模型1成员变量的隐藏子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量。在子类中操作这个与父类中同名的成员变量时,子类操作的是子类重新声明的这个成员变量。方法的重写子类通过方法重写(或称为方法覆盖)可以隐藏已继承的实例。重写的语法规则:若子类可以继承父类的某个方法,那么子类就有权利重写这个方法。重写的目的:子类通过方法的重写,可以隐藏继承的方法,那么通过重写方式就可以把父类的状态和行为改变为自身的状态和行为。方法的重写方法的重写方法的重写总结。方法重写是指:子类中定义一个方法,这个方法的类型:与父类的方法的类型一致、或是父类方法的类型的子类型;且这个方法的名字、参数个数、参数的类型和父类的方法完全相同。单元问题或练习问题一根据如下所示的UML,编写People类和Student类,并创建对象,调用相应的方法。1关键字super问题关键字super通过关键字super访问父类成员与方法关键字super使用super调用父类的构造方法当使用语句new来创建子类对象时,会调用子类的构造方法子类的构造方法总是先调用父类的某个构造方法使用super调用父类的构造方法super必须是子类构造方法中的第一条语句关键字super使用super调用父类的构造方法(续)下面这么语句是否能够正常执行?Student
s=new
Student();若没有显式地通过super调用父类的构造方法,则子类的构造方法隐式地调用super()构造方法。单元问题或练习问题一说说语句”Student
s=new
Student();”的执行过程1关键字finalfinal类使用final关键字声明的类称为final类,它不可被继承。final
classA{…}下面的类定义代码是不允许的classBextendsA{…}Java的String类就是final类,这样设计的目的是为了安全。String类是java的核心类,如果允许继承,就可以改变其行为(以后再解释)。关键字finalfinal方法使用final关键字声明的方法称为final方法,它能够被子类继承,但不能被子类重写。class
A{ final
voidmethod1{ … }…}将方法声明为final可以防止父类的行为被子类所改变,避免造成功能混乱或代码不安全。关键字finalfinal变量使用final关键字声明的成员变量称为final变量,它能够被子类继承,但其值不能被改变(相当于其它语言里的常量定义)。单元问题或练习问题一说说final类、final方法与final变量各有什么特点?1上转型对象对象的向上转型将子类对象赋值给父类变量,称为对象的向上转型,该父类变量(对象)称为上转型对象。上转型对象上转型对象的特性上转型对象只能访问定义在父类的成员变量和方法上转型对象不能操作子类新增的变量和方法如果子类重写了父类的某个方法,当子类的上转型对象调用这个方法时,调用的是子类重写的方法。上转型对象上转型对象的特性(以父子厨师为例子说明上面所述上转型对象的特性)父亲厨师会做:炒青菜、炒螺丝、红烧肉儿子厨师会做:炒青菜、炒螺丝、红烧肉(加辣)、鱼香肉丝一个老板一直叫父亲为他做菜(老板的厨师岗位就是父类变量),有一天儿子替父亲去上班(子类对象向上转型),老板知道儿子厨师会做鱼香肉丝吗?老板叫儿子厨师做的红烧肉是不是辣的?反过来,父亲厨师能替儿子厨师去上班吗?上转型对象上转型对象使用举例上转型对象上转型对象使用举例(续)上转型对象上转型对象使用举例(续)单元问题或练习问题一什么叫对象的向上转型?1问题二上转型对象是否可以访问子类新增的方法?2问题三当上转型对象调用被子类重写的方法时,执行的是父类版本方法还是子类版本方法?3多态多态的例子多态多态的例子(续)多态当子类重写了父类的某个方法后,子类的上转型对象调用这个方法时,调用的是子类重写的方法。当把不同的子类对象赋值给父类变量(对象)时,上转型对象调用同一方法时就会呈现不同的行为(多态)多态多态是怎么产生的?继承,子类继承了父类方法的重写,子类重写了从父类继承的方法把不同的子类对象赋值给父类变量(对象的向上转型)多态的意义它的好处就是可以屏蔽不同子类对象之间的差异,写出通用的程序模块,以适应需求的不断变化,提高了程序的可扩展性。多态多态再举例单元问题或练习问题一多态的条件是什么?1问题二多态有什么好处?2依赖关系与关联关系依赖关系如果A类中某个方法的参数是B类的对象(或某个方法返回的数据类型是B类对象),则称A类依赖于B类。依赖关系的例子Radio类依赖于Battery类依赖关系与关联关系关联关系A类中成员变量是用B类声明的对象,则称A类关联于B类
,或A类组合了B类。关联关系也被称为对象的组合对象组合的例子圆柱体可抽象为属性1:底圆属性2:高度功能:计算体积依赖关系与关联关系对象组合的例子(续)圆柱体可抽象为:属性:底圆、高度功能:计算体积Cylinder类依赖关系与关联关系实例分析根据下面UML类图,说说LineSeg类、Point类和Circle类之间分别是什么关系?依赖关系与关联关系小结如果A类中某个方法的参数是B类声明的对象(或某个方法返回的数据类型是B类对象),则称A类依赖于B类。例如:前面的Radio类依赖于Battery类A类中成员变量是用B类声明的对象,则称A类关联于B类,或A类组合了B类。例如:前面Cylinder类关联于Circle类Java程序就是通过一系列相互依赖(或关联、或继承)的类(对象)的协作来实现特定功能类与类的继承关系将在后面继续介绍单元问题或练习问题一编写程序,实现下面UML类图所示的三个类。1抽象类与抽象方法问题前面例子中EspecialCar类实际上是PoliceCar、AmbulanceCar类的抽象,应该避免直接使用EspecialCar类。抽象类与抽象方法的定义抽象类与抽象方法抽象类与抽象方法的有关概念抽象类要有抽象方法,否则没有意义抽象方法只许声明,不许实现不能创建抽象类的对象非抽象子类必须实现抽象类中的抽象方法在非抽象子类中实现这些抽象方法实际上是对父类抽象方法的重写,这样就可以实现多态。抽象类与抽象方法基于抽象类的多态可以把非抽象子类对象赋值给抽象类变量,即对象的向上转型基于抽象类的上转型对象只能调用定义在抽象类中的方法和成员变量调用抽象类变量的方法时,执行的是赋值给它的非抽象子类对象的同名方法抽象类与抽象方法关于抽象类的几个问题抽象类中可以有成员变量,也可以有非抽象方法是不是一定需要抽象类?用普通类同样可以实现抽象类的功能使用抽象类有什么好处?胡言乱语不如不言不语。抽象类只给出方法声明,没有方法实现。可以让设计人员只关注方法功能和接口的定义,而在设计之初把避免把大量精力放在具体实现上。避免创建没有实际功能的对象,从而引发程序异常。单元问题或练习问题一简述抽象类的特点,并说说使用抽象类有什么好处?1问题二把下面的Person类定义为抽象类2面向抽象编程问题是否可以让Pillar类表示其它柱体呢?bottom是否可以定义为一个通用类?面向抽象编程所谓面向抽象编程,是指当设计一个类时,不让该类面向具体类,而是面向抽象类。针对上面的例子,可以先定义一个抽象类Geometry,然后将Pillar类的bottom成员定义为Geometry类型。面向抽象编程面向抽象编程方法(以Pillar为例)在Geometry抽象类中声明getArea抽象方法。如果希望Pillar表示圆柱体,则可以声明继承于Geometry抽象类的Circle类,并实现getArea方法,然后将Circle类对象赋值给Pillar类对象的bottom成员。如果希望Pillar表示长方体,则可以声明继承于Geometry抽象类的Rectangle类,并实现getArea方法,然后将Rectangle类对象赋值给Pillar类对象的bottom成员。上述设计使得Pillar具有良好的扩展性,具有表示多种柱体的能力。面向抽象编程面向抽象编程举例(代码实现演示)面向抽象编程面向抽象编程再举例(问题分析)面向抽象编程面向抽象编程带来的好处提高程序的可维护性当程序功能需要扩展时,核心模块无需修改。即核心模块对修改封闭。提高程序的可扩展性在核心模块不作修改的情况下,可方便地对程序功能进行扩展。即非核心模块具有可扩展性。单元问题或练习练习一实现下面UML类图描述的面向抽象编程例子1接口的声明与使用接口的声明接口使用关键字interface来声明接口中一般只声明公共抽象方法和公共常量(没用final也会隐式声明为final)(public可省略)接口的可访问性接口的使用与抽象类非常类似,需要由其它类实现接口中所有的抽象方法类别关键字可访问性公共接口public所有包中的类友好接口(缺省)同一包中的类接口的声明与使用接口的使用(接口实现)当一个类实现一个接口时,必须实现(重写)该接口的所有方法重写的方法必须是public(即方法的访问权限不能降级)接口的声明与使用接口变量与接口调用实现接口的类的对象可以赋值给接口变量(可理解为对象上转型)接口变量只能访问该接口中定义的方法和常量访问接口变量的方法时,实际执行该接口变量赋值对象的方法。例如:computer.add(10,20)调用的是Student类对象s的方法接口的声明与使用接口变量与接口调用实现接口的类的对象可以赋值给接口变量(可理解为对象上转型)接口变量只能访问该接口中定义的方法和常量访问接口变量的方法时,实际执行该接口变量赋值对象的方法。例如:computer.add(10,20)调用的是Student类对象s的方法接口的声明与使用接口与抽象类的比较相同之处接口和抽象类中都有抽象方法接口和抽象类都不能实例化不同之处接口一般只定义公共抽象方法和公共常量,抽象类还可以有非抽象方法接口的方法必须是公共的,而抽象类中的方法可以是其它访问等级类可以实现多个接口,但子类只能继承于单个父类实现多个接口的举例class
UniversityStudent
impliments
Computable,AdvancedComputable{…}单元问题或练习练习一定义下面UML类图描述的Computable接口和AdvancedComputable接口,并声明PrimaryStudent类和UniversityStudent类分别实现相应的接口。1接口与多态接口变量与接口调用实现接口的类的对象可以赋值给接口变量(类似于上转型对象)接口变量只能访问该接口中定义的常量和方法调用接口变量的方法,实际执行该接口变量赋值对象的方法。例如:computer.add(10,20)调用的是Student类对象s的方法思考:考虑有多个实现同一接口的类的对象赋值给接口变量的情况接口与多态基于接口的多态举例(代码演示)接口与多态基于接口的多态再举例(代码演示)单元问题或练习问题一简要说说通过接口实现多态的基本方法1面向接口编程进一步理解接口用接口定义来定义(约定)一组操作标准(抽象方法)操作标准定义了方法的名称、参数个数、参数类型、返回值操作标准定义了不给出方法的具体实现因此,可以把接口中的抽象方法理解为操作约定符号标准的类当一个类实现了某个接口,则这个类的对象就具有接口所约定的标准操作,它就可以赋值给该接口的变量,进而被该接口变量所调用。不同的类可以实现同一个接口,同一个类可以实现多个不同的接口(现在的USB口不仅可以读取数据,还可以充电)面向接口编程面向接口编程方法(把接口作为对象成员,以MotherBoard为例)面向接口编程第二种面向接口编程(把接口作为方法参数)单元问题或练习练习一实现下面UML类图描述的面向接口编程例子,主程序如下所示1内部类与匿名类内部类概念类除了可以有成员变量和成员方法外,还可以有内部类。内部类是指定义在一个类内部的类。内部类的特点内部类可以直接访问外部类中的成员变量和方法内部类只能由外部类的对象进行创建内部类的应用内部类最主要的应用场景就是在GUI编程(第11章)中以内部类的形式实现事件监听器类。内部类与匿名类内部类举例内部类与匿名类匿名类概念Java允许我们直接使用一个子类的类体创建一个对象,即创建对象时,除了使用父类的构造方法外还有类体,该类体被认为是一个子类省略掉类声明后的类体,因此我们称之为匿名类。匿名类特点匿名类是其它类的子类由于匿名类没有类名,创建匿名类对象时使用其父类的构造方法。由于匿名类没有类名,因此无法声明匿名类变量匿名类最主要的应用场景也是在GUI编程(第11章)中以匿名类的形式创建事件监听器对象。内部类与匿名类匿名类举例内部类与匿名类与接口有关的匿名类Java允许直接用接口名和类体创建一个匿名对象。此类体被认为是实现了该接口的类(去掉了类声明后的类体),称为匿名类。与接口有关的匿名类举例单元问题或练习练习一根据下图所示的接口定义,创建一个实现了该接口的匿名类对象。1String类的基本使用字符串字符串数据广泛存在,字符串处理十分重要Java提供String类处理字符串,String类是final类构造字符串对象字符串常量对象"Helloworld"、"Java程序设计"创建字符串对象的常用方法String类的基本使用字符串对象的引用和实体问题:如何比较两个字符串对象的实体(即内容)是否相等呢?String类的基本使用String类的常用方法publicbooleanequals(Strings)方法(判断字串符是否相等)publicintlength()方法(获取字符串长度)publicStringsubString(intstart,intend)方法(获取子串方法1)问题思考:如何从身份证号中提取出生年月日?例如何取左(右)边k个字符?
例如:01234567如何判断一个字符串是否是回文?
例如:012343211234321String类的基本使用String类的常用方法(续)publicintindexOf(Strings)方法(找子串位置方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025四川爱创科技有限公司变频与控制事业部招聘设备工程师等岗位2人笔试历年典型考点题库附带答案详解
- 2025四川成都兴城投资集团有限公司成都蓉城康养集团有限公司招聘项目投拓岗等岗位2人笔试历年典型考点题库附带答案详解
- 2025四川井研县国有企业招聘专业技术人员8人笔试历年典型考点题库附带答案详解
- 2025四川九州电子科技股份有限公司招聘财务管理等岗位31人笔试历年典型考点题库附带答案详解
- 2025北京容城容创投资有限公司招聘工作人员3人笔试历年常考点试题专练附带答案详解
- 2025内蒙古鄂尔多斯电力冶金集团股份有限公司招聘111人笔试历年典型考点题库附带答案详解
- 2025内蒙古能源集团智慧运维公司运维人员校园招聘55人笔试历年典型考点题库附带答案详解
- 2025内蒙古呼伦贝尔经济技术开发区招商投资有限责任公司招聘及笔试笔试历年难易错考点试卷带答案解析
- 2025云南红河州蒙自市城市建设投资有限责任公司及所属子公司拟招聘合同制人员4人笔试历年典型考点题库附带答案详解
- 2025云南康旅教育投资管理有限公司招聘3人笔试历年难易错考点试卷带答案解析
- 贵州出版集团必背资料汇 总招聘笔试考试题库
- 隧道通风计算公式
- 2025山西潞安化工集团招聘专科及以上学历生产操作岗位人员笔试历年备考题库附带答案详解
- 2026届广东普通高中学业水平选择考模拟测试(一)物理试题
- 家畜繁殖员职业能力考核复习题库(附答案)
- 企业安全生产管理体系完善
- 2026年池州市保险行业协会工作人员招聘备考题库及答案详解(夺冠系列)
- 2026年西安交通大学行政岗位招聘考试笔试试题(含答案)
- T∕WSJD 87-2025 现制现售饮用水卫生监督工作指南
- 安徽省2026届数学高一下期末考试试题含解析
- 患牙的拔除与保留
评论
0/150
提交评论