API总结

来源:互联网 发布:中山大学软件学院 编辑:程序博客网 时间:2024/03/29 09:16


1、String类

 1、字符串常量池

 * java对字符串做了一个优化措施:即使用字面量形式创建字符串对象时,会将该对象存入常量池

 * 缓存起来,当再次创建该内容字符串时会重用对象,减少内存开销

 * 正因为重用相同内容字符串对象,所以该对象变为“公用”对象,那么字符串被规定为是不便对象,即字符串

 * 对象一旦创建内容不可更改,若改变必定创建新对象。

* 编译器在编译源程序时发现一个计算表达式

       *计算符号两边的内容都是字面量时,会直接运算

       *并将结果编译到class文件中,所以下面代码在class文件中样子为:

       * String s5="123abc"

       *所以s5会重用s2对象

       * */

      String s5="123"+"abc";

      System.out.println(s5==s2);//true 编译器直接编译的"123abc"

     

      String s="123";

      String s6=s+"abc";

      System.out.println(s6==s2);//false 创建了一个新对象

2、String的方法:

int length()   返回当前字符串的长度(字符个数)int indexOf(String str)   查找给定字符串在当前字符串中的位置(下标)若当前字符串不含有给定内容则返回值为-1

从指定位置开始查找字符串第一次出现的位置

intindex1=str.indexOf("in", 3);

查找最后一次出现的字符串位置

intindex2=str.lastIndexOf("in");

String substring(intstart,int end)截取指定范围内的字符串“含头不含尾”

截取指定索引值后边所有部分

String sub1=str.substring(4);

String trim()去除当前字符串两边的空白字符

char charAt(int index)返回当前字符串中指定位置处的字符

boolean startsWith(Stringstr)

boolean endsWith(Stringstr)

判断当前字符串是否是以给定字符串起始或结尾的

String toUpperCase()String toLowerCase()

将当前字符串中的英文部分转换为全大写或全小写

静态方法  Stringvalueof(其他类型)

将java中的其他类型转换为一个字符串

String str0=String.valueOf(builder);

StringBuilder类型也可以用静态方法String.valueOf转换成字符串

3、StringBuilder类

改变字符串内容时,并不会创建新对象,而是在原对象基础上进行修改。从而减小了内存的开销

StringBuilder类的常用方法有:

 append(String str):追加字符串;

  insert (int dstOffset,String s):插入字符串;

 delete(int start,int end):删除字符串;

 replace(int start,int end,String str): 替换字符串;

 reverse():字符串反转。

toString可以获取builder内部的字符串

Stringstr=builder.toString();

4、StringBuffer 和StringBuilder的区别:

StringBuffer是线程安全的,同步处理的,性能稍慢;

StringBuilder是非线程安全的,并发处理的,性能稍快。

5、正则表达式:

 

 

 

 

字符串支持正则表达式的方法一:boolean matches(Stringregex)  该方法会使用给定的正则表达式验证当前字符串是否满足格式要求,满足则返回true,regex为正则表达式需要注意:给定的正则表达式就算不指定边界符(^ $)也是全匹配验证

字符串支持正则表达式方法二:String[] split(Stringregex)将当前字符串中满足正则表达式的部分作分隔符进行拆分返回所有被拆分的部分

字符串支持正则表达式方法: String replaceAll(Stringregex,Stringstr)将当前字符串满足正则表达式的部分替换为给定内容

2、Object类

1、Object是所有类的顶级父类

2、String toString():该方法java希望我们重写时返回一个字符串,这个字符串的原则为:用一个字符串来描述当前对象。Object提供的toString方法返回的字符串为该对象的引用,格式为:类名@地址通常这个格式也成为:对象的句柄没有什么实际价值

3、boolean equals():该方法java希望我们重写时返回一个boolean值,表示两个对象间的内容比较是否一致,Object中重写该方法依旧使用"=="比较,所以当我们在子类中需要比较对象内容时就要重写该方法,重写equals方法应遵循几个规则:1任何对象与null比较都应返回false  2两个对象不属于同一个类时应返回false   3同一个对象equals比较应当恒等为true

4、equals与==区别

