Java工具类、异常和集合(温习知识点)
今日内容
* 工具类* API* Object类* String类* StringBuffer类* StringBuilder类* Math类* Array类* System类* 包装类* BigInteger类* BigDecumal类* 日期时间类
* 异常* 异常概述* 异常处理* 自定义异常
* 集合* Collection接口* List接口* Set接口* Map接口
一、工具类
01.API
API的使用:
- 打开帮助文档。
- 点击显示,找到索引,看到输入框。
- 你要找谁?在输入框里输入,然后回车。
- 看包。java.lang下的类不需要导包,其他需要。
- 看类的解释和说明。
- 学习构造方法。
02.Object类
概念
- Object类是所有类的父类,也叫做基类(超类),所有类都直接或间接继承与Object类,一个类如果没有显式继承任何一个类,那么默认继承Object类
常用方法
finalize()
方法: 回收方法hashCode()
方法: 返回对象的哈希码值equals()
方法: 用于判断指定对象与当前对象是否相等toString()
方法 : 返回该对象的字符串
final finally finalize()区别
- final: java中的关键字,修饰符。
A).如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承。因此,一个类不能同时被声明为abstract抽象类的和final的类。
B).如果将变量或者方法声明为final,可以保证它们在使用中不被改变.
1)被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
2)被声明final的方法只能使用,不能重载。- finally: java的一种异常处理机制。
finally是对Java异常处理模型的最佳补充。finally结构使代码总会执行,而不管无异常发生。使用finally可以维护对象的内部状态,并可以清理非内存资源。特别是在关闭数据库连接这方面,如果程序员把数据库连接的close()方法放到finally中,就会大大降低程序出错的几率。- finalize: Java中的一个方法名。
Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没被引用时对这个对象调用的。它是在Object类中定义的,因此所的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
finalize()方法是回收方法,当GC发现对于当前对象没有引用自动调用进行回收,每个对象只能调用一次finalize方法
equals()与==的区别
equals()
是Object提供的方法,==
是比较运算符==
常用于比较基本数据类型中数值类型值是否相等,比较引用数据类型时,比较的是两个对象是否为同一个对象(物理地址是否相同)equals()
是Object类提供的方法源码中使用的就是==
,一般子类会重写equals()方法进行内容的比较==
既能比较基本数据类型也能比较引用数据类型,equals()
只能比较引用类型(参数为Object,只能使用多态传入任意对象类型)
03.String类
String的本质是
- JDK8之前是char[] 数组
- JDK8之后是byte[] 数组
构造方法:
String()
构造方法:空字符串String(byte[] arr)
构造方法: 通过使用指定的 byte 数组,构造一个新的 StringString(char[] arr)
构造方法: 使用指定的char数组,创建字符串String(String str)
构造方法: 使用指定的字符串常量创建字符串String(char[] arr,int startIndex,int endIndex)
构造方法: 使用指定char数组指定索引长度的内容创建字符串
常用方法:
length()
方法: 用于返回当前字符串中字符个数(返回底层数组长度)charAt(int index)
方法: 用于获取当前字符串中指定索引对应的字符concat(String str)
方法: 由于字符串是常量不可以修改,所以字符串String提供的方法会返回一个新字符串contains(String str)
方法: 判断指定字符串在当前字符串中是否存在startsWith(String str)
方法: 判断当前字符串是否以指定字符串开头或结尾endsWith(String str)
方法: 判断当前字符串是否以指定字符串开头或结尾getBytes()
方法: 用于获取当前字符串所代表的字节数组indexOf(String str)
方法: 用于获取指定字符串在当前字符串中第一次或最后一次出现的索引lastIndexOf(String str)
方法: 用于获取指定字符串在当前字符串中第一次或最后一次出现的索引replace(String str,String str)
方法: 将当前字符串中指定字符串替换为另一个字符串split(String str)
方法: 使用指定分隔符分割字符串为字符串数组substring(int index)
方法: 返回当前字符串指定索引后的字符串toCharArray()
方法: 将当前字符串创建新的char数组返回toUpperCase()
方法: 将当前字符串中字母转换为大写/小写创建新的字符串返回toLowerCase()
方法: 将当前字符串中字母转换为大写/小写创建新的字符串返回
04.StringBuffer类
StringBuffer类:是一个带有缓冲区的,线程安全的可变字符序列,是API提供用于操作字符串的工具类。
构造方法:
StringBuffer()
构造方法:创建一个空的字符串StringBuffer(int length)
构造方法:根据参数创建指定字符大小的空字符串。StringBuffer(String str)
构造方法: 根据参数创建指定字符长度的缓冲区并存储指定字符(初始长度+字符串长度)。
常用方法:
append()
方法: 在原字符串后继续添加其他字符串delete()
方法:删除指定索引中间字符串,保留其他字符串insert()
方法: 将指定字符串插入当前字符串指定索引位置replace()
方法: 将指定索引范围替换为指定字符串reverse()
方法: 将字符串反转subString()
方法: 返回该对象的字符串
05.StringBuilder类
StringBuilder类是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder对象中的内容是可变的
构造方法:
StringBuilder()
方法: 创建一个空白可变字符串对象,不含有任何内容StringBuilder(String str)
方法: 根据字符串的内容,来创建可变字符串对象
常用方法:
append(Object obj)
方法: 添加数据,并返回对象本身reverse()
方法: 返回相反的字符序列toString()
方法: 将StringBuilder转换为StringStringBuilder
和String
相互转换toString()
方法:通过 toString() 就可以实现把 StringBuilder 转换为 StringStringBuilder(String s)
方法:通过构造方法就可以实现把 String 转换为 StringBuilder
String、StringBuffer、StringBuilder区别
1、存储不同:
- String:存储的是字符串常量,不允许修改
- StringBuffer、StringBuilder是具有缓冲区,允许修改
2、返回时是否修改自身:
- String方法会返回一个新的字符串
- StringBuffer、StringBuilder基本会返回自己修改后的本身
3、工作效率:
- String:线程安全 占用资源
- StringBuffer:线程安全 效率低
- StringBuilder:线程不安全 效率高
4、使用场景:
- ①用于声明字符串并不进行频繁修改时使用String,否则应该使用StringBuffer、StringBuilder
- ②如果涉及到线程安全使用StringBuffer,只考虑效率使用StringBuilder
06.Math类
所有方法均为静态方法
常用方法
- Math.PI : 常量,圆周率
- Math.E:常量E
abs(double num)
方法: 取绝对值ceil(double num)
方法: 向上取整floor(double num)
方法: 向下取整round(double num)
方法: 四舍五入max(int a, int b)
方法: 求最大值min(int a, int b)
方法: 求最小值pow(double a, double b)
方法: 求a的b次幂random()
方法: 随机数,随机的范围[0,1)
07.Array类
所有方法均为静态方法
常用方法:
toString(int[] a)
方法: 返回指定数组内容的字符串表示形式。
sort(int[] a)
方法: 对指定的int型数组按数字升序进行排序。
copyOf(Object[] obj,int length)
方法: 数组拷贝
08.System类
java.lang.System
类中提供了大量的 静态方法,可以获取与系统相关的信息或系统级操作
常用方法:
currentTimeMillis()
方法: 返回以毫秒为单位的当前时间。arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
方法: 将数组中指定的数据拷贝到另一个数组中。exit(int status)
方法: l 用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态
09.包装类
基本类型 | 对应的包装类(位于java.lang包中) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
装箱: 从基本类型转换为对应的包装类对象。
拆箱: 从包装类对象转换为对应的基本类型。
什么是包装类,什么是自动拆装箱
- java中对于基本数据类型提供的对应引用类型类,byte—>Byte,short—>Short,int—>Integer,long—>Long,float—>Float,double—>Double,char—>Character,boolean—>Boolean
- 自动拆装箱就是在代码运行时,基本数据类型与对应包装类对象互相自动转换的过程
10.BigInteger类
BigInteger类:最大整数类型
构造方法:
BigInteger(String val)
方法: 将字符串的数组封装成BigInteger对象
常用方法:
add(BigInteger val)
方法: 两个BigInteger进行相加,并返回BigIntegersubtract(BigInteger val)
方法: 两个BigInteger进行相减,并返回BigIntegermultiply(BigInteger val)
方法: 两个BigInteger进行相乘 ,并返回BigIntegerdivide(BigInteger val)
方法: 两个BigInteger进行相除,并返回BigInteger
11.BigDecumal类
BigDecimal类:最小浮点类
构造方法:
BigDecimal(String val)
方法: 将String类型的数组封装为BigDecimal对象
常用方法:
add(BigDecimal augend)
方法: 浮点类型数据相加操作subtract(BigDecimal subtrahend)
方法: 浮点类型数据相减操作multiply(BigDecimal multiplicand)
方法: 浮点类型数据相乘操作divide(BigDecimal divisor)
方法: 浮点类型数据相除操作divide(BigDecimal divisor,int scale,int roundingMode)
方法: 浮点类型数据相除操作,按照指定的模式,保留几位小数
12.日期时间类
01.Date类
java.util.Date
类 表示特定的瞬间,精确到毫秒。
构造方法:
Date()
方法: 分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)Date(long date)
方法: 分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,
即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
常用方法:
getTime()
方法: 用于获取当前时间至1970年1月1日00:00:00 GMT所过毫秒数
02.SimpleDateFormat日期格式化类
SimpleDateFormat日期格式化类: 是日期/时间格式化子类的抽象类,通过这个类可以完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
构造方法:
SimpleDateFormat(String atr)
方法:
常用方法:
- 格式化
String format(Date)
方法: 将日期对象使用当前格式进行格式化返回字符串- 解析
Date parse(String)
方法: 将指定字符串使用当前格式解析为Date对象
03.Calendar日历类
java.util.Calendar
是日历类 , 该类将所有可能用到的时间信息封装为静态成员变量
创建:Calendar c=Calendar.getInstance();
getInstance()
方法: 使用默认时区和语言环境获得一个日历
常用方法:
get(int)
方法 : 通过传入指定的静态常量对应的值,获取对应数据set()
方法 : 设置了不同的重载方法。
- set()方法 :修改当前日历对象代表的日期
- set(field, value)方法:为指定属性赋值
- set(year, month, date)方法:设置年月日
- set(year, month, date, hourOfDay, minute)方法:同时设置年月日小时与分钟
- set(year, month, date, hourOfDay, minute, second)方法:同时设置年月日时分秒
add(field, amount)
方法 : 添加方法,为指定属性进行数据的添加
二、异常
01.异常概述
异常 :指的是在程序书写与运行过程中,由于非语法产出的非正常情况,最终会导致JVM的非正常停止。
分类:
- 运行时异常: 也叫非受检异常,runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常)
- 非运行时异常: 也叫受检异常、编译异常,checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)
02.异常处理
- 向上抛出处理:
throws
- 自行处理:
try...catch
处理异常两种方式的区别
- 抛出异常使用 throws 关键字,自行处理 try…catch
- 抛出异常时调用方处理,自行处理自己书写处理代码进行处理
- 抛出异常书写在方法上,标识当期方法可能出现的异常,自行处理使用try将可能出现的异常代码包裹对于出现的异常使用catch进行匹配处理
- 抛出异常会导致程序的停止运行,自行处理可能不会停止
03.自定义异常
自定义异常类只需要创建类继承
Exception
或者RuntimeException
就可以创建对应的受检异常以及运行时异常
throw 与throws的区别
- throw用在方法体内,根的是异常对象名;throws用在方法声明后面,跟的是异常类名
- throw表示抛出异常,由方法体内的语句处理;throws表示抛出异常,由该方法的调用者来处理
- throw执行throw约定抛出了某种异常;throws表示出现异常的一种可能性,并不一定会发生这些异常
三、集合
01.Collection接口
常用方法:
add(E e)
方法:把给定的对象添加到当前集合中 。remove(E e)
方法:把给定的对象在当前集合中删除。contains(E e)
方法:判断当前集合中是否包含给定的对象。isEmpty()
方法:判断当前集合是否为空。size()
方法:返回集合中元素的个数。toArray()
方法:把集合中的元素,存储到数组中。clear()
方法:清空集合中所有的元素。
- 迭代器
创建: Iterator it = coll.iterator();
常用方法:
next()
方法:返回迭代的下一个元素。hasNext()
方法:如果仍有元素可以迭代,则返回 true。
//使用迭代器 遍历 每个集合对象都有自己的迭代器Iterator<String> it = coll.iterator();// 泛型指的是 迭代出 元素的数据类型while(it.hasNext()){ //判断是否有迭代元素String s = it.next();//获取迭代出的元素System.out.println(s);}
- 增强for
for(元素的数据类型 变量 : Collection集合or数组){ //写操作代码
}
for循环与增强for循环的区别
- 1、语法不同:
- for循环语法中书写初始值、判断条件、迭代语句
- 增强for循环中书写保存每次取出数据的变量声明以及遍历的数据
- 2、执行流程不同
- for循环按照初始值、判断条件、迭代语句、循环体语句、判断语句 …执行
- 增强for循环依次取出遍历容器中的数据赋值给临时变量之后使用
- 3、功能不同
- for循环进行容器操作时,使用的是容器提供的方式进行获取并且可以进行修改
- 增强for循环每次使用临时变量保存,不会修改容器中的数据
- 4、使用场景不同
- for循环可以在执行时根据条件进行终止与操作
- 增强for循环只能从头到尾遍历所有数据
02.List接口
特点:元素存取有序、带有索引、集合中可以有重复的元素
- 1、数据有序->存入位置与取出顺序相同
- 2、拥有索引->可以通过索引精确获取对应数据
- 3、数据重复->不同索引存储的数据可以相同
常用方法:
add(int index, E element)
方法:将指定的元素,添加到该集合中的指定位置上。get(int index)
方法:返回集合中指定位置的元素·。remove(int index)
方法:移除列表中指定位置的元素, 返回的是被移除的元素。set(int index, E element)
方法:用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
- ArrayList
java.util.ArrayList
集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList
是最常用的集合。
常用方法:
add(int index, E element)
方法:将指定的元素,添加到该集合中的指定位置上。get(int index)
方法:返回集合中指定位置的元素·。remove(int index)
方法:移除列表中指定位置的元素, 返回的是被移除的元素。set(int index, E element)
方法:用指定元素替换集合中指定位置的元素,返回值的更新前的元素。add(E e)
方法:将指定的元素添加到此列表的尾部
- LinkedList
java.util.LinkedList
集合数据存储的结构是双向链表结构。方便元素添加、删除的集合,查找修改慢。
常用方法:
addFirst(E e)
方法:将指定元素插入此列表的开头。addLast(E e)
方法:将指定元素添加到此列表的结尾。getFirst()
方法:返回此列表的第一个元素。getLast()
方法:返回此列表的最后一个元素。removeFirst()
方法:移除并返回此列表的第一个元素。removeLast()
方法:移除并返回此列表的最后一个元素。pop()
方法:从此列表所表示的堆栈处弹出一个元素。push(E e)
方法:将元素推入此列表所表示的堆栈。isEmpty()
方法:如果列表不包含元素,则返回true。
ArrayList与LinkedList的区别
- ArrayList: 底层使用数组形式对数据进行存储
- 查询修改快:数组可以直接通过索引获取对应位置数据
- 添加删除慢: 在对首位或中间数据进行添加与删除操作时,需要将之后的数据向后或向前移动,随着数据的增大移动的次数也会增大,导致执行的效率降低
- LinkedList: 底层使用双向链表形式对数据进行存储
- 查询修改慢:底层使用双向链表形式对数据进行存储,每一块只保存当前数据以及前后块地址,在进行查找时,如果查找的是非首末位块,需要依次向后查找
- 添加删除快:链表每块保存数据添加与删除时只影响前后块位置的修改
03.Set接口
Set集合: 继承自
Collection
接口,与Collection
接口中的方法基本一致,并没有对Collection
接口进行功能上的扩充,只是比Collection
接口更加严格。
特点:
- Set集合中的元素不可重复
- Set集合没有索引
- HashSet
HashSet:
java.util.HashSet
是Set
接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)
特点:
- HashSet集合中的元素不可重复
- HashSet集合没有索引
- HashSet集合是无序的(存储元素的顺序与取出元素顺序可能不一致)
HashSet集合存储数据的结构:
- JDK的版本不同,HashSet集合的数据结构有所不同:
- JDK8之前:数组+链表
- JDK8之后:数组+链表+红黑树
当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。
- LinkedHashSet
java.util.LinkedHashSet
,是链表和哈希表组合的一个数据存储结构
特点:
- LinkedHashSet集合中的元素不可重复
- LinkedHashSet集合没有索引
- LinkedHashSet集合是有序的(存储元素的顺序与取出元素顺序一致)
04.Map接口
java.util.Map
接口,提供了专门的集合类用来存放这种对象关系的对象
常用方法:
put(K key, V value)
方法:把指定的键与指定的值添加到Map集合中。remove(Object key)
方法:把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。get(Object key)
方法:根据指定的键,在Map集合中获取对应的值。containsKey(Object key)
方法:判断集合中是否包含指定的键。keySet()
方法:获取Map集合中所有的键,存储到Set集合中。Set<Map.Entry<K,V>> entrySet()
方法:获取到Map集合中所有的键值对对象的集合(Set集合)。
- Map集合的遍历
1、keySet()
方法:
通过元素中的键,获取键所对应的值
常用方法:
keyset()
方法:获取Map中所有的键get(K key)
方法:根据键,获取键所对应的值
//创建Map集合对象 HashMap<String, String> map = new HashMap<String,String>();//添加元素到集合 map.put("胡歌", "霍建华");map.put("郭德纲", "于谦");map.put("薛之谦", "大张伟");//获取所有的键 获取键集Set<String> keys = map.keySet();// 遍历键集 得到 每一个键for (String key : keys) {//key 就是键//获取对应值String value = map.get(key);System.out.println(key+"的CP是:"+value);}
2、entrySet()
方法:
Entry:
Map
中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map
中是一一对应关系,这一对对象又称做Map
中的一个Entry(项)
。Entry
将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map
集合时,就可以从每一个键值对(Entry
)对象中获取对应的键与对应的值。
获取Entry:
public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。
常用方法:
getKey()
方法:获取Entry对象中的键。getValue()
方法:获取Entry对象中的值。
Map与Collection集合区别:
- Collection集合
单列集合,一次只能添加一个元素
有的是有索引,有的没有索引
有的集合可以存储重复的元素,有的则不可以
有的元素是无序的,有的是有序的- Map集合
Map集合是双列集合,由Key和Value组成
Key是不允许重复的,Value是允许重复
Key允许存null值的,但是只能存储唯一的一个
- LinkedHashMap
特点:
- 有序的,而且key不允许重复
- 数据结构: 哈希表 + 链表
HashMap和Hashtable的区别
- HashMap是HashTable的替代
- HashMap线程不安全,HashTable线程安全
- HashMap的key可以使用null作为key;HashTable的key不允许为null作为key
集合遍历的方法
ArrayList<String> c=new ArrayList<>();c.add("张三"); c.add("李四");c.add("王五");c.add("赵六");c.add("田七");c.add("周八");//通过iterator方法获取对应集合的迭代器对象Iterator<String> i=c.iterator();while(i.hasNext()){//当前集合中是否还有下一个元素System.out.print(i.next());//获取当前元素并指向下一个}System.out.println();//for(集合中存储数据的类型 变量名:集合 ){}for (String s : c) {System.out.print(s);}System.out.println();for (int j = 0; j < c.size(); j++) {System.out.print(c.get[j]);}
温故而知新,可以为师矣
每日一点点进步
不进则退
Java工具类、异常和集合(温习知识点)相关推荐
- java工具类应该抛异常吗,java学习阶段一 工具类(异常)
java学习阶段一 工具类(异常) 介绍 异常:运行期间出现的错误 背离程序本身意图的表现 基本知识 异常的分类 根类 Throwable Error 程序无法处理的错误 表示运行应用程序中教严重的问 ...
- 干货:排名前 16 的 Java 工具类!
2019独角兽企业重金招聘Python工程师标准>>> 干货:排名前 16 的 Java 工具类! 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最 ...
- 排名前 16 的 Java 工具类
转载来自微信公众号:Java 技术栈.如有侵权,请联系作者删除!! 在 Java 中,工具类定义了一组公共方法,这篇文章将介绍 Java 中使用最频繁及最通用的 Java 工具类.以下工具类.方法按使 ...
- beanutils工具类_16 个超级实用的 Java 工具类!
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- java轻量级并行工具类_16 个超级实用的 Java 工具类
原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...
- java 文本工具类_干货:排名前16的Java工具类
原标题:干货:排名前16的Java工具类 作者丨Java技术栈 https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Ja ...
- 干货:排名前16的Java工具类
image 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源 ...
- 排名前16的Java工具类
原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...
- java xml最火的的工具_几种高效的Java工具类推荐
本文将介绍了十二种常用的.高效的Java工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 在开发中,使用这些工具类,不仅可以提高编码效率,还 ...
最新文章
- Python使用sklearn和statsmodels构建多元线性回归模型(Multiple Linear Regression)并解读
- C#一个事件中调用另一个事件
- android 上传到了maven,但是报错找不到jar
- python去哪里学-杭州python编程入门去哪学?
- Referenced file contains errors (http://JAVA.sun.com/xml/ns/j2ee/web-app_2_5.xsd).
- php的4种常用运行方式
- html代码表白_七夕表白代码,樱花特效+爱心特效+花瓣+评论留言功能等
- java 用户登录界面代码_java语言图形用户登录界面代码
- 管理小故事精髓 100例(转)
- 记一次配置路由器无线桥接的过程——让古董路由器发挥余热
- 计算机组成原理 模拟机,面向计算机组成原理数学的MML模拟器
- 读博会改变人的性格吗?
- doc转docx文件会乱吗_Word中doc和docx,到底有什么区别
- 项目十大管理(六)人力资源管理
- [LOJ2422]【NOIP2015】斗地主
- BeautifulSoup类的使用-爬取电影票房排行
- 2019年北京摇号窗口办理地址、电话
- Swing 界面设计 强大的jide组件
- 干货!通过结合答案相关性改进以查询为中心的自动文本摘要
- 基于matlab数字基带,基于MATLAB的数字基带传输的 FIR滤波器的设计