已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java的基本符号(token)Java的单词符号有五种:关键字、标识符、常量、分隔符和操作符。Java的字符集 Java 采用一种称为unicode的字符集,该字符集合是一种新的编码标准,与常见的ASCII码的区别在于: unicode使用16位二进制而不是8位来表示一个字符。 unicode字符集中增加了许多非拉丁语字符。标识符 Java标识符必须以字母,数字,美元符号$,下划线_组成,标识符第一个字符不可用数字。Java语言对字母的大小写是敏感的,在语法中严格区分大小写。关键字 关键字是为特定目的而保留的保留字,程序员不要将关键字作为自己的标识符。 Java的关键字有:abstract boolean break byte case catch char class continue do double else extends false find finally float for implements import instanceof int interface long native new null package private public return short static super switch synchronized this throw true try void while常量 常量可分为整型常量,浮点数常量,字符常量,字符串常量和布尔常量。整型常量:可分为int型和long型两种,缺省为int型,long型数值后加L。 整型常量可用10、8和16进制表示。如:123(十进制) 052(八进制) 0x3c(十六进制) 浮点数常量:有单精度和双精度之分,缺省为双精度,单精度在数值后加f。另外,浮点数常量也可用普通计数法和科学计数法来表示。如:1.23f 1.1E-2 字符常量:用 括起来的一个字符。如a,H。使用16位的unicode字符集。Java 语言可使用转义字符“来标记特殊字符。如“n表示换行符。 字符串常量用 包括,如Hello World。 布尔常量只有两个值,true和false。分隔符 分隔符起分隔单词符号的作用。包括分号;、花括号和空白符号。Java的注释 Java的注释有三种形式:单行注释 如:/Comment on one line 多行注释 如:/* Comment on one or more lines */ 文档注释 如:/* Document Comment */Java的数据类型和变量Java的基本数据类型 Java的基本数据类型有8种,见下表: 数据类型 类别 宽度(位) 取值范围 boolean 逻辑型 1 true/false char 文字型 16 byte 整数类型 8 -27 27-1 short 整数类型 16 -215 215-1 int 整数类型 32 -231 231-1 long 整数类型 64 -263 263-1 float 浮点型 32 double 浮点型 64Java的变量 Java的变量在使用前必须声明。如 int radios, color;Java为所有基本数据类型的变量作了预定义(预设置的值)。如 类型名 boolean char byte short int long float double 预置值 false “u0000 (byte)0 (short)0 0 0L 0.0f 0.0数据类型的转换 Java是一种强类型的语言,在赋值和参数传递时,都要求类型的匹配。类型转换有三种情况:自动转换、强制转换和使用类的方法转换。自动转换:往往低精度类型到高精度类型能自动转换。如: byte b1=10, b2=20;int b3=b1+b2; 强制转换:高精度类型到低精度类型必须强制转换。这时数据可能会丢失部分信息。如:char key=(char)(12+55) /变量key被赋值为unicode值为67的字符c 方法转换:如String str = 123; int a = Integer.parseInt(str); 使用Integer类的方法parseInt将String转换为对应的整数。 Java编程的习惯约定为了提高程序的可读性,Sun公司推荐在Java编程时使用以下的习惯约定:类名(classes):有一个或若干个名词组成,开头大写,名词间的区分也用大写,其他小写。如:class AccountBook class ComplexVariable接口(Interfaces):规则同类名。如:Interface Account方法(methods): 由一个或多个动词组成,开头小写,动词间区分用大写,其他小写。如:balanceAccount()变量:小写字母开头,单词间用大写字母分隔 如:currentCustomer常量:所有字母大写,单词间用下划线区分 如:MAXIMUM_SIZEJava的操作符根据操作对象的个数操作符可分为一元、二元或三元操作符。根据操作符的功能,又可分为算术、逻辑、关系等操作符。算术操作符一元: + - + - 二元: + - * / % 值得注意的是 + 和- 操作符,如:int a,x=1,y=5; a = +x;b=y+;此时a的值为2(先加1,后赋值),b的值为5(先赋值,后加1)。二元操作符两侧的操作对象数据类型不先自动进行类型转换,再进行操作。赋值操作符与复合赋值操作符 可将 变量 = 变量 op 表达式 写成 变量 op = 表达式 如:x+=20 与 x=x+20 结果一致,但更简洁。注意:= 与 = = 的不同。位操作符和移位操作符位操作符 &(按位与) |(按位或) (按位异或) 移位操作符 En 右移n位,空位用原最高位的位值补足,相当于E/2 En 右移n位,空位补0关系操作符 关系操作符共六个: (大于) =(大于等于) (小于)=(小于等于) !=(不等于) = =(相等)关系操作符的结果为boolean型数据(true或false)。注:= = 操作符只有在比较双方均完全一致时,其值为true,如比较的是两个对象,即使两个对象的内容相同,结果也为false,只有这两个对象为同一对象时才为true。逻辑操作符 逻辑操作符的操作对象和结果均为boolean型,共六个:!(逻辑非) & (逻辑与) |(逻辑或)(逻辑并或) & (逻辑与) | (逻辑或)按位与&也可作为逻辑与使用,但未作优化,而&操作符是经过优化的。对|操作符也类似。其他操作符条件操作符 E1?E2:E3 表达式E1若成立,执行表达式E2,否则执行E3。 逗号操作符 ,可用于分隔语句。 如 int x,y; for (x=0,y=0;x10;x+) .;操作符的优先级和结合规则 优先级: 一元 算术 移位 关系 按位 逻辑 三元 (复合)赋值 逗号结合规则: 除一元、三元和赋值操作符是自右至左结合外,其他均自左至右结合。语句的分类Java语句按是否改变运行的状态可分为执行语句(如表达式语句)和非执行语句(如声明语句)。任何语句的末尾都以“;”结束。执行语句按其组成可分三类:空语句 只有一个语句结束符“;” ,无任何内容。 基本语句(单语句) 独立的、完整的不能再分割为更小的可执行单元。 复合语句(块语句) 包含在 内的一条或若干条语句。 Java的基本语句的结构可分为4类:(1)顺序结构语句 (2)分支语句 (3)循环语句 (4)例外处理语句 后三种语句又称为流控制语句,我们将主要介绍分支语句和循环语句,而例外处理语句包括try、catch、finally以及throw语句。这些语句是Java所特有的。我们将在后面作专门的介绍。分支语句分支语句包括if-else, break, switch, return等语句。分支语句提供了一种控制机制,使得程序可以跳过一些语句,转去执行特定的语句。条件语句 if-else.if-else语句根据判定条件的真假来执行两种操作中的一种,其格式为: if (boolean-expression) statement1; else statement2;其中,要注意的有:布尔表达式boolean-expression是任意一个返回布尔型数据的表达式(这比C、C+的限制要严格)。 每个单一的语句后都必须有分号。 语句statement1, statement2可以是复合语句,这时要用花括号。外面不加分号。 else子句是任选的。 若布尔表达式的值为true,则程序执行statement1,否则执行statement2。 if-else语句的一种特殊形式为: if (expression1) statement1 else if (expression2) statement2 else if (expressionN) statementN else子句不能单独作为语句使用,它必须和if配对使用。else总是与离它最近的if配对。可以通过使用花括号来改变配对关系。 例3.1: 比较两个数的大小,并按从小到大的次序输出。public class CompareTwopublic static void main (String args)double d1=23.4;double d2=35.1;if (d2=d1)System.out.println(d2+=+d1);elseSystem.out.println(d1+=+d2);例3.2:判断某一年是否为闰年。闰年的条件是符合下面二者之一: 能被4整除,但不能被100整除; 能被400整除。public class LeapYearpublic static void main (String args)int year=1989; /method1if (year%4=0 & year%100!=0) | (year%400=0)System.out.println(year+is a leap year.);elseSystem.out.println(year+is not a leap year.);year=2000; /method2boolean leap;if (year%4 != 0)leap=false;else if (year%100 != 0)leap=true;else if (year%400 != 0)leap=false;elseleap=true;if(leap=true)System.out.println(year+ is a leap year.);elseSystem.out.println(year+is not a leap year.);该例中,方法1用一个逻辑表达式包含了所有的闰年条件,方法2使用了if-else语句的特殊形式。多分支语句switchswitch语句是一种多分支选择语句,它可根据switch中表达式的值,来执行多个操作中的一个,它的一般格式如下:switch (expression) case value1: statement1; break; case value2: statement2; break; case valueN: statemendN; break; default: defaultStatement;表达式expression可以返回任一简单类型的值(如整型、字符型),多分支语句把表达式返回的值与每个case子句中的值(一个常量)相比。如果匹配成功,则执行该case子句后的语句序列。 default子句是任选的。当表达式的值与任一case子句中的值都不匹配时,程序执行default后面的语句。如果表达式的值与任一case子句中的值都不匹配且没有default子句,则程序不做任何操作,直接跳出switch语句。 break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。 switch语句的功能可以用if-else来实现,但在某些情况下,使用switch语句更简炼,且程序的执行效率提高。例3.3 根据考试成绩的等级打印出百分制分数段。 public class GradeLevel public static void main(String args)System.out.println(“nOutPut is:);char grade=C; /normal useswitch (grade)case A: System.out.println(grade+is 85100);break;case B: System.out.println(grade+is 7084);break;case C: System.out.println(grade+is 6069);break;case D: System.out.println(grade+is 60);break;default: System.out.println(inputerror);break语句在switch语中,break语句用来终止switch语句的执行。使程序在switch语句后的第一个语句开始执行。 在Java中,可以为每个代码块加一个括号。一个代码块通常是用花括号括起来的一段代码。加标号的格式如下: BlockLabel: codeBlock break语句的第二种使用情况就是跳出它所指定的块,并从紧跟该块的第一条语句处执行。其格式为: break BlockLabel; 例如: a: /标记代码块ab: /标记代码块bc: /标记代码块cbreak a;/will not be executed /will not be executed /will not be executed /execute from here与C、C+不同, Java中没有goto语句来实现任意的跳转, 因为goto语句破坏程序的可读性, 而且影响编译的优化。Java用break来实现goto语句所特有的一些功能。返回语句returnreturn语句用于从当前执行的方法中退出, 并返回到调用该方法的语句处继续程序的执行。返回语句有两种格式:return expression 返回一个值给调用该方法的语句, 返回值的数据类型必须与方法声明中的返回值类型一致。可以使用强制类型转换来使类型一致。 return 当方法说明中用void声明返回类型为空时, 可以使用这种格式, 它不返回任何值。不带参数的return语句有时可省略。return语句通常用在一个方法体的最后。循环语句 循环语句包括 while, do-while, for, continue 等语句。循环语句的作用是反复执行一段代码,直到满足循环终止条件为止,一个循环一般应包括四部分内容: 初始化部分(initialization): 用来设置循环的一些初始条件,计数器清零等。循环体部分(body): 这是反复循环的一段代码,可以是单一的一条语句,也可以是复合语句。迭代部分(iteration): 这是在当前循环结束,下一次循环开始前执行的语句,常常用来使计数器加1或减1。终止部分(termination): 通常是一个布尔表达式,每一次循环要对该表达式求值,以验证是否满足循环终止条件。 下面分别介绍Java中的while语句,do-while语句和for语句。while语句 while语句的一般格式为:初始化while (条件表达式E)语句S; /循环体当条件表达式E的值为true时,循环执行花括号中的语句S。S中包括迭代部分。 while语句首先计算条件表达式E是否成立,当条件成立(true)时,才去执行循环中的语句。所以有可能循环体一次也不执行。do-while语句 do-while语句的一般格式为:初始化do 语句S; /循环体 while (条件表达式E);do-while语句首先执行循环体, 然后再计算终止条件, 若结果为true, 则循环执行语句S, 直到条件表达式E的结果为false。 与while语句不同的是, do-while语句的循环体至少执行一次。for语句 for语句的一般格式为:for (初始表达式; 条件表达式; 迭代表达式) 语句S; /循环体for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。 可以在for语句的初始化部分声明变量,它的作用域为整个for语句。 for语句通常用来执行循环次数确定的情况(如对数组元素进行操作)。 在初始化部分和迭代部分可以使用逗号语句来分隔多个操作。例如: for (i=0,j=10; ij; i+,j-) continue语句continue语句用来结束本次循环, 跳过循环体中下面尚未执行的语句, 接着进行终止条件的判断, 以决定是否继续循环。 也可以用continue跳转到括号指明的外层循环中,这时的格式为 continue outerLable;例3.4:下例分别用while、do-while和for语句实现累计求和。public class Sumpublic static void main(String args)System.out.println(“n*while statement*);int n=10,sum=0; initializationwhile (n0) termination sum+=n; body n-; iterationSystem.out.println(sum is+sum);System.out.println(“n*do_while statement*);n=0; initializationsum=0;do sum+=n; body n+; iteration while(n=10); terminationSystem.out.println(sum is+sum);System.out.println(“n*for statement*);sum=0;for (int i=1;i=10;i+) sum+=i;System.out.println(sum is+sum);可以从中来比较这三种循环语句,从而在不同的场合选择合适的语句。数组数组是有序数据的集合, 数组中的每个元素具有相同的类型。数组名和下标可唯一地确定数组中的元素。数组可分为一维数组和多维数组。一维数组 声明方式:type arrayName; 或 type arrayName; type可以是Java中任意的数据类型, arrayName为数组名。如: int intArray; 声明了一个名为intArray的整型数组, 数组中的每个元素为int型数据。 Java在数组的声明中并不为数组元素分配内存, 因此 中不用指出数组中元素个数, 即数组长度。在访问数组的任何元素之前,我们必须为它分配内存空间, 这可用new操作符, 其格式如下:arrayName = new typearraySize; 其中,arraySize指明数组的长度。如: intArray = new int; 为该数组分配了3个int型整数所需的内存空间。通常, 这两部分可以合在一起, 格式如下: type arrayName = new typearraySize; 如: int intArray = new int; 用new操作符为数组分配内存空间后,就可以引用数组中的每一个元素。数组元素的引用方式为: arrayNameindex 其中: index为数组下标,它可以为整型常数或表达式。如a, b(i为整型), c6*I等。下标从0开始, 一直到数组的长度减1。对于上面例子中的intArray数组来说,它有3个元素,分别为: intArray0, intArray1, intArray。(注意: 没有intArray。)另外,与C、C+中不同,Java对数组元素要进行越界检查以保证安全性。对于每个数组都有一个属性length指明它的长度。例如: intArray.length指明数组intArray的长度。数组的初始化 对数组元素可以按照上述的例子进行赋值。也可以在定义数组的同时进行初始化。 如: int a=1,2,3,4,5; 用逗号(,)分隔数组的各个元素,系统自动为数组分配一定的内存空间。例3.5:数组的使用:public class ArrayTestpublic static void main(String args)int i;int a=new int;for (i=0;i5;i+)a=i;for (i=a.length-1;i=0;i-)System.out.println(a+i+=+a);多维数组 与C、C+一样, Java中多维数组可被看作数组的数组。例如二维数组就可看成是一个特殊的一维数组, 该数组的每个元素又是一个一维数组。下面我们主要以二维数组为例来说明多维数组。 二维数组的声明方式如下: type arrayName; 如: int intArray;与一维数组一样,这时对数组元素也没有分配内存空间,同要使用运算符new来分配内存,然后才可以访问每个元素。对二维数组中每个元素,引用方式为: arrayNameindex1index2 其中index1、index2为下标, 可为整型常数或表达式, 如a等。数组每一维的下标也都从0开始。在声明二维数组的同时也可对它进行初始化。如:int a=2,3,1,5,3,4; 定义了一个32的数组,并对每个元素赋值。数组的越界 如果使用数组分量时,其下标超过规定的值,则会发生数组的越界。这时,虽然程序能通过编译,但在运行时会产生一个名为ArrayIndexOutOfBoundsException 的例外,所以编程时要注意检查数组下标。1VO是用new关键字创建,由GC回收的。PO则是向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。2VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。PO则是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使我们的程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。3VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。PO的属性是跟数据库表的字段一一对应的。PO对象需要实现序列化接口。-PO是持久化对象,它只是将物理数据实体的一种对象表示,为什么需要它?因为它可以简化我们对于物理实体的了解和耦合,简单地讲,可以简化对象的数据转换为物理数据的编程。VO是什么?它是值对象,准确地讲,它是业务对象,是生活在业务层的,是业务逻辑需要了解,需要使用的,再简单地讲,它是概念模型转换得到的。首先说PO和VO吧,它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(当然我是指他们的属性)。正因为这样,PO独立出来,数据持久层也就独立出来了,它不会受到任何业务的干涉。又正因为这样,业务逻辑层也独立开来,它不会受到数据持久层的影响,业务层关心的只是业务逻辑的处理,至于怎么存怎么读交给别人吧!不过,另外一点,如果我们没有使用数据持久层,或者说没有使用hibernate,那么PO和VO也可以是同一个东西,虽然这并不好。-java的(PO,VO,TO,BO,DAO,POJO)解释PO(persistant object) 持久对象在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。VO(value object) 值对象通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。TO(Transfer Object),数据传输对象在应用程序不同tie(关系)之间传输的对象BO(business object) 业务对象从业务模型的角度看,见UML元件领域模型中的领域对象。封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。POJO(plain ordinary java object) 简单无规则java对象纯的传统意义的java对象。就是说在一些Object/Relation Mapping工具中,能够做到维护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。我的理解就是最基本的Java Bean,只有属性字段及setter和getter方法!。DAO(data access object) 数据访问对象是一个sun的一个标准j2ee设计模式,这个模式中有个接口就是DAO,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO, 提供数据库的CRUD操作.O/R Mapper 对象/关系 映射定义好所有的mapping之后,这个O/R Mapper可以帮我们做很多的工作。通过这些mappings,这个O/R Mapper可以生成所有的关于对象保存,删除,读取的SQL语句,我们不再需要写那么多行的DAL代码了。实体Model(实体模式)DAL(数据访问层)IDAL(接口层)DALFactory(类工厂)BLL(业务逻辑层)BOF Business Object Framework 业务对象框架SOA Service Orient Architecture 面向服务的设计EMF Eclipse Model Framework Eclipse建模框架-PO:全称是persistant object持久对象最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。BO:全称是business object:业务对象主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。比如一个简历,有教育经历、工作经历、社会关系等等。我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。建立一个对应简历的BO对象处理简历,每个BO包含这些PO。这样处理业务逻辑时,我们就可以针对BO去处理。VOvalue object值对象ViewObject表现层对象主要对应界面显示的数据对象。对于一个WEB页面,或者SWT、SWING的一个界面,用一个VO对象对应整个界面的值。DTOData Transfer Object数据传输对象主要用于远程调用等需要大量传输对象的地方。比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VOPOJOplain ordinary java object 简单java对象个人感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。一个POJO持久化以后就是PO直接用它传递、传递过程中就是DTO直接用来对应表示层就是VODAOdata access object数据访问对象这个大家最熟悉,和上面几个O区别最大,基本没有互相转化的可能性和必要.主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO-PO:persistant object持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。 PO中应该不包含任何对数据库的操作.VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递.DAO:data access object数据访问对象,此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作.BO:business object业务对象,封装业务逻辑的java对象,通过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 知识产权保密协议范本
- 2026年湖北省黄石市单招职业倾向性测试题库新版
- 2026年金肯职业技术学院单招职业技能测试题库附答案
- 2026年山西金融职业学院单招职业适应性测试题库新版
- 2026年四川铁道职业学院单招职业技能测试必刷测试卷附答案
- 2026年哈尔滨城市职业学院单招职业倾向性测试必刷测试卷附答案
- 2026年江苏城市职业学院单招职业倾向性考试题库附答案
- 2026年广西现代职业技术学院单招职业技能测试题库及答案1套
- 2026年湖南软件职业技术大学单招职业适应性测试题库必考题
- 2026年云南新兴职业学院单招职业倾向性考试必刷测试卷及答案1套
- 2025年03月随县公开引进事业单位急需紧缺高层次人才92人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025年温州市工业与能源发展集团有限公司招聘笔试参考题库含答案解析
- 临床教学案例库的构建策略与实施
- 大学生心理健康教育(第三版)教案:第三章 学业发展 成长之基
- 无废医院培训
- 党政干部安全课课件
- 老年重症患者静脉血栓栓塞症预防中国专家共识(2023)解读
- 企业管理-电信客户经理岗位职责说明书
- 佛山暴雨强度公式-2016暴雨附件:-佛山气象条件及典型雨型研究
- 夜店消费行为研究-洞察分析
- Flash动画技术入门(湖北大学)学习通测试及答案
评论
0/150
提交评论