"=="是值比较,对于引用类型变量而言,该变量保存的是对象的地址,所以使用"=="比较时,意思为两个变量的地址是否相等,换句话说就是看两个变量引用的是否为同一个对象

equals是内容比较,对于两个引用变量而言,是比较两个变量所引用的对象内容是否相同。

举个例子, 就好像一对双胞胎,他们是两个独立的个体,是两个对象。所以那么用"=="比较是 false。但是因为他们“长得一样”,所以equals方法比较是true。

我们也可以变相的理解为:"=="是判断是否为同一个,而"equals"是判断像不像。

3、包装类

1、包装类

 * 包装类是为了解决基本类型不能直接参与面向对象开发的问题,因为基本类型没有面向对象特性,不能继承Object

* 其中6个数字类型对应的包装类继承自Number

 * Number是一个抽象类,定义了6个数字类型间互转的相关方法

2、基本类型转换为包装类

基本类型转换为包装类的方式:

      * 1、使用构造方法

//Integer i2=new Integer(1);//使用构造方法转换  ==时为false  因为是new

 

      * 2、使用静态方法valueOf(推荐)

     //valueOf对于整数可以重用1字节内的整数对象

     Integeri1=Integer.valueOf(127);

     Integeri2=Integer.valueOf(127);

     System.out.println(i1==i2);//128时为false是因为int超了byte范围 Double类里直接返回的new对象

     System.out.println(i1.equals(i2));//true

3、包装类转换为基本类型

Value():例如intValue()byteValue()

4、特殊:

 数字类型包装类有两个常量(不是方法)

 MAX_VALUE, MIN_VALUE分别保存的值为该包装类对应的基本数据类型的取值范围,例如:Integer.MAX_VALUEDouble.MAX_VALUE

包装类支持一个静态方法  parseXXX(Stringstr)

该方法可以将字符串解析为对应的基本类型,前提是该字符串能正确描述该基本类型可以保存的值,例如:Integer.parseInt(str)Double.parseDouble(str1)

5、自动拆箱和装箱操作

java自1.5发布后,推出了一个新特性:

 * 自动拆装箱

 * 是指编译器在编译源程序时会自动补充代码将基本类型与包装类之间做转换这样可以省去互相转换的代码编写

1、自动拆箱

编译器会自动补全代码,将引用类型转换为基本类型:自动拆箱下面的代码在编译后的class文件中为:

      * int i=newInteger(1).intValue();

     inti=new Integer(1);

//右边为引用类型 左边为基本类型 类型不匹配 5.0版本以前报错 

2、自动装箱

编译器会自动补全代码,将基本类型转换为引用类型:自动装箱

下面的代码在编译后的class文件中为:

   Integer ii=Integer.valueOf(i)

   Integerii=i;//编译器补充.valueOf

     System.out.println(i+1);//2

 

4、Date类

1、Date:

java.util.Date

 * Date内部维护一个long值,该值表示自1970年元旦

 * 到该对象表示的时间点之间所经过的毫秒值

 * 由于Date存在时区,千年虫问题,所以在jdk1.1发布

 * 时大部分操作时间的方法全部被标注为过时方法,不再

 * 建议使用。

 * 现在Date仅用于表示一个具体的时间点。

long getTime()

获取当前Date内部维护的long值

即:1970年元旦到当前对象表示的时间之间所经过的毫秒

 void setTime(long time)

将给定的long值设置到当前Date对象中使其表示这个时间

2、java.text.SimpleDateFormat

该类可以按照一个给定的日期格式字符串将Date与String之间相互转换      SimpleDateFormat sdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");

1Date ->String Stringformat(Date date)

* 将给定的Date按照指定的日期格式转换为字符串

Stringstr=sdf.format(now);

2String ->DateDate parse(String str)

将给定的字符串按照指定的日期格式解析为Date 使其表示该日期       Datedate=sdf.parse(str);

3java.util.Calendar

 * 日历类 是一个抽象类,规定了操作时间的相关方法

 * 常用实现类:阳历历法GregorianCalendar

  1staticCalendar getInstance()

      * 该静态方法会根据系统所在地区获取一个适用的实现类,大部分是阳历类        *并且默认表示当前系统时间

Calendarcalendar=Calendar.getInstance();

2Calendar -> Date

* DategetTime()

