java常用类知识点总结_第1页
java常用类知识点总结_第2页
java常用类知识点总结_第3页
java常用类知识点总结_第4页
java常用类知识点总结_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java常用类知识点总结Java常用类要求:1、掌握String和StringBuffer的区别,可以熟练使用String和 StringBuffer 的各种方法进行相关操作。2、能够自己编写一个得到日期的操作类,并将日期进行格式化操作。3、掌 握比较器及其基本原理,并可以通过比较器进行对象数组的比较操作。4、掌握对 象克隆技术及其实现5能够灵活应用正则表达式对字符串的组成进行判断6、掌握Math. Random.基本数据类型的包装类的使用7、描述出Object System对垃圾收集的支持8、使用 Numb er Forma t、DecimalForma t、BigI nt eger、Big

2、Decimal 进行数字 的操作String 和 StringBufferString的内容一旦声明不可改变,如果要改变,改变的是String的引用地址,如果一个字符吊要经常改变,必须使用StringBuffero在一个字符串内容需要频繁修改时,使用StringBuffer可以提升操作性能, 因为StringBuffer内容可以改变,而String内容不可改变。StringBuffer支持 的方法大部分与String类似。StringBuffer 常见用法:(1)字符串的连接操作String类可以通过“+ “进行字符串的连接,而StringBuffer中却只能使用 append方法进行字符串的

3、连接,而且此方法返回一个StringBuffer类的实例,这 样就可以釆用代码链的形式一直调用append方法。(2)在任意位置处为StringBuffer添加内容可以使用insert方法在指定位置上为StringBuffer添加内容字符串的反转操作(较为常见的操作,使用reverse方法)(3)替换指定范围 的内容replace方法可对指定范围的内容进行替换。在String中如果要替换,使用的 是 replaceAll(4)字符吊截取(使用subString方法从指定范围中截取内容)(5)删除指定 范围的字符串(使用delete方法删除指定范围内容)(6)查找指定内容是否存在 (indexO

4、f查找指定内容,查找到返回内容的位置,没查到返回-1)问题:(1)String s = Hello;s二s + world!;这两行代码执行后,原始 的String对象中的内容到底变了没有,没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不 可变对象。在这段代码中,s原先指向一个String对象,内容是Hello,然后 我们对s进行了 +操作,那么s所指向的那个对象是否发生了改变呢,答案是没有。 这时,s不指向原来那个对象了,而指向了另一个String对象,内容为Hell。 world!原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。 通过上面的

5、说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的 修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的 内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符 串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允 许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象 转换十分容易。同时,我们还可以知道,如果要使用内容相同的字符串,不必每次 都new 个Stringo例如我们要在构造器中对一个名叫s的String引用变量进行 初始化,把它设置为初始值,应当这样做:public cl

6、ass Demo private String s;.public Demo s = Initial Value;而非s = new String (Initial Value):后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对 于内容相同的字符串,只要一个String对象来表示就可以了。也就说,多次调用 上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。上面 的结论还基于这样一个事实:对于字符串常量,如果内容相同,Java认为它们代表 同一个String对象。而用关键字new调用构造器,总是会创建一个新的对象,

7、无 论内容是否相同。至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只 String,很多兀腹标准类库中的类都是不可变的。在开发一个系统的时候,我们 有时候也需要设讣不可变类,来传递一组相关的值,这也是面向对象思想的体现。 不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有 任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。所以Jam标准类库还提供了一个可变版本,即StringBuffero(2)String s = new String(xyz);创建了儿个 String Object?二者之间有 什么区别,两

8、个或一个,” xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量” xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创 建一个新的对象,它一句那个常量” xyz”对象的内容来创建出一个新String对 象。如果以前就用过xyz,这句代表就不会创建” xyz”自己了,直接从缓冲区 拿。下面这条语句一共创建了多少个对象:String s/+b+c+d;答:对于如下代码:String si = a;String s2 = si + b;String s3 =+ b;System, out. println(s2 = ab); System, out. printl

9、n(s3 = ab); 第一 条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可 以对字符吊常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处 理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。题LI中的笫一行代码被编译器在编译时优化后,相当于直接定义了一个” abed”的字符串,所以,上面的代码应该只创建了一个String对象。写如下 两行代码,String s =+ b + c + d;System, out. println(s = abed);最终打印的结果应该为 true。)String 和 StringBuffer

