




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 对象数组与字符串4.1对象面向对象的程序设计就是生成多个对象,这些对象之间通过消息传递来进行交互,最终完成复杂任务.一个对象的生命周期包括三个阶段:对象的创建对象的使用和对象的的清除.4.1.1 对象的创建Java语言中除8种基本数据类型以外的数据类型都称为引用类型,如接口字符串数组都属引用类型. 引用类型数据以对象的形式存在, 引用类型变量的值是某个对象的一个引用(即某个对象所在的内存地址),而不是对象本身,声明引用类型变量时,系统只为该变量分配引用空间,并没有创建一个具体对象.【例 4-1】Testobject.java -对象的创建class Point /定义一个坐标点Point类 int x,y;Point() /无参数的构造函数初始化类的成员变量 x=10; y=16; Point(int a,int b) /带参数的构造函数通过传进的参数初始化类的成员变量 x=a; y=b; public class Testobject public static void main(String args) Point p1,p2; /声明引用类型变量p1,p2即代表对象 (类名Point 对象名p1,p2 ) 系统只为该变量分配引用空间,并没有创建一个具体对象. p1=new Point(); /用new为对象分配内存,在 new后调用类的构造函数创建对象。 p2=new Point(111,222); / 调用构造函数时初始化了这个新对象 System.out.println(点p1的x坐标是:+p1.x); /10 System.out.println(点p1的y坐标是:+p1.y); /16 System.out.println(点p2的x坐标是:+p2.x); /111 System.out.println(点p2的y坐标是:+p2.y); /222 总结步骤1: 声明一个变量来引用对象(1) 基本数据类型datatype(数据类型) name (变量名)(2) 引用数据类型变量可用类名接口名作为变量的数据类型,如:Point p1,p2; /系统只为该变量分配引用空间,并没有创建一个具体对象,它是空null引用直到被赋值nullnull内存模型 : p1 p2 步骤2: 实例化对象: 系统做两件事(1)为Point类的两个成员变量x, y分配内存,并返回一个引用(地址号- 也称对象句柄)给引用变量p1,建立了p1与成员变量x, y的对应关系和操作支配关系,所以引用类型变量的值是这个新对象的句柄(地址号),而不是对象本身。(2)调用类的构造函数初始化类的成员变量。 p1=new Point(); /用new为对象分配内存,在 new后调用类的构造函数创建对象。步骤12可合为一步即: Point p1=new Point()步骤3: 通过构造函数初始化新对象class Point /定义一个坐标点Point类 int x,y;Point() /无参数的构造函数初始化类的成员变量 x=0; y=0; Point(int a,int b) /带参数的构造函数通过调用构造函数并传进参数初始化类的成员变量 x=a; y=b; 由此可以看出每个类可以包函多个构造函数.它们名相同,但参数类型或参数个数不同.java可根据参数类型或参数个数不同来区分构造函数.如果一个类没有显示声明构造函数, java会自动调用一个无参数的默认构造函数,不完成任何事情.这样所有类至少有一个构造函数.一个类可以通过new运算符创建多个不同的引用,也可以通过不同的构造函数来构造不同的新对象,如:Point p1=new Point() (x=0 , y=0)Point p2=new Point(100,100)内存模型:0xA60000xA65100100p1p2【例 4-2】MyDate.javapublic class MyDate private int day = 20; /显示初始化类的成员变量 private int month = 9;private int year = 1966; public MyDate(int d, int m, int y) /构造函数year = y;month = m;day = d; public void display() /显示打印出年月日的方法System.out.println(day + / + month + / + year); public static void main(String args) MyDate m; /声明引用类型变量mm = new MyDate(13,6,1968); /用new调用构造函数创建对象实例并传递实参在构造函数中改变成员变量初始化值m.display(); /调用display()方法输出年月日 创建对象 MyDate m = new MyDate(13,6,1968);内存模型:0x65463bdaymonthyear2091996m对象内存地址成员变量显示初始化类的成员变量1361968M被构造函数赋值后表4-1 变量默认初始化值成员变量类型取值byte0short0int0long0Lcharu0000 (十六进制相当于十进制0)float0.0Fdouble0.0Dbooleanfalse所有引用类型null4.1.2 对象的使用对象的使用包括对象的成员变量和方法的调用,通过”.”运算符可以实现对变量的访问和方法的调用.相同类型的对象将有相同实例变量的副本.每一个Point对象就有xy变量.当通过对象引用来访问实例变量时,就引用了特定对象的变量.格式为:引用对象. 成员变量引用对象. 方法名引用对象时,可使用引用变量名或表达式来返回一个对象引用.这样可从new返回的数值来访问一个新的对象变量: int x = new point().x; /创建新的point对象并得到它的x坐标,相当于对象访问变量.(1) 访问对象的属性 实例说明【例 4-3】 ObjectOperating 对象创建和使用class BirthDate private int day; /私有成员变量只能用引用对象变量通过它的类方法访问它,不允许引用对象直接访问它private int month;public int year; /公有成员变量可用引用对象直接访问它public void setDay(int d) /设置日期(公有方法可以被其它任何类访问)day = d; /(私有成员变量只能用对象的类方法访问它)public void setMonth(int m) /设置月份month = m; /(私有成员变量只能用对象的类方法访问它)public void setYear(int y) /设置年份year = y; public int getDay() /以返回方式取得日期return day; public int getMonth() /以返回方式取得月份return month; public int getYear() /以返回方式取得年份return year;public class ObjectOperating public static void main(String args)BirthDate b = new BirthDate(); /创建对象实例并用引用对象变量名b代表对象引用b.setDay(1); /引用对象调用它的方法设置成员变量day= 1b.setMonth(10); /等价于new BirthDate().setMonth(10); new BirthDate()返回一个对象引用, 引用了BirthDate对象b.getMonth(); /获得月份b.setYear(2003); /b.day = 2; /?不合法,无权访问该私有属性/ b.year = 2004; ?System.out.println(b.getDay() + - + b.getMonth() + - + b.getYear(); /输出三个获取日期的方法的值上机练习:编写求圆面积的程序4.1.3 对象的清除 Java运行时系统通过垃圾收集机制周期释放无用对象,完成对象的清除工作, 对象不再引用或变量超出作用域时就会被清除,也可设置对象引用变量为NULL来清除对象引用.程序调用System.gc()方法时垃圾收集线程与系统同步运行,否则空闲时异步执行.4.2 数组数组简单说是由一组数值按照顺序排列在一起,放在同一变量中,每个数组元素可以用索引号(Index)存取数据,数组是多个相同类型数据的组合,实现对数据的管理;数组属引用类型, 数组型数据是对象, 数组中的每个元素相当于该对象的成员变量; 数组中的元素可以是任何数据类型,包括基本类型和引用类型.每个数组中的元素可通过数组名和数组下标来唯一确定. 数组有一维数组和多维数组.4.2.1 一维数组(1) 一维数组的声明(先声明,后创建)type var; or type var ;(数据类型)type可以是基本数据类型和引用数据类型; (数组名)var是java合法标识符; 指明该变量是一个数组类型变量,可放在数组名前或后. 如:int a; int a; double b; Mydate c; 声明数组时不为数组元素分配内存,因此不能指定其长度(元素个数), 如: int a5; /非法(2) 一维数组的创建 (创建一维数组时给出数组长度并分配内存空间) = new ; arryName = new typesize;page = nw int3声明数组和创建数组合为一步: = new ;如: int page = new int3;(3) 一维数组引用用new为之分配空间后,才可引用数组中的每个元素.数组元素引用方式: arrayNameindex- 数组名数组元素下标,为整型常量或整型表达式: 如: a3, bi, c6*i, 数组元素下标从0开始,长度为n的数组合法下标值为0n-1, 数组用它的属性length指明它的长度也就是数组元素的个数.(4) 一维数组初始化:(1) 动态初始化: 分3个步骤分开进行:int a ; - 数组定义 a = new int 3; - 为数组元素分配空间 a 0 = 3; - 赋值操作(2) 静态初始化: 定义数组同时为数组元素分配空间并赋值. int a = 3,9,8; 相当于 a 0 = 3; a 1 = 9; a 2 = 8; /此时不需new运算符boolean answers = true,false,true,true,false【例 4-4】ArrayString.java -一维数组初始化public class ArrayStringpublic static void main(String args) String anArray = String One, String Two, String Three ; /静态初始化创建字符串数组 for (int i = 0; i anArray.length; i+) System.out.println(anArray+i+=+ anArrayi); /打引输出数组元素 System.out.println(这个字符串数组长度为+ anArray.length); (3) 数组元素的默认初始化: 数组属引用数据类型, 它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方法被隐式初始化.【例 4-5】 ArrayDefault.java -数组元素的默认初始化public class ArrayDefault public static void main(String argv) int a= new int5; System.out.println(a3的默认初始化值是:+a3); /默认初始化值为0 4.2.2 多维数组多维数组通过数组的数组来实现, 数组空间不是连续分配的,所以不要求每一维的大小相同,用来存储行列或矩阵形式的数据.二维数组是一个特殊的一维数组,即是由一维数组构成的一维数组,其中每个元素又是一个一维数组.【例 4-7】Test_Array2.java 说明二维数组由一维数组构成的一维数组public class Test_Array2 public static void main(String args)int a; /声明一个二维数组aa=new int2; /通过指定行创建二维数组对象a产生a0和a1两个引用,列由一维数组指定a0=new int3; /给第1行引用a0产生对象,即第1行有3列(3个元素是一维数组)a1=new int6; /给第2行引用a1产生对象,即第2行有6列(6个元素是一维数组)System.out.println(a 的长度=+a.length);System.out.println(a0 的长度=+a0.length);System.out.println(a1 的长度=+a1.length);运行结果:看出二维数组由一维数组构成的一维数组。a 的长度=2 /代表这个二维数组有2行a0 的长度=3 /第0行有3列元素a1 的长度=6 /第1行有6列元素本例用a=new int2语句产生了两个一维数组类型的引用,既a0和a1,然后a0和a1通过语句:a0=new int3; /给引用a0产生对象a1=new int6; /给引用a1产生对象分别产生了长度为3和6的两个一维数组,因此本例二维数组a不再是一个矩型,可以是不规则的。(1) 二维数组声明datatype arrayName ; datatype arrayName静态直接赋值不需用new分配内存空间如: int a = 1,2, 3,4,0,9,5,6,7; /静态初始化3行4列的二维数组第1行为2个数组元素, 第2行为4个数组元素, 第3行为3个数组元素,不需用new分配内存空间,相当于: a 0 0 =1 , a 0 1 =2, a 1 0 =3, a 1 1 =4, a 1 2 =0, a 1 3 =9, a 2 0 =5, a 2 1 =6, a 2 2 =7,二维数组创建(分配内存空间可直接为每一维分配内存空间,也可以从最高维开始(指定行数),分别为每一维分配内存空间) 如: 直接为每一维分配内存空间以行列形式:(2) arrayName = new datatype size1 size2 ; / size1 长度1a = new int 3 2; /该数组为3行2列合为一步: 如:int a = new int 3 2; /创建数组为3行2列的二维数组二维数组3行2列内部结构表列索引0列索引1行索引0a 0 0 a 0 1 行索引1a 1 0 a 1 1行索引2a 2 0 a 2 1 从最高维开始,分别为每一维分配内存空间arrayName = new datatype size ; /指定行数,不指定列数size长度arrayName 0 = new datatype size1; /列数由长度1指定arrayName 1 = new datatype size2;arrayName size -1 = new datatype sizen; /长度n如创建3行5列的int不规则二维数组int a =new int3 ; /指定行数3,不指定列数a 0 = new int3; /第1行为3列的二维数组, 长度3a 1 = 0,6,9,8; /第2行为4个数组元素(相当于4列长度元素)a 2 = new int5; /第3行为5列的二维数组, 长度5(2) 二维数组的引用arrayName index1 index2每一维数组的下标从0开始(3) 二维数组初始化 静态初始化int a = 1,2, 3,4,0,9,5,6,7; /静态初始化二维数组第1行为2个数组元素, 第2行为4个数组元素, 第3行为3个数组元素 动态初始化int a =new int33 ; /该数组为3行3列 a 0 = 0,0,1 ; /相当于a 00 =0, a 01 =0, a 02 =1a 1 = 0,1,0 ; /相当于a 10 =0, a 11 =1, a 12 =0a 2 = 0,0,1 ; /相当于a 20 =0, a 21 =0, a 22 =1【例 4-8】ArrayApplication.java - 二维数组应用public class ArrayApplicationpublic static void main (String args)int i; /i代表计次变量,也代表下标索引和行变量float average, total=0;/静态初始化二维数组第1行为2个数组元素, 第2行为4个数组元素, 第3行为3个数组元素int a = 1,2,3,4,0,9,5,6,7; /静态创建二维交错数组afor(i=0;ia.length;i+) / 二重for循环i代表行j代表列 for(int j=0;jai.length;j+) System.out.println(a+i+j+=+aij); a 0 = 1,2 ; /相当于a 00 =1, a 01 =2a 1 = 3,4,0,9 ; /相当于a 10 =3, a 11 =4, a 12 =0 , a 13 =9a 2 = 5,6,7 ; /相当于a 20 =5, a 21 =6, a 22 =7【例 4-9】ArrayOfArrays.java - 二维数组应用(数组为3行4列的矩阵排列)public class ArrayOfArrayspublic static void main(String args) int a = new int3; /双重循环创建二维数组创建不指定列的3行二维数组afor (int i = 0; i a.length; i+) / for语句双重循环(输出i(3)行,数组长度为3)ai = new inti+2; /创建一维数组为第i(3)行分配列元素,第1行元素为a0=new int2,a1=new int3,a2=new int4for (int j = 0; j ai.length; j+) (输出j列)aij = i + j; /使用i + j对二维数组赋值(赋值)a 00 =0+0=0,a 01 =0+1=1/打印for (int i = 0; i a.length; i+) /双重循环输出数组值(外程循环i代表行,循环3次(3行)for (int j = 0; j ai.length; j+) /内层循环j代表列,长度为每行的一维数组长度System.out.print(a+i+j+=+aij + ); /输出二维数组的值(取)System.out.println(); /换行 第1行 2列a0=new int2; a 00 ,a 01 ;a 00 =0+0=0,a 01 =0+1=1第2行 3列a1=new int3; a 10 ,a 11 ,a 12 ;a 10 =1+0=1,a 11 =1+1=2,a 12 =1+2=3第3行 4列a2=new int4; a 20 ,a 21 ,a 22 ,a 23 ;a 20 =2+0=2,a 21 =3,a 22 =4,a 23 =54.3 字符串Java利用java.lang包中的String类和StringBuffer类来储存创建操作字符串,因此字符串变量是引用类型变量,是一个对象. String类用于处理由多个字符组成的不可变数据. StringBuffer类用于存储操作由多个字符组成的可变数据.4.3.1创建字符串对象(1) String类 - String类对象的内容是不可以修该的字符串,因为该类没有capacity方法,缓冲区分配的容量.创建String类对象用new关键字和构造函数. 默认时构造函数public String()无参数, 创建时生成一个空字符串,如: String name = new String(); 构造函数public String(String s)有参数, 代表已存在一个字符串对象创建一个新的字符串对象,也可以是双引号括起来的字符串常量,如: String name = new String( Martin); or s= the sky is blue ; String weather = new String(s); 构造函数public String(Char chars )包含字符数组参数chars初始化字符串引用类型变量. chars 表示已定义的字符型数组,如: char a = h,e,l,l,o; String b = new String(a); 相当于b=hello; 构造函数public String(Char chars , int startIndex, endIndex)包含字符数组字符提取的开始下标和结束下标参数, 如: char a = j,o,b,l,u,e,a,r; String sky = new String(a,2,5); 相当于sky=blue;(2) StringBuffer类StringBuffer类对象的内容是可以修该的字符串,其构造函数可以是: StringBuffer(); - 默认时构造函数无参数, 创建一个空的StringBuffer对象,系统为字符串分配16个字符大小的缓冲区. StringBuffer(int length); - 参数length指明分配字符串缓冲区的初始大小,如:StringBuffer s = new StringBuffer(160); /分配字符串缓冲区的初始值为160个字符,同时系统再为字符串分配16个字符大小的缓冲区.4.3.2 访问字符串(1) 获得字符串长度的length()方法,也称存储取函数,返回值为字符串或字符串缓冲区的字符个数, 如:String a = the fat cat has a bag ; int length = a.length(); length = 21 (包括空格字符) capacity方法 - 返回字符串缓冲区分配的容量即空间而不是已使用的空间. 【例 4-10】stringBufferTest.java - 获得字符串长度class stringBufferTest public static void main(String args) StringBuffer sb= new StringBuffer(the fat cat);int len = sb.length(); /获得字符串长度包括空格(即已使用的空间)int sum = sb. capacity (); /获得字符串缓冲区分配的容量System.out. println (length=+len);System.out. println (capacity =+sum); (2) 按指定索引得到字符 用String类StringBuffer类的charAt()方法,第一个字符索引是0, 最后一个字符索引是length-1【例 4-11】charAtTest .java -按指定索引得到字符class charAtTest public static void main(String args) String name = Martin; char c1= name.charAt(3); /tStringBuffer sb= new StringBuffer(the fat cat);int len = sb.length(); /11char c2 = sb.charAt(len-2); /aSystem.out.println(c1=+c1); /tSystem.out.println(c2 =+c2); / a (3) 从字符串或字符串缓冲区获得字符用substring()方法String substring( int start ) 返回索引号start到字符串结尾的子字符串(0开始)String substring( int start , int end) 返回索引号start 于索引号end之间的子字符串.【例 4-12】substringTest .java 截取子字符串class substringTestpublic static void main(String args)String s = the fat cat has a bag;String b = s. substring(8); / cat has a bagString c = s. substring(4,11); / fat catSystem.out.println(s1=+b);System.out.println(s2 =+c); (4) 字符串与其它数据类型间的转换方法 toString()方法 所有类从对象类object继承toString()方法, 该方法将对象转换为字符串. valueOf()方法 String类的一个静态方法来转换不同类型的变量为String. parseInt( String s )方法 Interger类的方法将字符串转换为整型. parseLong( String s )方法 Long类的方法将字符串转换为长整型. 使用类Float和Double提供的valueOf()方法可将字符串转换为对应的数据类型【例 4-13】toStringTest .java - 字符串与其它数据类型间的转换class toStringTestpublic static void main(String args)StringBuffer sb= new StringBuffer(my name is Martin); int len = sb.length();String a = String.valueOf(len); /将整型变量转换为字符串String name = sb. toString ( ); /将字符串对象转换为字符串String s =111; /字符串常量s =111int b = Integer.parseInt(s)*2; /整数对象的方法将字符串常量s转换为整型乘2的整型变量bFloat c = Float.valueOf(s); /将字符串常量s转换为浮点型变量cSystem.out.println(int b =+ String.valueOf(b); /将整型变量b转换为字符串并输出System.out.println(float c =+ String.valueOf(c); /将浮点型变量c转换为字符串并输出System.out.println(length=+a); /输出字符串长度变量aSystem.out.println(whats your name? +name); /输出字符串变量name (5) 字符串比较比较字符串与特定的字符串前缀后缀是否相同, 字符串与字符串是否完全一样比较,常用的String类比较方法如表4-3:public boolean startWith ( String s )比较字符串的前缀与特定的字符是否相同public boolean endWith ( String s )比较字符串的后缀与特定的字符是否相同public boolean equals ( String s )比较字符串与特定的字符串是否完全相同public boolean equalsIgnoreCase ( String s )比较字符串与特定的字符串是否完全相同,忽略大小写public boolean compareTo ( String s )按字典顺序比较字符串大小,如果相同,返回0值,如果字符串比特定字符串s大, 返回正值,否则返回负值.public boolean compareToIgnoreCase ( String s )按字典顺序比较字符串大小, 忽略大小写【例 4-14】compareStringTest .java -字符串比较class compareStringTestpublic static void main(String args)String name=my name is Martin; /创建字符串对象String a = name.substring(11); / MartinString b = name.substring(3,7); / nameboolean front = name.startsWith (my); /比较字符串的前缀与特定的字符my是否相同trueboolean back = name.endsWith (Martin); /比较字符串的后缀与特定的字符Martin是否相同trueboolean ok1 = b. equals (name); /trueboolean ok2 = b. equals (Name); /falseboolean ok3 = a. equalsIgnoreCase (martin); /true,忽略大小写int c1= b .compareTo(came); /11(大)int c2= b .compareTo(same); /-5(小)System.out.println(name +前缀是my?+ +front);System.out.println(name+ 后缀是Martin?+ +back);System.out.println( name与name相同?+ +ok1);System.out.println( name与Name相同?+ + ok2);System.out.println( name与Name忽略大小写时相同?+ +ok3);System.out.println( name与came按照字典序谁大?+ +c1);System.out.println( name与same按照字典序谁大?+ +c2); (6) 字符串编辑方法 public String replace ( char old, char new ) String类的替换方法,用new替换old public Synchronized voids setCharAt ( int index, char ch ) - StringBuffer类中的设置字符方法,在指定的index处用参数列表中的指定字符ch替换原来的字符. public StringBuffer insert ( int offset, String s ) - StringBuffer类中的插入字符方法, 在指定的offset位置处插入指定的新字符串s. public Synchronized StringBuffer append (String s ) - StringBuffer类中的添加字符方法,用来在已有的字符串末尾添加一个字符串s.【例 4-15】editTest1 .java -编辑字符串class editTest1public static void main(String args)String a = he is a student; int len = a.length();String ice=it is ice;ice.replace(i,I); /用I替换字符传ice 中的iStringBuffer str = new StringBuffer(len); /创建一个字符串缓冲区对象大小为lenfor (int i = 0; i = (len-1); i+) / for循环在索引位置取得字符并添加字符到字符串末尾str.append(a.charAt(i); / index从0开始添加字符串he is a student到StringBuffer字符串对象中System.out.println(str.toString(); /将字符串对象转换为字符串并输出he is a studentSystem.out.println(str.insert(8,good ); /在字符串位置8处插入good字符串he is a good studentstr. setCharAt (0, H); /在字符串索引位置0处用H替换指定字符System.out.println(str.toString(); /输出已替换的字符串He is a good studentSystem.out.println(ice); /输出ice字符串System.out.println(ice.replace(i,I); /输出用I替换i的字符串Ice4.4 Java 常用类库Java语句的JDK提供大约60个包. JavaAPI的类被组成8个包java.applet: 包含所有的实现Java.applet的类.java.awt: 包含抽象窗口工具集中的图形,文本,窗口GUI类,如ButtonLabelPanelCanvasContainerColorGraphicsMouseFontImagesEvent等类.java.io: 包含所有的输入输出类, 如FileInputStreamFileOutputStreamRandomAccessFileDataInp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装饰公司中秋放活动方案
- 韩国物流考试题及答案
- 光学加工考试题及答案
- 关于盐酸考试题及答案
- 狗狗培训考试题及答案
- 跟单员考试题目及答案
- 企业财务管理报表自动生成工具
- (正式版)DB15∕T 3397-2024 《西辽河灌区盐碱化耕地地力提升技术规程》
- 古籍数字化保护承诺书6篇范文
- 电焊中级考试题及答案
- 宠物经济下的宠物食品包装创新研究报告:2025年市场潜力分析
- 2025年关于广告设计合同格式范本
- 临床基于MDT平台下的“5A”护理模式在改善脑卒中后顽固性呃逆患者中应用
- 基础电工安全培训课件
- 2025年财会类资产评估师资产评估基础-资产评估基础参考题库含答案解析(5卷)
- 法律顾问合同协议书模板
- 2025年淮南市潘集区公开招聘社区“两委”后备干部10名考试参考试题及答案解析
- 河北省琢名小渔名校联考2025-2026学年高三上学期开学调研检测数学(含答案)
- (2025)防溺水知识竞赛题库含答案(完整版)
- 2025年校招:财务岗试题及答案
- 项目工程审计整改方案(3篇)
评论
0/150
提交评论