黑马程序员——Java编程语言学习总结 – API(上)
来源:互联网 发布:运筹学软件 编辑:程序博客网 时间:2024/04/29 23:24
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
API概述
应用程序编程接口(ApplicationProgramming Interface)
编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一定会提供一些用于控制机器人的Java类,这些类中定义好了操作机器人各种动作的方法。其实,这些Java类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为Xxx Robot API。本章涉及的Java API指的就是JDK中提供的各种功能的Java类。
API 常用类
Object类/Scanner类
String类/StringBuffer类/StringBuilder类
数组高级和Arrays类
基本类型包装类(Integer,Character)
正则表达式(Pattern,Matcher)
Math类/Random类/System类
BigInteger类/BigDecimal类
Date类/DateFormat类/Calendar类
(一) Object 类的
1. Object常用的两个方法:
public boolean equals(Object obj):
默认就是比较对象是否相等,比较的是地址值。
而一般来说,同一个类的不同对象的地址值肯定是不相同的,所以Object的equals()方法默认操作是没有意义的,所以建议Object的所有子类重写Object的equals方法,根据自己的需求设置比较的内容。例如:
public boolean equals(Object obj){
if (this == obj){
returntrue;}
if(!(obj instanceof Student)){
returnfalse;}
Studentother = (Student) obj;
returnthis.age==other.age&&this.name.equals(other.name);
}
public string toString()
返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + '@' + Integer.toHexString(hashCode())
建议所有子类都重写此方法。例如://有一个学生类,有name和age两属性,重写toString()
public String toString() {
return"Student [name=" + name + ", age=" + age + "]";
}
2. Object类其他方法
A:hashCode() 返回对象的哈希值。不是实际地址值,可以理解为地址值。
B:getClass() 返回对象的字节码文件对象,反射中我们会详细讲解
C:protected void finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回收,但是什么时候回收不确定。
D:protected Object clone():创建并返回此对象的一个副本。
Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。
3. ==和equals()的区别?
==:
基本类型:比较的就是值是否相同
引用类型:比较的就是地址值是否相同
equals:
引用类型:默认情况下,比较的是地址值。
不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同
String类的equals方法源码解析:
Strings1 = new String("hello");
Strings2 = new String("hello");
s1.equals(s2); -- true
publicboolean equals(Object anObject) {
//this -- s1
//anObject-- s2
if (this == anObject) {
return true;
}
//如果s2是String类的对象,就进去。
if (anObject instanceof String) {
//对anObject向下转型
String anotherString = (String) anObject;
//value在String中的定义
//private final char[] value
//字符串 -- 底层字符数组。
int n = value.length; //s1长度5
//value.length -- this.value.length -- s1.toCharArray().length
//把s1字符串转变成了一个字符数组
//char[] value = s1.toCharArray();
//char[] value = {'h','e','l','l','o'};
//把字符串s2也转变成了字符数组,然后获取长度,和n进行比较
//如果长度相等就进去。
//char[] value2 ={'h','e','l','l','o'};
if (n ==anotherString.value.length) {
//如果长度相同,就进来继续比较。
char v1[] = value;//{'h','e','l','l','o'};
char v2[] =anotherString.value; //{'h','e','l','l','o'};
int i = 0;
//n=5;是字符串的长度
while (n-- != 0) {
//n=4,
//依次按索引位置比较每一个字符是否相同,如果不同,就返回false.
//如果每个索引对应的值都相同,那么整个字符串是相同的。
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
(二) String类
字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。
通过查看API,我们可以知道
A:字符串字面值"abc"也可以看成是一个字符串对象。
B:字符串是常量,一旦被赋值,就不能被改变。
1. 构造方法:
publicString():空构造
public String(byte[] bytes):把字节数组转成字符串
public String(byte[] bytes,intindex,int length):把字节数组的一部分转成字符串
publicString(char[] value):把字符数组转成字符串
public String(char[] value,intindex,int count):把字符数组的一部分转成字符串
public String(String original):把字符串常量值转成字符串
4. String类的判断功能:
boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
boolean contains(String str):判断大字符串中是否包含小字符串
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
booleanendsWith(String str):判断字符串是否以某个指定的字符串结尾
boolean isEmpty():判断字符串是否为空。
注意:
字符串内容为空和字符串对象为空。
Strings = "";
Strings = null;(会报空指针异常!)
5. String类的获取功能
int length():获取字符串的长度。
char charAt(int index):获取指定索引位置的字符
int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
为什么这里是int类型,而不是char类型?
原因是:'a'和97其实都可以代表'a'
int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
Stringsubstring(int start):从指定位置开始截取字符串,默认到末尾。
String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。
例1 : 遍历字符串获取每一个字符:
public class StringTest {
publicstatic void main(String[] args) {
//定义字符串
Strings = "helloworld";
for(int x = 0; x < s.length(); x++) {
//char ch = s.charAt(x);
//System.out.println(ch);
//仅仅是输出,我就直接输出了
System.out.println(s.charAt(x));
}
}
}
例2 设计一个方法,用于获取一个字符串中指定子串出现的次数。
比如说“hanbasdnbafllgnbahjnbakqqqqlnbaxi”中有几个nba?
实现代码1:
public class StringTest5 {
publicstatic void main(String[] args) {
StringmaxString= " hanbasdnbafllgnbahjnbakqqqqlnbaxi ";
StringminString = "nba";
intcount = getCount(maxString, minString);
System.out.println("Java在大串中出现了:" + count + "次");
}
publicstatic int getCount(String maxString, String minString) {
intcount = 0;
intindex;
while((index=maxString.indexOf(minString))!=-1){
count++;
maxString= maxString.substring(index + minString.length());
}
returncount;
}
}
实现代码2:public class StringTest5 {
publicstatic void main(String[] args) {
String str = " hanbasdnbafllgnbahjnbakqqqqlnbaxi";
Stringstr1 = str+"5";//所+字符串为非截取的小字符串(”nba”)
String[]s = str1.split("nba");
System.out.println(s.length-1);
}
}
6. String的转换功能:
byte[] getBytes():把字符串转换为字节数组。
char[] toCharArray():把字符串转换为字符数组。
static String valueOf(char[] chs):把字符数组转成字符串。
static String valueOf(int i):把int类型的数据转成字符串。
注意:String类的valueOf方法可以把任意类型的数据转成字符串。
String toLowerCase():把字符串转成小写。
String toUpperCase():把字符串转成大写。
String concat(String str):把字符串拼接。
例子:
需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
举例:
helloWORLD
结果:
Helloworld
代码实现:
String s =” helloWORLD”;
String result = s.substring(0,1).toUpperCase()
.concat(s.substring(1).toLowerCase());
System.out.println(result);
7. String类的其他功能:
替换功能:
String replace(char old,char new)
Stringreplace(String old,String new)
去除字符串两空格
String trim()
按字典顺序比较两个字符串
int compareTo(String str)
int compareToIgnoreCase(String str)
8. String类的compareTo方法源码解析:
private final char value[];
字符串会自动转换为一个字符数组。
public int compareTo(String anotherString) {
//this -- s1 -- "hello"
//anotherString -- s2 --"hel"
int len1 = value.length; //this.value.length--s1.toCharArray().length--5
int len2 = anotherString.value.length;//s2.value.length --s2.toCharArray().length--3
int lim = Math.min(len1, len2); //Math.min(5,3); -- lim=3;
char v1[] = value; //s1.toCharArray()
char v2[] = anotherString.value;
//char v1[] = {'h','e','l','l','o'};
//char v2[] = {'h','e','l'};
int k = 0;
while (k < lim) {
char c1 = v1[k]; //c1='h','e','l'
char c2 = v2[k]; //c2='h','e','l'
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2; //5-3=2;
}
String s1 = "hello";
String s2 = "hel";
System.out.println(s1.compareTo(s2)); // 2
(三) Scanner类
用于接收键盘录入数据。
1. 静态的字段:
publicstatic final InputStream in; 标准的输入流,对应着键盘录入。
InputStream is = System.in;
2. 基本格式:
publicboolean hasNextXxx():判断是否是某种类型的元素
publicXxx nextXxx():获取该元素
3. 常用的两个方法:
publicint nextInt():获取一个int类型的值
publicString nextLine():获取一个String类型的值
出现问题了:
先获取一个数值,在获取一个字符串,会出现问题。
主要原因:就是那个换行符号的问题。
如何解决呢?
A:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。
B:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。
(四) StringBuffer类:
StringBuffer线程安全的可变字符串。
1. StringBuffer和String的区别?
前者长度和内容可变,后者不可变。
如果使用前者做字符串的拼接,不会浪费太多的资源。
2. StringBuffer的构造方法:
publicStringBuffer():无参构造方法
public StringBuffer(int capacity):指定容量的字符串缓冲区对象
public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
3. StringBuffer的方法:
public int capacity():返回当前容量。 理论值
public int length():返回长度(字符数)。 实际值
4. StringBuffer的添加功能:
public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,Stringstr):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
5. StringBuffer的删除功能
public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
6. StringBuffer的替换功能:
public StringBuffer replace(int start,intend,String str):从start开始到end用str替换
7. StringBuffer的反转功能:
public StringBuffer reverse()
StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了
public String substring(int start)
public String substring(int start,int end)
8. String和StringBuffer的相互转换?
// String -- StringBuffer
Strings = "hello";
// 方式1:通过构造方法
StringBuffersb = new StringBuffer(s);
//方式2:通过append()方法
StringBuffersb2 = new StringBuffer();
sb2.append(s);
// StringBuffer -- String
StringBufferbuffer = new StringBuffer("java");
//String(StringBuffer buffer)
//方式1:通过构造方法
Stringstr = new String(buffer);
//方式2:通过toString()方法
Stringstr2 = buffer.toString();
9. String,StringBuffer,StringBuilder的区别?
A:String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。
B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
10. StringBuffer和数组的区别?
二者都可以看出是一个容器,装其他的数据。
但是呢,StringBuffer的数据最终是一个字符串数据。
而数组可以放置多种数据,但必须是同一种数据类型的。
3:形式参数问题
String作为参数传递
StringBuffer作为参数传递
形式参数:
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响实际参数
注意:
String作为参数传递,效果和基本类型作为参数传递是一样的。
(五) Arrays类
1. Arrays的常用方法:
public static String toString(int[] a)
public static void sort(int[] a) 底层是快速排序
public static int binarySearch(int[] a,intkey)
开发原则:
只要是对象,我们就要判断该对象是否为null。
2. Arrays类方法应用举例:
int[] arr = { 24, 69, 80, 57, 13 };
System.out.println("排序前:" + Arrays.toString(arr));
public static String toString(int[] a) {
//a-- arr -- { 24, 69, 80, 57, 13 }
if (a == null)
return "null"; //说明数组对象不存在
int iMax = a.length - 1; //iMax=4;
if (iMax == -1)
return "[]"; //说明数组存在,但是没有元素。
StringBuilder b = new StringBuilder();
b.append('['); //"["
for (int i = 0; ; i++) {
b.append(a[i]); //"[24, 69, 80, 57, 13"
if (i == iMax)
//"[24, 69, 80, 57,13]"
return b.append(']').toString();
b.append(", "); //"[24, 69, 80, 57, "
}
}
-----------------------------------------------------
int[] arr = {13, 24, 57, 69, 80};
System.out.println("binarySearch:"+ Arrays.binarySearch(arr, 577));
public static int binarySearch(int[] a, intkey) {
//a-- arr -- {13, 24, 57, 69, 80}
//key-- 577
return binarySearch0(a, 0, a.length, key);
}
private static int binarySearch0(int[] a,int fromIndex, int toIndex,
int key) {
//a -- arr -- {13, 24, 57, 69,80}
//fromIndex -- 0
//toIndex -- 5
//key -- 577
int low = fromIndex; //low=0
int high = toIndex - 1; //high=4
while (low <= high) {
int mid = (low + high) >>> 1; //mid=2,mid=3,mid=4
int midVal = a[mid]; //midVal=57,midVal=69,midVal=80
if (midVal < key)
low = mid + 1; //low=3,low=4,low=5
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key notfound.
}
(六) Character 类
在对象中包装一个基本类型char 的值
此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然
1. 构造方法:
Character(char value)
2. 成员方法
public static boolean isUpperCase(char ch):判断给定的字符是否是大写字符
public static boolean isLowerCase(char ch):判断给定的字符是否是小写字符
public static boolean isDigit(char ch):判断给定的字符是否是数字字符
public static char toUpperCase(char ch):把给定的字符转换为大写字符
public static char toLowerCase(char ch):把给定的字符转换为小写字符
为了对基本数据类型进行更多的操作,更方便的操作,Java就针对每一种基本数据类型提供了对应的类类型。包装类类型。
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
用于基本数据类型与字符串之间的转换。
(七) Integer类
1. 构造方法:
publicInteger(int value)
publicInteger(String s)
注意:这个字符串必须是由数字字符组成
2. int类型和String类型的相互转换
int --String
String.valueOf(number)
String-- int
Integer.parseInt(s)
3. 常用的基本进制转换
publicstatic String toBinaryString(int i)
publicstatic String toOctalString(int i)
publicstatic String toHexString(int i)
4. 十进制到其他进制
publicstatic String toString(int i,int radix)
由这个我们也看到了进制的范围:2-36
为什么呢?0,...9,a...z
5. 他进制到十进制
publicstatic int parseInt(String s,int radix)
6. JDK5的新特性
自动装箱:把基本类型转换为包装类类型
自动拆箱:把包装类类型转换为基本类型
注意一个小问题:
在使用时,Integer x = null;代码就会出现NullPointerException。
建议先判断是否为null,然后再使用。
/
- 黑马程序员——Java编程语言学习总结 – API(上)
- 黑马程序员——Java编程语言学习总结– API(下)
- 黑马程序员——Java编程语言学习总结– 面向对象(上)
- 黑马程序员—— Java编程语言学习总结--概述
- 黑马程序员——Java编程语言学习总结 – 网络编程
- 黑马程序员——Java编程语言学习总结 – 循环与选择性语句
- 黑马程序员——Java编程语言学习总结– 函数与数组
- 黑马程序员——Java编程语言学习总结 – 面向对象(下)
- 黑马程序员——Java编程语言学习总结 – Collection集合框架
- 黑马程序员——Java编程语言学习总结 –Map集合
- 黑马程序员——Java编程语言学习总结 –异常与File类
- 黑马程序员——Java编程语言学习总结 – IO流
- 黑马程序员——Java编程语言学习总结 – 多线程
- 黑马程序员——Java编程语言学习总结 – 反射与设计模式
- 黑马程序员——Java学习总结:Java编程基础
- 黑马程序员——Java面向对象编程学习总结
- 黑马程序员-Java网络编程学习总结
- 黑马程序员---java网络编程学习总结
- HTTP header 详解
- 烂笔头
- 华为机试题2015
- 求最大数
- handle处理主线程消息的两种方法
- 黑马程序员——Java编程语言学习总结 – API(上)
- 为函数原型编写函数定义: int ascii_to_integer(char *str);
- URAL 1153. Supercomputer 二分求根
- 手把手教你python2.7+pyqt4进行界面开发
- [BZOJ1070] [SCOI2007]修车 && 二分图最佳完美匹配 或 费用流
- 1、Android 创建一个TextView
- LeetCode - Next Permutation
- 【数学】Pascal's Triangle II
- hdu 1160 FatMouse's Speed(最长子序列+路劲打印)