38.常用类

来源:互联网 发布:陈炳勇力量数据 编辑:程序博客网 时间:2024/06/15 20:55

1.String

(1)String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法

(2)String类其实是通过char数组来保存字符串的。

(3)2.使用String的时候应该注意的问题:尽量不要做字符串频繁凭借操作。 因为字符串一旦创建不可改变,只要频繁拼接,就会在字符串常量池中创建大量的字符串对象,给垃圾回收带来问题

(4)常用方法

public class HelloWorld {        public static void main(String[] args) {          String s1 = "   gyc,abc  ";          char c1 = s1.charAt(2);//返回字符串指定字符          System.out.println(s1.endsWith("c"));//判断字符串是否以某个字符串(或字符)结尾          System.out.println(s1.equalsIgnoreCase("GYC"));//判断字符串是否相等,忽略大小写          System.out.println(s1.indexOf("c"));//判断子字符串在字符串中第一次出现处的索引          System.out.println(s1.indexOf("c", 3));//判断子字符串在字符串中第一次出现处的索引,从指定索引开始          System.out.println(s1.lastIndexOf("c"));//判断子字符串在字符串中最后一次出现处的索引          System.out.println(s1.length());//数组中是length属性,String是length()方法          String[] s2 = s1.split(",");          for(int i = 0; i<s2.length;i++)              System.out.println(s2[i]);//以逗号分割字符串,并将字符串数组输出          System.out.println(s1.startsWith("g")); //判断是否以某个字符串开始          System.out.println(s1.substring(2,6));//返回一个新字符串,它是此字符串的一个子字符串          char[] c2 = s1.toCharArray();          for(int i =0; i<s1.length();i++)              System.out.print(c2[i]+" ");//字符串转化成char数组          System.out.println(s1.toUpperCase());//转大写          System.out.println转小(s1.toLowerCase());//写  
        System.out.println(s1.trim());//返回字符串的副本,忽略前导空白和尾部空白          Object o = null;          System.out.println((String.valueOf(o)));//等同于   System.out.println(o),不会出现空指针异常,因为String.valueOf(o)这个方法对空值进行处理了          //System.out.println(o.toString());//  会出现空指针异常      }  }  

2.StringBuffer Stringbuilder

(1)  StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。

(2)     所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。

(3)    对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。

