黑马程序员技术交流社区

标题: Java常用类(API) [打印本页]

作者: liufeng2436_01    时间: 2016-4-27 12:41
标题: Java常用类(API)
Java常用类(API)     刘路遥  【知识点】  理解Java API的概念,了解Object类,基本类型的封装类,熟悉String类和StringBuffer类,Hashtable与Properties类,System类与Runtime类,Date类、Calendar类、Math类、BigInteger类,Math与Random类。 提示:查阅JDK API 【内容】  一、Object类  类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。。  Object类的常用方法:equals()、getClass()、hashCode()、notify()、notifyAll()、toString()、wait();  当用户自定义类时,要覆盖从父类Object继承过来的toString()方法,否则将得不到用户可理解的运行结果。   二、基本类型的封装类  1、基本类型  Java基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型。它们是我们编程中使用最频繁的类型。  基本类型共有九种,它们分别都有相对应的包装类。对于基本类型void以及它的包装类java.lang.Void,我们都无法直接进行操作。基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了       基本类型存储在栈中,因此它们的存取速度要快于存储在堆中的对应包装类的实例对象。从Java5.0(1.5)开始,JAVA虚拟机(Java Virtual Machine)可以完成基本类型和它们对应包装类之间的自动转换。因此我们在赋值、参数传递以及数学运算的时候像使用基本类型一样使用它们的包装类,但这并不意味着你可以通过基本类型调用它们的包装类才具有的方法。另外,所有基本类型(包括void)的包装类都使用了final修饰,因此我们无法继承它们扩展新的类,也无法重写它们的任何方法。  下图显示了几种基本类型之间的默认逻辑转换关系:  


             图中的实线表示无精度损失的转换,而虚线则表示这样的转换可能会损失一定的精度。如果我们想把一个能表示更大范围或者更高精度的类型,转换为一个范围更小或者精度更低的类型时,就需要使用强制类型转换(Cast)了。不过我们要尽量避免这种用法,因为它常常引发错误。   

运算符对基本类型的影响 :  当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:  只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。  当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:  运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。   2、封装类(包装类)  (1)Java中的包装类、装箱和拆箱  在Java中,数据类型总共可分为两大种,基本数据类型(值类型)和类类型(引用数据类型)。基本类型的数据不是对象,不能作为对象调用其toString()、hashCode()、getClass()、equals()
等等方法。所以在java中,针对8种基本数据类型,提供了针对每个基本数据类型的包装类。如下:  INDEX 基本数据类型 包装类 1 int Integer 2 char Character 3 float Float 4 double Double 5 byte Byte 6 short Short 7 long Long 8 boolean Boolean  所谓装箱,就是把基本类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int型包装成Integer类的对象,或者把double包装成Double,等等。 所谓拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。  //JDK1.5 之前使用手动方式进行装箱 和拆箱的 操作 public class IntegerDemo {  public static void main (String []agrs)  {   int i=10;   Integer j=new Integer(i); //手动装箱操作                int i1=j.intValue();//手动拆箱操作   System.out.println(i1*i1);  }  }; //output:100   //JDK1.5之后可自动进行的装箱和拆箱的操作,比较方便 public class IntegerDemo02 {  public static void main (String []agrs)  {   int i=10   Integer j=i;   int k=j;   System.out.println(++k);  }  }; //output:11  

包装类的另外一个比较有用的是可以将String 字符串类型转换为相应的基本数据类型。下面以将String转为int为例:  public class IntegerDemo04 {  public static void main (String[] args)  {   String str="1500";   try   {    int i=Integer.parseInt(str);    System.out.println(++i);   }   catch (Exception e)   {    e.printStackTrace(); //打印异常信息   }  }  };// output: 1501   如果在上述方法中str="15er00";则在调用parseInt方法时候会产生NumberFormatException异常,  总结在包装类中将String转换为包装类所对应的基本数据类型的方法如下,所有的方法都将抛出NumberFormatException异常,需要在调用时候使用try ..catch 进行捕获
   index 包装类 返回的基本数据类型 方法名 1 Integer int static int Integer.parseInt(Sting s) 2 Character char static char Character.parseChar(String s) 3 Float float static float Float.parseFloat(String s) 4 Dobule double static double Double.parseDouble(String s) 5 Byte byte static byte Byte.parseByte(String s) 6 Short short static short Short.parseShort(String s) 7 Long long static long Long.parseLong(String s) 8 Boolean boolean static boolean Boolean.parseBoolean(String s)    类似的一个方法为 parseXXX(String s,int radix),对于Integer包装类,这个radix表示进制. parseInt(String s)默认为十进制。 其他包装类的radix参数意义,请参见API文档 可以自动装包,也可以自动解包。 三、String和StringBuffer  java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。  可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。 StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。 例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。  通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。  只要发生有关源序列(如在源序列中追加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源上实现同步。每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序
作者: 349153256    时间: 2016-4-27 12:44
图呢???




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2