一、 常用类
1、 Math类
1Math类提供了一序列基本数学运算和几何函数的方法。
2Math类是final类,并且它的所有成员变量和成员方法都是静态的。
Math类的常用属性和方法
Þ静态常量--PI :圆周率的double值
Þ静态方法
double pow(double a,double b) | 计算a的b次方 |
double sqrt(double a) | 计算给定值的平方根 |
int abs(int a) | 计算int类型值a的绝对值,也接收long、float和double类型的参数 |
double ceil(double a) | 返回大于等于a的最小整数的double值 |
double floor(doble a) | 返回小于等于a的最小整数的double值 |
int max(int a,int b) | 返回int类型值a和b中的较大值,也接收long、float和double类型的参数 |
int min(int a,int b) | 返回int类型值a和b中的较小值,也接收long、float和double类型的参数 |
int round(float a) | 四舍五入返回整数 |
double random() | 返回带正号的double值,该值大于等于0.0且小于1.0 |
2、 Random类
Random类的对象可以生成“伪随机数”。
常用方法:
public int nextInt(int bound)
返回从0(包含)到bound(不包含)的一个“伪随机数”整数值。
public boolean nextBoolean()
返回一个“伪随机数”的boolean值。
代码实例:
package common;
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
Random ran=new Random();
int result=ran.nextInt(16)+3;
System.out.println("随机返回3到18的数字"+result);
System.out.println("随机返回boolean值:"+ran.nextBoolean());
}
}
3、 System类
成员变量
System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
‚成员方法
«public static void arraycopy(Object src , int srcPos, Object dest, int destPos, int length)
int[] a = {1,2,3,4};
int[] b = new int[5];
System.arraycopy(a,1,b,3,2);
«exit()方法
Public static void exit(int status)
该方法的作用就是退出程序。其中status的值为0代表正常退出,非0代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。
«gc()方法
public static void gc()
该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
垃圾回收时,会先调用finalize()方法,释放非java资源。
«currentTimeMillis方法
public static long currentTimeMillis()
以毫秒为单位返回从1970年1月1日午夜到当前时间的毫秒数。
代码示例:
package common;
public class Person {
// 在对象被JVM的gc回收之前,会先调用这个方法
@Override
protected void finalize() throws Throwable {
System.out.println("对象被回收之前做的事情...");
}
}
package common;
public class FinalizeDemo {
public static void main(String[] args) {
Person per=new Person();
per=null; // 将per引用置为null,使堆内存中的Person对象变为“垃圾”
System.gc(); // 显式请求JVM进行垃圾回收gc
}
}
4、 Runtime类
作用:使应用程序与其运行环境相关联
通过使用getRuntime()静态方法获得实例。
Þexec(String command)在单独的进程中执行指定的字符串命令,该方法返回Process对象,使用Process对象的destroy()方法杀掉进程。
代码示例:
package common;
import java.io.IOException;
import java.util.Scanner;
public class RuntimeDemo {
public static void main(String[] args) {
Runtime rt= Runtime.getRuntime();
rt.gc(); // 显式请求JVM进行垃圾回收gc
System.out.println("当前JVM的内存总量是:"+rt.totalMemory()+"字节");
System.out.println("JVM试图使用的最大内存量:"+rt.maxMemory());
System.out.println("当前JVM的空闲内存量:"+rt.freeMemory());
try {
rt.exec("notepad");
rt.exec("calc");
Process qq=rt.exec("F:\\Program Files (x86)\\Tencent\\QQ\\Bin\\QQ.exe"); // 打开QQ进程
Scanner scan=new Scanner(System.in);
System.out.print("要关闭QQ吗?y/n");
String choice=scan.next();
if("y".equals(choice)){
qq.destroy(); // 销毁进程
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
5、 Date类与 SimpleDateFormat类
Date类:表示日期和时间
提供操作日期和时间各组成部分的方法。
SimpleDateFormat类
用于定制日期时间格式
Date date = new Date(); //创建日期对象
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-
MM-dd HH:mm:ss");//定制日期格式
String now = sdf.format(date);
System.out.println(now);
6、 Calendar类
抽象类
用于设置和获取日期/时间数据的特定部分
Calandar类提供一些方法和静态字段来操作日历。
方法或属性 | 说明 |
int get(int field) | 返回给定日历字段的值 |
MONTH | 指示月 |
DAY_OF_MONTH | 指示一个月中的某天 |
DAY_OF_WEEK | 指示一个星期中的某一天 |
二、 正则表达式
1、概念:正则表达式(regex)是使用字符串描述、匹配一系列符合某个句法规则的字符串。
2、用途:匹配、切割、替换、获取字符串。
3、正则表达式由一些普通字符和一些元字符组成。
常见的元字符:
元字符 | 描述 |
^ | 匹配输入字符串的开始位置 |
$ | 匹配字符串的结束位置 |
\d | 匹配一个数字字符。等价于[0-9] |
\D | 匹配一个非数字字符。等价于[^0-9] |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\n\r\t\f] |
\S | 匹配任何非空白字符。等价于[^\n\r\t\f] |
\w | 匹配包括下划线的任何单个字符。等价于“[A-Za-z0-9]” |
4、Java中“\”的含义与作用
¾反斜线后面可以加特定字符,组成所谓的“转义字符”。eg: \n \t
¾用于取消元字符的意义,使元字符变为普通字符。
eg: “\\” 代表”\”。
¾用于组成正则表达式中的元字符。
eg: “\d” 在正则表达式中代表“匹配一个数字字符”。
5、Pattern类与Matcher类
¾Pattern类与Matcher类都在java.util.regex包中定义。
¾Pattern类的对象代表正则表达式编译之后的对象;Matcher类主要用于执行验证。
¾Pattern类的主要方法:
public static Pattern compile(String regex);
public Matcher matcher(CharSequence input);
¾Matcher类的主要方法:
Public boolean matches();
6、String类对正则表达式的支持
public boolean matches(String regex)
判断字符串是否与给定的正则表达式匹配
‚public String replaceAll(String regex,String replacement)字符串替换
ƒpublic String[] split(String regex)字符串拆分
7、补充:
正则表达式中间的问号?有两种作用:
第一种作用:重复前面表达式0次或1次。
第二种作用:在表示次数的元字符后加上?代表取消默认的贪婪匹配模式,变为“非贪婪匹配模式”。
三、 枚举类型
1、枚举类型使用一组常量值表示特定的数据集合,该集合中的数据的数目确定(通常较少),且这些数据只能取预先定义的值。
2、Java枚举类型均自动继承java.lang.Enum类(该类继 承了Object类)
3、声明枚举类型:
[public] enum 枚举类型名称{
枚举对象1,枚举对象2,.....,枚举对象n;
}
eg: public enum Color{
RED,GREEN,BLUE;
}
4、获取枚举对象的两种方法:
方法一:取得单个枚举对象
枚举.对象名
方法二:取得全部枚举对象
枚举.values()
注意:枚举.values()返回的是一个对象数组,可以通过遍历该对象数组获取所有枚举对象。
四、 集合概念与框架结构
1、为什么使用集合:
如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用java集合框架
2、集合的概念
集合:Java API所提供的一系列类的实例,可用于 动态存放多个对象。
‚java集合框架提供了一套性能优良、使用方便的接口和类,他们位于java.util包中。
ƒ特点:长度不固定,只能用于存储引用类型对象。
3、Java集合框架结构
4、Java Collection接口
Collection接口定义了一些集合常用的方法
方法 | 说明 |
int size(); | 返回此collection中的元素数
|
Boolean isEmpty();
| 判断此collection中是否包含元素 |
Boolean contains(Object obj);
| 判断此collection是否包含指定的元素 |
boolean add(Object element); | 向此collection中添加元素 |
boolean remove(Object element);
| 从此collection中移除指定的元素 |
void clear();
| 移除些collection中所有的元素 |
Iterator iterator(); | 返回在此collection的元素上进行迭代的迭代器
|
Object[] toArray();
| 把此collection转成数组 |
5、collection接口存储特点:
存取对象的方法,两个常用的子接口:
List接口:存放的元素有序且允许有重复的集合接口。
‚Set接口:存放的元素不包含重复元素的集合接口。
6、List集合及其实现类
nList接口是Collection接口的子接口
n实现List接口的集合类中的元素是有序的,且允许重复。
n List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素。
7、JDK API所提供的List集合类常用的有
uArrayList
uLinkedList
8、List接口常用的方法(List接口比Collection接口中新 增的几个实用方法):
public Object get(int index);返回列表中元素数
‚public Object add(int index, Object element);
在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
ƒpublic Object set(int index, Object element) ;
用指定元素替换列表中指定位置的元素
„public Object remove(int index);
移除列表中指定位置的元素
…public ListIterator listIterator();
返回此列表元素的列表迭代器
9、实现类ArrayList
ArrayList是使用数组结构实现的List集合。
优点:对于使用索引取出的元素有较好的效率
它使用索引快速定位对象。
缺点:元素做删除或插入时比较麻烦
因为使用了数组,需要移动后面的元素以调整索引顺序。
10、实现类LinkedList
LinkedList是使用双链表实现的集合
LinkedList是新增了一些插入、删除的方法
优点:对频繁的插入或删除元素有较好的效率
缺点:查询元素时效率较低,因为要从第一个元素开始查找
11、迭代器的使用
uIterator是专门的迭代输出接口。所谓的迭代输出就是将元素进行判断,判断是否有内容,如果有内容则把内容取出。
uIterator对象称作迭代器,用以方便的实现对集合内元素的遍历操作。
u所有实现了Collection接口的集合类都有一个iterator()方法用以返回一个实现了Iterator接口的对象。
Iterator it = coll.iterator();
while(it.hasNext()){
it.next();
}
u迭代器的使用方法:
Iterator接口中定义了如下方法:
boolean hasNext(); //判断游标右边是否有元素
Object next(); //返回游标右边的元素并将游标移动到下一个位置
u另一种遍历集合的方法
用增强for遍历集合中的元素
凡是能用 Iterator 迭代的集合都可以用JDK5.0中增强的for循环来更简便的遍历。
List<String> list=new ArrayList<String>();
…
eg: for(String data:list){
System.out.print(data+” ”)
}
12、泛型补充:
泛型(Generic type)是对java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法中的形式参数是运行时传递的的值的占位符一样。
泛型的好处:
解决了类型安全的问题(运行期出现“java.lang.ClassCastException”异常)
泛型类举例:
class Gen<T> {
private T ob; // 定义泛型成员变量
public Gen(T ob) {
this.ob = ob;
}
public T getOb() {
return ob;
}
public void setOb(T ob) {
this.ob = ob;
}
public void showType() {
System.out.println("T的实际类型是: " + ob.getClass().getName());
}
}
13、受限泛型
设置上限
类名称<? extends 上限类>
只能接收上限类对象或其子类对象
‚设置下限
类名称<? super 下限类>
接收下限类对象或其父类对象
注意:若定义泛型类,可以将?设置为泛型标识
14、Set接口的实现类
Set接口没有提供Collection接口额外的方法,但实现Set接口的集合类中的元素是不可重复的。
JDK API中所提供的Set集合类常用的有:
HashSet:散列存放
TreeSet:有序存放
LinkedHashSet
HashSet的存储原理
u根据每个对象的哈希码值(调用hashCode()获得)用固定的算法算出它的存储索引,把对象存放在一个叫散列表的相应位置(表元)中。
u如果对应的位置没有其它元素,就只需要直接存入。
u如果该位置有元素了,会将新对象跟该位置的所有对象进行比较(调用equals()),以查看是否已经存在了:还不存在就存放,已经存在就不存储。
15、HashSet集合的特点及使用技巧
HashSet不保存元素的加入顺序。
HashSet接口存、取、删对象都有很高的效率
对于存放到hashCode(Object obj)方法和equals()以实现对象相等规则的编写。
16、TreeSet集合的特点
TreeSet:可以对加入其中的元素进行排序。但前提是,必须指定排序规则。
构造方法:public TreeSet()
如果使用TreeSet的无参构造实例化TreeSet集合,则加入到TreeSet集合中的元素所对应的类必须实现java.lang. Comparable<T>接口,复写其中的int compareTo(T o)方法,并在方法中编写排序规则。
在Comparable<T>接口的compareTo(T o)方法中,指定排序规则(以升序为例):
public int compareTo(Girl girl){
if(this.xxx>girl.xxx){
return 1;
}else if(this.xxx<girl.xxx){
return -1;
}else{
return 0;
}
}
TreeSet比较排序的过程,已经对重复元素去重了。