1、API文档
1.1 JDK API
- 什么是JDK API
JDK中包含了大量的API类库,所谓API(Application Progrmming Interface,应用程序编程接口)就是一些已经写好,可供直接调用的功能(在java语言中,这些功能以类的形式封装)。
JDK API包含的类库功能强大,经常使用的有 :字符串操作、集合操作、文件操作、输入输出操作、网络操作、多线程等等
2、JDK包结构
为了便于使用和维护,jdk类库按照包结构划分,不同功能的类划分在不同的包中;
经常使用的包如下表所示
包 | 功能 |
java.lang | java程序的基础类,如字符串、多线程等,该包中的类使用的频率非常高,不需要import,可以直接使用 |
java.util | 常用工具类,如集合、随机数产生器、日历、时钟等 |
java.io | 文件操作、输入输出操作 |
java.net | 网络操作 |
java.math | 数学运算相关操作 |
java.security | 安全相关操作 |
java.sql | 数据库访问 |
java.text | 处理文字、日期、数字、信息的格式 |
1.2文档注释规范
1、文档注释
·以/**开始,以*/结束;
·加在类和方法的开头,用于说明作者、时间、版本、要实现的功能的详细描述等信息;
·通过javdoc工具,可以轻松的将注释转换为HTML文档说明;学习者和程序员主要通过文档了解API的功能;
·文档注释不同于普通的注释(//...或/*....*/),普通注释写在程序之中,用于程序员进行代码维护和交流,无法通过工具生成文档,而文档注释写在类和方法的开头,专门用于生成供API使用者进行参考的文档资料。
2、文档注释规范
类注释:写在类前面的注释,在包名之后,类定义开始之前
/**
* the<code>JavaDoc</code> class used to test JAVA DOCUMENT
* @author zhangying 作者
* @see com.danei.pdf03.unit1 参见
* @since jdk1.0 始于jdk1.0
*/
public class JavaDoc {
}
方法注释:如下图
/**
* this is the entrance to the whole programe
*
* @param args
* @return void
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
3、javadoc命令生成文档
·目标HTML文档存储到docDir下,执行以下步骤:
—切换到包含想要生成文档的源文件目录,如果有嵌套的包,则必须切换到包含子目录的目录
—如果是一个包,运行命令:javadoc -d docDir nameOfPackage
—多个包生成文档,运行:javadoc -d docDir nameOfPackage1,nameOfPackage2...
—如果文件在默认包中,运行:javadoc -d docDir *.java
zhangyingdeMacBook-Pro:unit1 zhangying$ javadoc -d docDir *.java
正在加载源文件JavaDoc.java...
正在加载源文件StringTest.java...
正在构造 Javadoc 信息...
正在创建目标目录: "docDir/"
标准 Doclet 版本 1.8.0_151
正在构建所有程序包和类的树...
正在生成docDir/com/danei/pdf03/unit1/JavaDoc.html...
正在生成docDir/com/danei/pdf03/unit1/StringTest.html...
正在生成docDir/com/danei/pdf03/unit1/package-frame.html...
正在生成docDir/com/danei/pdf03/unit1/package-summary.html...
正在生成docDir/com/danei/pdf03/unit1/package-tree.html...
正在生成docDir/constant-values.html...
正在构建所有程序包和类的索引...
正在生成docDir/overview-tree.html...
正在生成docDir/index-all.html...
正在生成docDir/deprecated-list.html...
正在构建所有类的索引...
正在生成docDir/allclasses-frame.html...
正在生成docDir/allclasses-noframe.html...
正在生成docDir/index.html...
正在生成docDir/help-doc.html...
zhangyingdeMacBook-Pro:unit1 zhangying$ ls
2、字符串基本操作
String是不可变对象
2.1 String及常用API
·String是不可变对象
java.lang.String使用了final修饰,不能被继承;
字符串底层封装了字符数组以及对字符数组的操作算法;
字符串一旦创建,对象永远无法改变,但字符串的引用可以重新赋值;
java字符串在内存中采用了Unicode编码方式,任何一个字符对应两个字节的定长编码
2.2String常量池
·java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串
·对于重复出现的字符串直接量,JVM会首先在常量池中查询,如果存在就返回该对象。
//在常量池中创建字符串常量对象:"zhang"
String string1 = "zhang";
System.out.println(string1.toString());
//在常量池中创建字符串常量对象:"wang"
String string2 = "wang";
System.out.println(string2.toString());
//创建String类型的引用变量--》不指向任何对象
String string3 = null;
//由于没有指向任何String类型的对象,此时若操作String对象方法
//则会报出空指针异常
// string3.length();
//创建另一个String类型引用变量指向对象:"zhang"
String string4 = "zhang";
//比较两个对象是否是同一个对象
System.out.println(string1 == string2);
2.3内存编码及长度
·String在内存中使用Unicode编码,每个字符占用两个字节;任何一个字符(无论中文还是英文)都算是一个字符长度,都占用两个字节。
/**
* 获取String对象的长度
*/
public static void testLength() {
String str1 = "Hello";
System.out.println(str1.length());
String str2 = "Hi,你好";
System.out.println(str1.length());
}
2.4使用indexOf实现检索
·indexOf方法用于实现在字符串中检索另外一个字符串
·String提供几个重载的indexOf方法
int indexOf(String str) | 在字符串中检索str,返回其第一次出现的位置,如果找不到则返回-1 |
int indexOf(String str,int fromIndex) | 从字符串的fromIdex索引位置开始检索str字符串 |
·String还定义了lastIndexOf方法
int lastIndexOf(String str, int from) | str在字符串中多次出现时,将返回最后一个出现的位置 |
public static void testIndexOf() {
String string = "I hope you will happy everday";
//获取字符串"hope"第一次出现的位置
int index = string.indexOf("hope");
System.out.println(index);//2
//从索引为6开始检索"p"第一次出现的位置
System.out.println(string.indexOf('p',6));//18
//检索'p'在字符串string中最后一次出现的位置
System.out.println(string.lastIndexOf('p'));
//从索引19处检索‘p’最后一次出现的位置
//注意在lastIndexOf中fromIndex指的是倒着检索的开始index
System.out.println(string.lastIndexOf('p', 4));//4
}
2.5使用subString获取子串
·subString方法用于返回一个字符串的子字符串。
·subString常用重载方法如下
String subString(int beginIndex, int endIndex) | 返回字符串中从下标beginIndex(包括)开始到endIndex(不包括)结束的字符串 |
String subString(int beginIndex) | 返回字符串中从下标beginIndex(包括)开始到字符串结尾的子字符串 |
public static void testSubString() {
String string = "I hope you will happy everday";
System.out.println(string.substring(2));//hope you will happy everday
System.out.println(string.substring(0,3));//I h
}
2.6trim
public static void testTrim() {
String string = " d f k ";//前后各三个空字符
System.out.println(string.length());//11
//去掉前后空格后
System.out.println(string.trim().length());//5
}
2.7 charAt
·String中定义有charAt()方法:
char charAt(int index) | 方法charAt()用于返回字符串指定位置的字符,参数index表示指定的位置 |
public static void testCharAt() {
String name = "whatisjava?";
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
System.out.print(c+" ");//w h a t i s j a v a ?
}
2.8startsWith和endsWith
/**
* 检测一个字符串是否以指定字符串开头或结尾
*/
public static void testStartWithAndEndWith() {
String str = "Thinking in java";
System.out.println(str.startsWith("Thin"));
System.out.println(str.endsWith("java"));
System.out.println(str.startsWith("thing"));
}
2.9 大小写变换
/**
* 转换字符串中英文字母的大小写形式
*/
public static void testToUpperCaseAndToLowerCase() {
String string ="我喜欢java";
String upperString = string.toUpperCase();
System.out.println(upperString);
String lowerString = string.toLowerCase();
System.out.println(lowerString);
}
2.10 valueOf
/**
* valueOf将其他类型转换为String类型
*/
public static void testValueOf() {
double d = 3.1415926;
int i = 5;
byte b = 2;
short s =3;
char c = 'c';
float f = 23.0f;
char[] ch = {'1','2'};
System.out.println(String.valueOf(d));
System.out.println(String.valueOf(i));
System.out.println(String.valueOf(b));
System.out.println(String.valueOf(s));
System.out.println(String.valueOf(c));
System.out.println(String.valueOf(f));
System.out.println(String.valueOf(ch));
}
3、StringBuilder及API
3.1StringBuilder封装可变字符串
·StringBuilder封装可变的字符串,对象创建后可以通过调用方法改变其封装的字符序列
·StringBuilder常用的构造方法:
public StringBulider()
public StringBuilder(str);
public static void main(String[] args) {
// TODO Auto-generated method stub
// 调用无参构造函数初始化StringBuilder对象
StringBuilder sBuilder = new StringBuilder();
System.out.println(sBuilder.length());
System.out.println(sBuilder.capacity());// 默认初始容量为16
//使用有参构造函数初始化StringBuider对象
String string = "123456";
StringBuilder sBuilder2 = new StringBuilder(string);
System.out.println(sBuilder2.length());//长度就为字符串的长度
System.out.println(sBuilder2.capacity());//容量为16+字符串的长度
}
·StringBuilder常用方法:
/**
* 测试StringBulider常用方法:insert
*/
@Test
public void testInsert() {
String string = "hello";
StringBuilder sBuilder =new StringBuilder(string);
String actualValue = sBuilder.insert(5, "zhang").toString();
String expectedValue = "hellozhang";
//断言实际值与预期值是否相等
Assert.assertEquals(actualValue, expectedValue);
String string2 = null;
String string3 =new String();
System.out.println(string2);//null
System.out.println(string3);//空字符串
//插入string2,实际插入null
System.out.println(sBuilder.insert(sBuilder.length(), string2));//hellozhangnull
//插入string3,实际插入为空字符串
System.out.println(sBuilder.insert(sBuilder.length(), string3));//hellozhangnull
}
/**
* 测试StringBulider常用方法:append
*/
@Test
public void testAppend() {
String string = "hello";
StringBuilder sBuilder =new StringBuilder();
String actualValue = sBuilder.append(string).toString();
String expectedValue = "hello";
Assert.assertEquals(actualValue, expectedValue);
}
/**
* 测试StringBulider常用方法:delete
*
*/
@Test
public void testDelete() {
StringBuilder sBuilder = new StringBuilder("welcome come to china,zhang");
//删除从fromindex(包括)到endindex(不包括)的字符串
System.out.println(sBuilder.delete(22, sBuilder.length()));//welcome come to china,
//删除某个字符
System.out.println(sBuilder.deleteCharAt(21));//welcome come to china
}
3.2StringBuilder总结
- StringBuilder是可变字符串,字符串的内容计算,建议使用StringBuilder,这样性能会好一些
- java字符串的连接过程是使用StringBuilder实现的
- StringBuilder和StringBuffer
-- StringBuffer是线程安全的,同步处理,性能稍微慢
-- StringBuilder是非线程安全的,并发处理的,性能稍快