一: 常用类
1 包装类
概述:基本数据类型所对应的引用数据类型;Object类可统一所有数据,包装类的默认值是null。
基础数据类型对应包装类:八大基础数据类型中特殊的有两个:int ->Integer ;char -> Character。其他的都是将首字母大写如:long -> Long;float -> Float 等。
基础类型与包装类的转换:
(1)parseXXX()静态方法(除了Character):将包装类变成基础数据类型;
(2)valueOf(XXX)静态方法:将基础数据类型转换成包装类。
如:(1)Integer integer = new Integer(100); int num = integer.intValue();
(2)int num2=18; Integer integer2 = Integer.valueOf(num2);
2 String类
2.1 概述
Java程序中的所有字符串成本(例如"abc")都是此类的实例;
字符串字面值是常量,创建之后不可改变;
常用创建方式:String str1 = "Hello"; String str2 = new String("Word");
2.2 常用方法
public char charAt(int index) | 根据下标获取字符 |
public boolean contains(String str) | 判断当前字符串中是否包含str |
public char[] toCharArray() | 将字符串转换成数组。 |
public int indexOf(String str) | 查找str首次出现的下标,存在,则返回该下标;不 存在则返回-1 |
public int length() | 返回字符串的长度 |
public String trim() | 去掉字符串前后的空格 |
public String toUpperCase() | 将小写转成大写 |
public boolean endsWith(String str) | 判断字符串是否以str结尾 |
public String replace(char oldChar,char newChar) | 将旧字符串替换成新字符串 |
public String[] split(String str) | 根据str做拆分 |
public String subString (int beginIndex,int endIndex) | 在字符串中截取出一个子字符串 |
public class StringDemo {
public static void main(String[] args) {
String a = "abc";
//xx.charAt(下标),把字符串对应下标位置的字符提取
System.out.println(a.charAt(2));//输出:c
System.out.println(a);//输出:abc
System.out.println("===========");
//判断字符串内是否包含你查询字符串
//被查询的字符串.contains(要查询的字符串)==>boolean
System.out.println(a.contains("java"));//输出:false
System.out.println("===========");
//字符串变成字符数组
char[] c = a.toCharArray();
for (int i = c.length-1; i >= 0; i--) {
System.out.print(c[i]);
}//输出:cba
System.out.println();
System.out.println("===========");
//获取字符串长度 字符串.length()
System.out.println("23456".length());//输出:5
System.out.println("===========");
//找字符串中对应字符串第一次出现的下标位置,没有返回-1
//从前向后
System.out.println(a.indexOf("a"));//输出:0
//从后向前
System.out.println(a.lastIndexOf("a"));//输出:0
System.out.println("===========");
//去除字符串头和尾的空格
String b = " ja va ";
System.out.println(b.length());//输出:10
System.out.println(b.trim());//只能去除头尾的空格 对中间的空格无效 输出:ja ja
System.out.println(b.trim().length());//输出:6
System.out.println("===========");
//字母的大小写转换
String s = "jAva";
String s1 = s.toUpperCase();//转大写字母
System.out.println(s1);//输出:JAVA
String s2 = s1.toLowerCase();//转小写字母
System.out.println("===========");
//判断字符串是否以xxx结尾 大小写敏感
System.out.println(s.endsWith("jA"));//判断结尾 输出:false
System.out.println(s.startsWith("va"));//判断开头 输出:false
System.out.println("===========");
//字符串.replace(旧字符串,新字符串); 用新字符串替换旧字符串
String word = "今天下雨";
word = word.replace("下雨", "阳光明媚");
System.out.println(word);//输出:今天阳光明媚
System.out.println("===========");
//将字符串进行分组 目标字符串.split(分组的依据);
String name = "12,34,56,78";
String[] str = name.split(",");
for (String string : str) {
System.out.println(string);
}
System.out.println("===========");
//usbstring(指定下标) 截取指定下标至最后所包含的字符串
//usbstring(指定下标,末尾下标后一位) 截取指定下标至末尾下标的字符串
String st = "我要飞的更高,摔得更惨。";
st = st.substring(2);
System.out.println(st);//输出:飞的更高,摔得更惨。
}
}
3 可变字符串
概念:可在内存中创建可变的缓冲空间,存储频繁改变的字符串
可变字符串类(这两个类中方法和属性完全一致):
(1)StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全。
方法名 | 属性 |
public StringBuilder append(String
str)
|
追加内容。
|
public StringBuilder insert(int
dstOffset, CharSequence s)
|
将指定 字符串插入此序列中。
|
public StringBuilder delete(int start,
int end)
|
移除此序列的子字符串中的字符。
|
public StringBuilder replace(int start,
int end, String str)
|
使用给定字符串替换此序列的子字符串中的字符。
start
开始位置、
end
结束位置。
|
public int length()
|
返回长度(字符数)。
|
public class TestString {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder();
//1 append();追加
sb.append("java世界第一");
System.out.println(sb.toString()); //java世界第一
sb.append("java真香");
System.out.println(sb.toString()); //java世界第一java真香
sb.append("java不错");
System.out.println(sb.toString()); //java世界第一java真香java不错
//2 insert();添加
sb.insert(0, "我在最前面"); //我在最前面java世界第一java真香java不错
System.out.println(sb.toString());
//3 replace();替换
sb.replace(0, 5, "hello");
System.out.println(sb.toString()); //hellojava世界第一java真香java不错
//4 delete();删除
sb.delete(0, 5);
System.out.println(sb.toString()); //java世界第一java真香java不错
//清空
sb.delete(0, sb.length());
System.out.println(sb.length());//0
}
}
4 BigDecimal类
为什么用:System.out.println(1.0 - 0.9);语句将会输出:0.09999999999999998;这是由于double是近似值存储,使用BigDecimal类会更加精确。
基本用法:java.math包中用来精确计算浮点数:BigDecimal bd=new BigDecimal(“1.0”)语句创建。
常用方法:
BigDecimal add(BigDecimal bd)
| 加 |
BigDecimal subtract(BigDecimal bd)
| 减 |
BigDecimal multiply(BigDecimal bd)
| 乘 |
BigDecimal divide(BigDecimal bd)
| 除 |
5 Date类和Calendar类
Date表示特点的瞬间,精确到毫秒;大部分方法都被Calendar类取代;
1秒=1000毫秒,1毫秒=1000微秒,1微妙=1000纳秒。
Calendar提供了获取和设置各种日历字段的方法;
Calendar类的构造方法为protected修饰,无法直接创建该对象。
常用方法:
static Calendar getInstance()
|
使用默认时区和区域获取日历
|
void set(int year,int month,int date,int hourofday,int
minute,int second)
|
设置日历的年、月、日、时、分、
秒。
|
int get(int field)
|
返回给定日历字段的值。字段比如
年、月、日等
|
void setTime(Date date)
|
用给定的
Date
设置此日历的时间。
Date-Calendar
|
Date getTime()
|
返回一个
Date
表示此日历的时间。
Calendar-Date
|
void add(int field,int amount)
|
按照日历的规则,给指定字段添加或
减少时间量
|
long getTimeInMillis()
|
毫秒为单位返回该日历的时间值
|
6 SimpleDateFormat类
SimpleDateFormat以与语言环境有关的方式来格式化(日期->文本)和解析(文本->日期)日期;
模式字母:
y => 年;M => 月; d => 天数;H => 小时(0-23);m => 分钟;s => 秒;S => 毫秒;
7 System类
系统类,主要用于获取系统的属性数据和其他操作;
常用方法:
方法名 | 说明 |
static void arraycopy(...)
|
复制数组
|
static long currentTimeMillis()
|
获取当前系统时间,返回的是毫秒值
|
static void gc();
|
建议
JVM
赶快启动垃圾回收器回收垃圾
|
static void exit(int status)
|
退出
jvm
,如果参数是
0
表示正常退出
jvm
,非
0
表示异常退出 jvm。
|
二: 集合
概念:集合是对象的容器,定义了对多个对象进行操作的常用方法。可实现数组的功能。
与数组区别:
(1)数组长度固定,集合长度不固定;
(2)数组可以存储基本类型和引用类型,集合只能存储引用类型;
1 Collection体系集合
Collection是集合的根接口,代表一组任意类型的对象,无序,无下标。
常用方法:
boolean add(Object obj)
| 添加一个对象数据 |
boolean addAll(Collection c)
|
将一个集合中的所有对象添加到此集合中
|
void clear()
|
清空此集合中的所有对象
|
boolean contains(Object o)
|
检查此集合中是否包含
o
对象
|
boolean equals(Object o)
|
比较此集合是否与指定对象相等
|
boolean isEmpty()
|
判断此集合是否为空
|
boolean remove(Object o)
|
在此集合中移除
o
对象
|
int size()
|
返回此集合中的元素个数
|
Object[] toArray()
|
将此集合转换成数组
|
2 List接口与实现
特点:有序、有下标、元素可以重复。继承Collection。
常用方法:
void add(int index, Object o)
|
在
index
位置插入对象
o
|
boolean addAll(int index,Collection c)
|
将一个集合中的元素添加到此集合中的
index
位置。
|
Object get(int index)
|
返回集合中指定位置的元素。
|
List subList(int fromIndex, int toIndex)
|
返回
fromIndex
和
toIndex
之间的集合元素。
|
ArrayList:
特点:使用数组结构存储,查询快、增删慢、线程不安全;实现List接口。
LinkedList:
特点:链表结构实现,增删快、查询慢、线程不安全;实现List接口。
Vector:
特点:数组结构实现,查询快、增删慢、线程安全、运行效率比ArrayList较慢。
3 泛型
概念:Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递。常见泛型形式有泛型类、泛型接口、泛型方法、
语法:<T,...> :T称为类型占位符,表示一种引用类型。
优点:提高代码的重用性,防止类型转换异常,提高代码的安全性;
4 Collections工具类
集合工具类定义了除存取以外的集合常用方法;
常见方法:
public static void reverse(List<?> list)
|
反转集合中元素的顺序
|
public static void shuffle(List<?> list)
|
随机重置集合元素的顺序
|
public static void sort(List list) /
|
升序排序(元素类型必须实现
Comparable
接口)
|
public static int binarySearch( list, T key)
|
二分查找
|
5 Set接口
特点:无序、无下标、元素不可重复。
方法:全部继承自Collection中的方法
使用foreach循环遍历:
for(数据类型 局部变量:集合名){
//循环内部的局部变量,代表当次循环从集合中取出的对象
}
HashSet:
基于HashSet实现元素不重复;JDK1.8之后引入红黑树,提高效率。
当存入元素的哈希码相同时,会调用==或equals进行确认,结果为true时拒绝后者存入;
LinkedHashSet:
链表实现的HashSet,按照链表进行存储,即可保留元素的插入顺序。
TreeSet:
基于排序顺序实现元素不重复;实现了SortedSet接口,对集合元素自动排序;
元素对象的类型必须实现Comparable接口,指定排序规则;
通过CompareTo方法确定是否为重复元素。
6 Map接口
特点:称为”映射“存储一对数据(key-value),键不可重复,值不可重复。
常用方法:
V put(K key,V value)
|
将对象存入到集合中,关联键值。
key
重复则覆盖原值。
|
Object get(Object key)
|
根据键获取对应的值。
|
Set keySet()
|
返回所有
key
。
|
Collection values()
|
返回包含所有值的
Collection
集合。
|
Set<Map.Entry<K,V>> entrySet()
|
键值匹配的
Set
集合。
|
HashMap:
TreeMap:
实现了SortedMap接口(Map的子接口),可以对key自动排序,Key需实现Comparable接口。
三: 异常
概念:程序在运行过程中出现的特殊情况
必要性:
四: 多线程