     StringBuffer是线程安全的,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就     要稍微慢一些。

(4)工作原理:预先在内存中申请一块空间,以容纳字符序列, 如果预留空间不够多,则进行自动扩容,以容纳更多字符序列

(5)Stringbuffer和Stringbuilder区别

StringBuffer是线程安全的(可以在多线程环境下使用不会出现问题)
StringBuilder是非线程安全的(在多线程环境下使用可能出现问题)

package test2;public class Outer  {      public static void main(String[] args){      StringBuffer sb = new StringBuffer("this is a stringbuffer");    System.out.println(sb.insert(4, "a" ));//插入 thisa is a stringbuffer    System.out.println(sb.insert(4, new char[] {'a','b','c'}));//thisabca is a stringbuffer    System.out.println(sb.insert(2, 3 ));//th3isabca is a stringbuffer        System.out.println(sb.replace(27, sb.length(), "hahahah"));//代替 th3isabca is a stringbufferhahahah    System.out.println(sb.append(" really?"));//追加 System.out.println(sb.insert(2, 3 ));    System.out.println(sb.delete(0, sb.length()-1));//删除 ?     }}  

3.Scanner类

(1)当通过Scanner scan = new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的nextLine()方法即可。

package test2;import java.util.Scanner;public class Outer  {      public static void main(String[] args){      Scanner s = new Scanner(System.in);    System.out.println("请输入:");    while(true) {    String line = s.nextLine();    if(line.equals("q"))break;    System.out.println(">>>"+line);        }    }}  


(2)Scanner默认使用空格作为分割符来分隔文本,但允许你指定新的分隔符

package test2;import java.util.Scanner;public class Outer  {      public static void main(String[] args){      Scanner s = new Scanner("asdas,as sad,sd s");    s.useDelimiter(",");//以逗号作为分隔符    while(s.hasNext()) {    System.out.println(s.next());    }            }}  

(3)实用方法

delimiter() 
          返回此 Scanner 当前正在用于匹配分隔符的 Pattern。
hasNext() 
          判断扫描器中当前扫描位置后是否还存在下一段。
hasNextLine() 
          如果在此扫描器的输入中存在另一行
next() 
          查找并返回来自此扫描器的下一个完整标记。(按标记进行输出)
nextLine() 
          此扫描器执行当前行,并返回跳过的输入信息。( 一行一行输出)


4.System类

(一)System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。 由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。

 (二)成员变量
System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。

(三)成员方法

(1)arraycopy()方法:复制数组

(2)currentTimeMillis()方法:当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。

   (3)exit():该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。

   (4)gc()方法:该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。

     (5)getProperty()方法:该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示。

属性名

属性说明

java.version

Java 运行时环境版本

java.home

Java 安装目录

os.name

操作系统的名称

os.version

操作系统的版本

user.name

用户的账户名称

user.home

用户的主目录

user.dir

用户的当前工作目录


package test2;import java.util.Scanner;public class Outer  {      public static void main(String[] args){     int[] a = {1,2,3,4};    int[] b = new int[5];    System.arraycopy(a,0,b,0,3);//从a的第0个,b的第0个,拷贝3个    for(int i:b) {    System.out.println(i);    }        System.out.println(System.currentTimeMillis());//毫秒数    Scanner s = new Scanner(System.in);    System.gc();    //System.exit(0);    System.out.println(System.getProperty("java.version"));            }        }


5.Runtime类

  Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
      一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。
      一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。 
      当Applet和其他不被信任的代码调用任何Runtime方法时,常常会引起SecurityException异常。

package test2;public class Outer  {      public static void main(String[] args){     Runtime rt = Runtime.getRuntime();//不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。    System.out.println("处理器数量:"+rt.availableProcessors());    System.out.println("JVM总内存:"+rt.totalMemory());    System.out.println("Jvm空闲内存数: "+ rt.freeMemory()+" byte");    System.out.println("Jvm可用最大内存数: "+ rt.maxMemory()+" byte");        }       } 


6.Object类

(1)java.lang.Object
  java.lang包在使用的时候无需显示导入,编译时由编译器自动导入。
  Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。
  Object类是Java中唯一没有父类的类。
  其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。

(2)Object类有12个成员方法,按照用途可以分为以下几种 
1,构造函数 
2,hashCode和equale函数用来判断对象是否相同, 
3,wait(),wait(long),wait(long,int),notify(),notifyAll() 
4,toString()和getClass, 
5,clone() 
6,finalize()用于在垃圾回收

(3)clone()函数:另存一个当前存在的对象。

深克隆与浅克隆的区别就是,浅克隆不会克隆原对象中的引用类型,仅仅拷贝了引用类型的指向。深克隆则拷贝了所有。也就是说深克隆能够做到原对象和新对象之间完全没有影响。

(4)hashCode()和equale()

关于Object类 中的equals方法
通过查源代码:public boolean equals(Object obj) {
        return (this == obj);
        }
this:o1  obj:o2   两个引用的内存地址不同,返回值为false
  设计目的:判断两个对象是否一样

public class test  {      public static void main(String[] args)      {      //创建一个Object类型的对象      Object o1 = new Object();      Object o2 = new Object();      boolean b1 = o1.equals(o2);      System.out.println(b1);//false        Star s1 = new Star(100, "gyc");      Star s2 = new Star(100, "gyc");      System.out.println(s1.equals(s2));//第一次false,重写后true      }  }  class Star  {      int id;      String name;        public Star(int id, String name)          {          this.id = id;          this.name = name;          }        //Object中的equals方法中比较的是内存地址,在现实业务逻辑中,不应该比较内存地址,应该比较内容      //所以Object中的equals方法也要重写      //如果身份证号和名字一致,则为true      public boolean equals(Object obj)      {          if (this == obj)return true;                    if(obj instanceof Star){          Star s = (Star)obj;          if (s.id == id && s.name.equals(name)){              return true;          }          }          return false;        }  }  

(5)Tostring()方法

关于Object类 中的tostring方法
    SUN在Object类中设计toString方法的目的:返回Java对象的字符串表示形式

print方法后括号内如果是引用数据类型,默认调用引用类型的toString方法
    在现实开发过程中,Object里边的toString方法已经不够用

    因为Object的toString方法实现的结果不满意

package test2;public class Outer {public static void main(String[] args) {Person p1 = new Person("张三",18);Person p2 = new Person("张三",18);System.out.println(p1.equals(p2));}}class Person{public Person() {}int age;String name;public Person(String name,int age) {this.name = name;this.age = age;}public boolean equals(Object obj) {if(this == obj)return true;if(obj instanceof Person) {Person s = (Person)obj;if(s.age == age && s.name.equals(name)) {//String已经重写了equals方法,也是比较的内容return true;}}return false;}
(6)finalize()方法

3.关于Object类 中的finallize方法
finalize方法什么时候调用?
1.finalize方法每个对象都有
2.finalize方法不需要程序员去调用,由系统自动调用
3.Java对象如果没有更多的引用指向它,则该Java对象成为垃圾数据,等待垃圾回收器的回收,垃圾回收期在回收这个Java对象之前会自动调用该对象的finalize方法

public class test  {      public static void main(String[] args){      Person p1 = new Person();      p1 = null;//没有引用再指向它,等待回收      //程序员只能建议垃圾回收器回收垃圾      System.gc();      }    }  class Person  {      //重写object中的finalize方法         public void finalize() throws Throwable {          System.out.println(this + "马上就要被回收了");         }  }  


7.math类

public class MathDemo {        public static void main(String args[]){            /**           * abs求绝对值           */            System.out.println(Math.abs(-10.4));    //10.4            System.out.println(Math.abs(10.1));     //10.1                        /**           * ceil天花板的意思,就是返回大的值,注意一些特殊值           */            System.out.println(Math.ceil(-10.1));   //-10.0            System.out.println(Math.ceil(10.7));    //11.0            System.out.println(Math.ceil(-0.7));    //-0.0            System.out.println(Math.ceil(0.0));     //0.0            System.out.println(Math.ceil(-0.0));    //-0.0                        /**           * floor地板的意思,就是返回小的值           */            System.out.println(Math.floor(-10.1));  //-11.0            System.out.println(Math.floor(10.7));   //10.0            System.out.println(Math.floor(-0.7));   //-1.0            System.out.println(Math.floor(0.0));    //0.0            System.out.println(Math.floor(-0.0));   //-0.0                        /**           * max 两个中返回大的值,min和它相反,就不举例了           */            System.out.println(Math.max(-10.1, -10));   //-10.0            System.out.println(Math.max(10.7, 10));     //10.7            System.out.println(Math.max(0.0, -0.0));    //0.0                        /**           * random 取得一个大于或者等于0.0小于不等于1.0的随机数           */            System.out.println(Math.random());  //0.08417657924317234            System.out.println(Math.random());  //0.43527904004403717                        /**           * rint 四舍五入,返回double值           * 注意.5的时候会取偶数           */            System.out.println(Math.rint(10.1));    //10.0            System.out.println(Math.rint(10.7));    //11.0            System.out.println(Math.rint(11.5));    //12.0            System.out.println(Math.rint(10.5));    //10.0            System.out.println(Math.rint(10.51));   //11.0            System.out.println(Math.rint(-10.5));   //-10.0            System.out.println(Math.rint(-11.5));   //-12.0            System.out.println(Math.rint(-10.51));  //-11.0            System.out.println(Math.rint(-10.6));   //-11.0            System.out.println(Math.rint(-10.2));   //-10.0                        /**           * round 四舍五入,float时返回int值,double时返回long值           */            System.out.println(Math.round(10.1));   //10            System.out.println(Math.round(10.7));   //11            System.out.println(Math.round(10.5));   //11            System.out.println(Math.round(10.51));  //11            System.out.println(Math.round(-10.5));  //-10            System.out.println(Math.round(-10.51)); //-11            System.out.println(Math.round(-10.6));  //-11            System.out.println(Math.round(-10.2));  //-10        }    }   

8.除了上面math类中的random,java.util.random类提供了更强大的功能

下面Random()的两种构造方法:
     Random():创建一个新的随机数生成器。
     Random(long seed):使用单个 long 种子创建一个新的随机数生成器。

package test2;import java.util.Random;public class Outer {public static void main(String[] args) {Random r = new Random(25);for (int j =0;j<10;j++) {int i = r.nextInt(100);System.out.println(i);}}}


9.Bigdecimal类

10.Date和Calendar类

(1)在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。

(2)Calender类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance()方法创建即可。

package test2;import java.util.Date;  import java.text.SimpleDateFormat;  import java.util.Calendar;  /*    */  public class Outer {            public static void main(String[] args) throws Exception{          //获取自1970年1月1日 0时0分0秒0毫秒到当前毫秒数 1000毫秒 = 1秒          long now = System.currentTimeMillis();          //获取系统当前时间          Date nowTime = new Date();//Sun Sep 03 11:32:23 CST 2017                                  //以上程序说明java.util.Date;已经重写了Object中的toString方法          //以上日期格式不太容易理解,引入 “格式化日期”java.util.Date-->String          SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS");          //Date-->String          String strTime = sdf.format(nowTime);          System.out.println(strTime);//2017年09月03日 11:55:45 274          //String-->Date          String strTime1 = "2008年08月08日 08:08:08 888";          Date t =sdf.parse(strTime1);          System.out.println(t);//Fri Aug 08 08:08:08 CST 2008                   //获取系统当前日历          Calendar c = Calendar.getInstance();                    //获取当前日历星期几(1代表星期日)          int i = c.get(Calendar.DAY_OF_WEEK);        //月        int m = c.get(Calendar.DAY_OF_MONTH);        //获取2008年8月8日日历        String strTime3 = "2008,08,08";        Date d = new SimpleDateFormat("yyyy,MM,dd").parse(strTime3);        //该日历就是2008年8月8日的日历        c.setTime(d);//setTime(Date date)  使用给定的 Date 设置此 Calendar 的时间。        //获取星期几        System.out.println(c.get(Calendar.DAY_OF_WEEK));    }  }  




原创粉丝点击