10、的区别(3JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符 串,即包含多个字符的字符数据。String类表示内容不可改变的字符串。而 StringBuffer类表示内容可以被修改的字符串。当你知道字符数据要改变的时候 你就可以使用StringBuffero典型地,你可以使用StringBuffers来动态构造字 符数据。另外,String 实现了 equals 方法,new String( uabcv ). equals (new String( abc” )的结果为true,而StringBuffer没有实现equals方法,所以, new Strin

11、gBuffer ( abc”). equals (new StringBuffer ( abc”)的结果为 falseo接着要举一个具体的例子来说明,我们要把1到100的所有数字拼起来,组成 一个串。StringBuffer sbf = new StringBuffer(): for(int i二0;i100;i+)sbf. append(i);上面的代码效率很高,因为只创建了一个StringBuffer对象,而下面的代码 效率很低,因为创建了 101个对象。String str = new String(); for(int i=0;i getProperty(String key) IT算

12、 程序的执行时间(currentTimeMi 11 is方法)系统退出的方法和数组的复制方法垃圾收集方法(System, gc,此方法实际是对Runtime类中gc方法的封装)日 期操作类(Date、Calender、S i mp 1 eDa t aF or ma t) 1、Date类可以得到一个完整 的日期,但是日期格式不符合平常看到的格式,时间也不能精确到毫秒,要想按照 用户自己的格式显示时间可以使用Calender类完成操作。2、Calender可以将取得的时间精确到毫秒,但是此类是抽象类,要想使用抽 象类,必须依靠对象的多态性,通过子类进行父类得实例化操作,其子类是GregorianC

13、alender,在Calender中提供了部分常量,分别表示日期的各个数字 (见API文档)o3、Date类取得的时间是一个正确的时间,但显示格式不符合习惯,可以利用 DateFormat类进行格式化,格式是其默认的时间显示格式。此类是一个抽象类, 无法直接实例化,但是此类提供了一个静态方法可获得本类的实例。4、如果要想 得到用户自己需要的日期显示格式,要通过SimpleDataFormat完成。Math 类提供了一些列数学操作方法,包括求绝对值、三角函数等,都是静态方法,通 过类名调用即可。注意:Math类中round方法的作用是进行四舍五入,此方法在操作时将小数点 后面的全部数字都忽略掉,

14、如果想精确到小数点后的准确位数,必须使用 BigDecimal 类。Random 类随机数产生类,可以指定一个随机数的范围,然后任意产生在此范围中的数 字。NumberFormat 类表示数字的格式化类,可以按照本地的风俗习惯进行数字的显示。此类是一个 抽象类,无法直接实例化,但是此类提供了一个静态方法可获得本类的实例。 DecimalFormat 类主要作用是格式化数字,在格式化数字时,要比直接使用NumberFormat更方 便,因为可以直接指定按用户自定义的方式进行格式化操作,与SimpleDataFormat类似,如果要进行自定义格式化操作,则必须指定格式化操作的模板。Biginteg

15、er 类当一个数字非常大时,则肯定无法使用基本类型接收,所以,最早碰到大数字 时往往会使用String类进行接收,然后再采用拆分的方式进行计算,但操作很麻 烦,在java中提供Biginteger解决这样的难题,表示大整数类,如果在操作时一 个整型数据已经超过了整数的最大类型long,数据无法输入,可以使用 Biginteger类进行操作,此类封装了各个常用的基本运算(见API)BigDecimal 类对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果 需要精确计算的结果,则必须使用BigDecimal,此类也可进行大数操作。对象克 隆技术Java中支持对象的克隆操

16、作,使用Object的clone方法即可。此方法是受保 护的类型,所以在子类中必须重写此方法,而且重写后应该扩大访问权限,这样才 能被外部调用,但是具体的克隆方法的实现还是在Object中,所以在重写的方法 中只需要调用Object类中的clone方法即可完成操作(super, clone (),而且在对 象所在类中必须实现Cloneable接口才可以完成对象的克隆操作。Arrays类数组操作类,实现数组元素的查找、数组内容的填充、排序等。Comparable 接口使用Arrays类可以进行数组的排序,而且其sort方法被重载了多次,可以对 任意类型的数组排序,排列时会根据数值的大小进行排序,

17、此类也可对Object数 组进行排序,但是要使用此种方法排序也是有要求的,即对象所在的类必须实现 Comparable接口,此接口就是用于指定对象排序规则的。(看API中此接口的定义) 提供了 comperTo的比较方法,用来设置比较规则。具体应用:要求设计一个学生类,此类包括姓名、年龄、成绩,共产生一个对 象数组,要求按成绩山高到低排序,如果成绩相等,贝9按年龄山低到高排序。另 外一种比较器Comparator接口与Comparable接口不同,需要单独指定好一个比较器的比较规则类才可以完 成数组排序。建议还是使用Comparable接口进行排序操作比较方便。正则表达式可以方便对数据进行匹配

18、,还可以执行更复杂的字符串验证、拆分、替换功 能。Pattern 类和 Matcher 类如果要在程序中应用正则表达式必须依靠Pattern类和Matcher类,Pattern 类主要作用是进行正则规范的编写,而Matcher类主要是执行规范,验证一个字符 串是否符合其规范。String类对正则表达式的支持三个方法matches (字符串匹配)、replaceAll (字符串替换)、split (字符串拆 分)定时调度(Timer和TimeTask)本部分是了解内容1、Timer类是一种线程设施,可以用来实现在某一个时间或某一段时间后安排 某一个任务执行一次或重复执行,该功能要与TimeTas

19、k配合使用,TimeTask类用 来实现由Timer安排的一次或重复执行的某一个任务。2、每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速 完成,否则可能会延迟后续任务的执行,而这些后续任务有可能堆在一起,等到该 任务完成后才能快速连续执行。3、要执行具体的任务,必须使用TimeTask类,此类为抽象类,如果要使用该 类,必须自己建立一个类来继承此类,并实现其中的抽象方法。Java编程,打印昨天的当前时刻public class YesterdayCurrentpublic void main(String_ args) Calendar cal -Calendar, ge

20、tlnstance(); cal. add(Calendar. DATE, 1);如何将数值型字符转换为数字仃nteger, Double),Integer, parselnt( 1234”)DoubleparseDouble ( 123.2” )如何将数字转换为字符,1.0+”如何去小数点前两位,并四舍五入。double d=1256. 22d;d二d/100;System, out. print In (Math, round (d) *100);如何取得年月日,小时分秒,Calendar c=Calendar getlnstance ();c. set (Calendar. YEAR,

21、2004);c. set (Calendar. MONTH, 0);c. set(Calendar. DAY_0F_M0NTH, 31);System out. println(c get(Calendar YEAR)+(c. get(Calendar. MONTH)+1)+ +c. get(Calendar. DAY_0F_M0NTH);如何取得从1970年到现在的毫秒数Java .util. Date dat=new Date ():long now=dat getTime ();如何获取某个日期是当月的最后一天,当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。取下一个月的第一

22、天,下一个月的第一天-1public static void main(String args)Calendar c=Calendar getlnstance();c. set (Calendar. YEAR, 2004);c.set (Calendar. MONTH, 0);c. set(Calendar. DAY_OF_MONTH, 30);Calendar cl=(Calendar)c. clone();System, out. printin(c. get(Calendar. YEAR)+(c. get(Calendar. MONTH)+1)+ +c. get(Calendar. DA

23、Y_OF_MONTH);c.add(Calendar. DAY_OF_MONTH, 1);if(c. get(Calendar. MONTH)!=cl. get(Calendar. MONTH)System, out. println(,/是最后一天);elseSystem, out. printin(不是取后一天);如何格式化日期,Import java. text. SimpleDateFormat; SimpleDateFormat sdf二newSimpleDateFormat (/zyyyy-MMdd hh:mm:ss);Date dat=new Date();/把日期转化为字符串String str=sdf. format(dat);System, out. println(str);/将字符串转化为日期Java. util. Date dl=sdf. parse( yyyy-mm-dd” );编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符 串。String a=new String(“中getBytes(gb2312), iso-8839T);String a=new String(中getByt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论