* 该方法可以返回一个Date类型实例,该实例表示的日期就是当前Calendar所表示的日期

     Date date=calendar.getTime();

3Date -> Calendar

* voidsetTime(Date date)

* 该方法可以使当前Calendar表示给定的Date所表示的日期

calendar.setTime(date);

 4Calendar提供了一个可以获取指定时间分量所对应的值的方法;

 * int get(int field)

 * 参数为时间分量,无需记住具体取值,通常使用Calendar提供的常量表示。

//获取年

   intyear=calendar.get(Calendar.YEAR);

   //获取月 月从0开始 0表示一月

   intmonth=calendar.get(Calendar.MONTH);

5void set(int filed,int value)

    * 针对给定的时间分量设置指定的值

//设置为当周的周一,一周从周日开始

   calendar.set(Calendar.DAY_OF_WEEK,2);

   System.out.println(calendar.getTime());

6int getActualMaximum(int field)

获取给定时间分量所允许的最大值

days=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

7void add(int filed,int value)

* 对指定时间分量加上给定的值,若给定的值是负数,则是减去

//加上3个月

     calendar.add(Calendar.MONTH,3);

     System.out.println(calendar.getTime());

5、Collection集合

 1、

 

 

 

字符流:

转换流

 

 

例:

FileInputStream fis=new FileInputStream("osw.txt");

InputStreamReader isr=new InputStreamReader(fis,"UTF-8");

例:

FileOutputStreamfos=new

FileOutputStream("osw.txt");

OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");

osw.write("我爱北京天安门");

System.out.println("写出完毕");

 

java.io.PrintWriter

 * 常用的缓冲字符输出流(高级流)

 * 特点是:可以按行写出字符串,并且具有自动行刷新,

 * PrintWriter内部嵌套java.io.BufferedWriter

 * 所以缓冲功能是靠内部的BW实现的

1其中有直接针对文件写操作的构造方法:

 PrintWriter提供了多种构造方法

      * PrintWriter(Stringpath)

      * PrintWriter(File file)

例:

        PrintWriter pw=new PrintWriter("pw.txt","UTF-8");//文件,字符集

     pw.println("锄禾日当午");

     pw.println("清明上河图");//每个字符串有一个换行符,占两个字节(utf-8,gbk)

     pw.println(123456);//写出的是字符串,不是int

2当使用PrintWriter处理其他流的时候,可以指定自动行刷新,

 * 即:每当使用println方法写出内容后,会自动flush

例:

FileOutputStream fos=new FileOutputStream("pw1.txt");

//若需要指定字符集,需要加上转换流OutputStreamWriter,

   //因为PrintWriter没有参数为(流,字符集)的构造方法

     OutputStreamWriterosw=new OutputStreamWriter(fos,"GBK");

* 当创建PrintWriter时第一个参数为流,那么支持传入第二个参数,该参数为boolean值,

      * 表示是否自动行刷新,当为true则自动行刷新

     PrintWriterpw=new PrintWriter(osw,true);//true表示自动行(println)刷新没有close也会写出

* 具备自动行刷新的pw在调用println方法写出一行字符串后会自动flush   *注意:调用print方法不会自动刷新     pw.println("随便吧");

 

java.io.BufferedReader

 * 缓冲字符输入流 特点:使用它可以按行读取字符串

例:

FileInputStream fis=new FileInputStream("src"+File.separator+"day08"+File.separator+"BufferedReader_ReadLine.java");

     InputStreamReaderisr=new InputStreamReader(fis);//转换流

     BufferedReaderbr=new BufferedReader(isr);//只能接收字符流 所以需要转换流转换一下

     /*

      * String readLine()

      * 按行读取字符串

      * 连续读取若干字符,直到遇见换行符为止

      * 然后将换行符之前的内容以一个字符串返回

      * 但是返回的字符串中不含有最后的换行符

      * 当返回值为NULL时,表示读取到末尾了

      */

     Stringline=null;//readLine读取空行时返回的是空字符串 因为空行有一个换行符

     //直到换行符后没有内容时,才返回NULL,表示读到末尾

     while((line=br.readLine())!=null){

        System.out.println(line);

     }

     br.close();

 

 

 

 

 

 

1 0
原创粉丝点击