简介 :
所谓API就是一些已写好、 可供直接调用的类库。Java 具有强大功能的API, 并且还在继续发展中。
首先在网上获取Java 帮助文档 , 然后解压 ,找到相应的API 。
Java 常用包介绍 :
- java.lang 提供利用java编程语言进行程序设计的基础类。
- java until 包含集合框架,遗留的collection类,事件模型,日期和时间设施,国际化和各种实用工具类。
- java io 通过数据流,序列化和文件系统提供系统输入和输出。
- java applet 提供创建applet 所必须的的类和applet 用来和其他applet 上下文通信的类、
- java awt 包含用于创建用户界面和绘制图形图像的所有的类。
- java beans 包含与开发beans 有关的类,即 基于javaBeans 架构的组件。
- java math 提供用于执行任意精度整数算法(BigInteger)和任意精度小数算法(BigDecimal)的类。
- java net 为实现网络应用程序提供的类。
- java sql 提供使用java 编程语言访问并处理存储在数据源(通常指关系型数据库)中的数据API。
String 类:
String 类的初始化操作: java 提供两种初始化String类的方式,
1 利用字符串常量直接初始化一个String对象,比如 String name = "张三" ;
2 采用String的构造方法初始化字符串对象, 比如
方法 | 含义 |
String () | 创建一个内容为空的字符串 |
Stirng (String value) | 根据指定的字符串内容创建对象 |
String (char[] value) | 根据指定的字符数组创建对象 |
举个栗子:
1 public static void main(String[] args){ 2 String s1 =new String();//创建空字符串 3 String s2 = new String("张三")//创建一个内容为张三的字符串 4 char[] charArray = new char[]{'A','B','C'}; 5 String s3 = new String(charArray); 6 System.out.println(s1); 7 System.out.println(s2); 8 System.out.println(s3); 9 10 }
Sring类的常用方法:
字符串基本操作:
1 public static void main(String[] args) { 2 String s ="abcdefhckoj";//声明字符串 3 System.out.println("字符串的长度为:"+s.length());//获取字符串长度, 即字符个数 4 System.out.println("字符串第一个字符:"+s.charAt(0)); 5 System.out.println("字符c第一次出现的位置:"+s.indexOf('c')); 6 System.out.println("字符c最后一次出现的位置:"+s.lastIndexOf('c')); 7 }
字符串与数组的转换:
1 public class Demo{ 2 public static void main(String[] args){ 3 String s = "abcdesgs";//声明一个字符串 4 System.out.println("将此字符串装换为数组"); 5 char [] charArray = s.toCharArray();//字符串转换为字符数组。 6 System.out.println("[); 7 for(int i=0;i,charArray.length;i++){ 8 if(i !=charArray.length-1); 9 Syetem.out.println(charArray[i]+","); 10 //判断是否是数组最后一个元素,如果不是则在后面添逗号码 11 }else{ 12 //否则 数组最后一个元素不加逗号。 13 14 Syetem.out.println(charArray[i]+"]"); 15 } 16 } 17 Syetem.out.println("将Int 类型转换为String 类型:" +String.valueOf(20)); 18 } 19 }
字符串判断操作:
1 public static void main(String[] args) { 2 String str1 = "abcdsg";//声明一个字符串 3 String str2 = "adc"; 4 System.out.println("判断是否以字符串abc开头:"+str1.startsWith("abc")); 6 System.out.println("判断是否以字符串sg结尾:"+str1.endsWith("sg")); 7 System.out.println("判断是否包含字符串ds:"+str2.contains("ds")); 8 System.out.println("判断是否为空:"+str1.isEmpty()); 9 System.out.println("判断两个字符串是否相等"+str1.equals(str2));
字符串的截取和分割
String类对字符串的截取与分割提供了两个方法, 其中, substring()方法用于截取字符串的一部分, split()方法可以将字符串按照某个字符进行分割。
1 package com.project.demo; 2 3 public class Test { 4 public static void main(String[] args) { 5 String string = "张三-李四-王五"; 6 //截取字符串 7 System.out.println("从第4个字符截取到最后:"+string.substring(3)); 8 System.out.println("从第3个字符截取到第6:"+string.substring(2,6)); 9 // 字符串分割 10 System.out.println("分割后的字符串数组元素依次是: "); 11 String[] stringArray =string.split("-");//通过- 字符为标志,将其分割为字符串数组 12 for(int i =0;i<stringArray.length;i++) { 13 if(i != stringArray.length-1 ) { 14 System.out.println(stringArray[i]+","); 15 16 }else { 17 System.out.println(stringArray[i]); 18 System.out.println(string.length()); 19 } 20 21 } 22 23 } 24 }
去空格和替换操作:
package com.project.demo; public class Test { public static void main(String[] args) { String string = " hello word "; //字符串替换操作 System.out.println("将word 替换成java :"+string.replace("word", "java")); //字符串去空操作 System.out.println("去除字符串两端的空格:"+ string.trim()); System.out.println("去除字符串中所有空格: "+string.replace(" ", "")); System.out.println("将小写转换为大写 : " + string.toUpperCase()); } }
有一点需要注意,String 在取某个字符的时候,会用到字符的索引(数组下标索引),当访问字符串中的字符的时候,如果字符的索引不存在,则会发生StringIndexOutOfBoundsException(字符串下标越界异常)
StringBuffer:
为了方便字符串的修改,JDK提供了一个StringBuffer类(也称字符缓冲区)StringBuffer类和String 类最大的区别就是他的长度和内容都是可变的, StringBuffer类似于一个字符串容器,当在其中添加或者删除字符时,并不会产生新的StringBuffer对象。
让我们来看看API 中StringBuffer的常用方法:
面试的时候我们常常会被问到 String,StringBuffer与StringBuilder的区别??
简要的说,String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
如果是使用 StringBuffer 类 每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”); 你会很惊讶的发现,生成 String S1 对象的速度简直太快,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个 String S1 = “This is only a” + “ simple” + “test”; 其实就是: String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。
但这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”; String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做 在大部分情况下 StringBuffer > String StringBuffer Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。 可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。 StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
在大部分情况下 StringBuilder > StringBuffer java.lang.StringBuilde java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。
基本数据类型包装类:
何为包装类?
在java.lang包中有各种原生类相对应的类, 称作数值包装类。 这些类的名称, 大部分均以各原生类类型第一个字母换成大写的方式来命名 。简单的说就是将数据装换为对象,来应用更多的方法。
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Chracter |
float | Float |
double | Double |
包装类和基本数据类型在进行转换时,引入了装箱和拆箱的概念,其中装箱是指将基本数据类型的值转为引用数据类型, 反之, 拆箱是指将引用数据类型的对象转为基本数据类型。
举个栗子:
1 方式一: 通过new关键字 2 Integer in = new Integer(5); 3 方式二: 直接赋值 4 Integer in = 5;
构造函数可将原生数据类型数值或代表数值的字符串转换成一数值包装对象。
如: 在Double类中的构造函数
Double(double value)
Double(String s)
例:Double tax=Double(8332349823.234);
在数值包装类中所定义的方法, 最常用到的就是一些用来做字符串与数值间转换的方法。比如:
static float parseFloat(String s)
static Float valueof(String s)
static String toString(float f)
在使用包装类的时候我们需要注意一些问题.
1、 包装类都重写了Object类中的toString()方法,以字符串的形式返回被包装的基本数据类型的值;
2、 除了Character外, 包装类都有parseXXX(String s)的静态方法,将字符串转换为对应的基本类型的数据。 参数s不能为null, 而且同样必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错;
3、 除了Character外,包装类都有valueOf(String s)方法,可以根据String类型的参数创建包装类对象, 但参数字符串s不能为null,而且字符串必须是可以解析为相应基本类型的数据,否则虽然编译通过, 但运行时也会报错;