Java基础类库简介
文章目录
一、Java基础类库介绍
- Java提供了用于语言开发的类库,称为Java基础类库(JFC,Java Foundational Class) ,也称应用程序编程接口(API,Application Programming Interface),分别放在不同的包中。
- Java提供的包主要有:java.lang,java.io,java.math,java.util,java.applet,java.awt,java.awt.datatransfer,java.awt.event,java.awt.image,java.beans,java.net,java.rmi,java.security,java.sql等
二、语言包(java.lang)
语言包java.lang提供了Java语言最基础的类,包括
- Object类
- 数据类型包裹类(the Data Type Wrapper)
- 字符串类(String、StringBuffer)
- 数学类(Math)
- 系统和运行时类(System、Runtime)
- 类操作类(Class,ClassLoader)
(1)数据类型包裹类
对应Java的每一个基本数据类型(primitive data type)都有一个数据包裹类。每个包裹类都只有一个类型为对应的基本数据类型的属性域
基本数据类型 | 数据包裹类 |
---|---|
boolean | Boolean |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
1.生成数据类型包裹类对象的方法
-
从基本数据类型的变量或常量生成包裹类对象
double x = 1.2; Double a = new Double(x); Double b = new Double(-5.25);
-
从字符串生成包裹类对象
Double c = new Double("-2.34"); Integer i = new Integer("1234");
-
已知字符串,可使用valueOf方法将其转换成包裹类对象:
Integer.valueOf("125"); Double.valueOf("5.15");
-
自动装箱
Integer i =3; Double d = -5.25
2.得到基本数据类型数据的方法
-
每一个包裹类都提供相应的方法将包裹类对象转换回基本数据类型的数据
anIntegerObject.intValue() // 返回 int类 aCharacterObject.charValue() // 返回 char类型的数据
-
Integer、Float、Double、Long、Byte 及Short 类提供了特殊的方法能够将字符串类型的对象直接转换成对应的int、float、double、long、byte或short类型的数据
Integer.parseInt(“234”) // 返回int类型的数据 Float.parseFloat(“234.78”) // 返回float类型的数据
-
自动拆箱
Integer a = new Integer(3); int i = a;
3.装箱与拆箱
装箱(boxing):把基本类型数据包装成对象,如:
Integer obj = new Integer(8);
拆箱(unboxing):把对象内部基本数据提取出来。要先装后拆,如:
Boolean objb = new Boolean(false); //装箱
boolean b = objb.booleanValue(); //拆箱
装箱的两种做法:
-
(1)调用数据封装类构造方法,如:
Integer obj = new Integer(i)//设int i = 8
-
(2)(应优先采用)调用封装类数据转对象的静态方法,如:
Integer obj = Integer.valueOf(i)
数据封装类还提供一些静态常量字段,如:
Integer.MAX_VALUE
:int型最大值2147483647。Integer.MIN_VALUE
:int型最小值-2147483648。
数据封装类还提供与String类型转换的方法。如 Integer类方法:
toString(int i);
parseInt(String s);
基本数据和对应封装类对象之间的自动转换。如:
Integer obj = 8; //自动装箱,
相当于
Integer obj = new Integer(8);
自动拆箱例:
int i = obj; //自动拆箱,拆箱后再赋值
int sum = obj + obj; //自动拆箱,拆箱后再进行加法运算
Integer obj2 = obj + obj; //自动拆箱后相加,再自动装箱为对象
相当于下面拆箱、装箱语句:
int i = obj.intValue();
int sum = obj.intValue() + obj.intValue();
Integer obj2 = Integer.valueOf(obj.intValue() + obj.intValue());
正是有了自动装箱操作,才能使默认元素类型为 Object 的 ArrayList 集可以直接添加char、int和double等基本类型数据。
注:自动装箱和拆箱会降低程序运行效率,要慎用。
(2)常量字符串类String
该类字符串对象的值和长度都不变化,称为常量字符串
-
生成String类对象的方法
String aString;
aString = “This is a string”
-
调用构造方法生成字符串对象
new String();
new String(String value);
new String(char[] value);
new String(char[] value, int offset, int count);
new String(StringBuffer buffer);
String类的常用方法:
(3)变量字符串类StringBuffer
其对象是可以修改的字符串
- 字符的个数称为对象的长度(length)
- 分配的存储空间称为对象的容量(capacity)
与String类的对象相比,执行效率要低一些
该类的方法不能被用于String类的对象
生成StringBuffer类的对象:
-
生成容量为16的空字符串对象
new StringBuffer();
-
生成容量为size的空字符串对象
new StringBuffer(int size);
-
生成aString的一个备份,容量为其长度 +16
new StringBuffer(String aString);
StringBuffer类的常用方法:
例:已知一个字符串,返回将字符串中的非字母字符都删除后的字符串
class StringEditor {
public static String removeNonLetters(String original) {
StringBuffer aBuffer = new StringBuffer(original.length());
char aCharacter;
for (int i=0; i<original.length(); i++) {
aCharacter = original.charAt(i);
if (Character.isLetter(aCharacter))
aBuffer.append(new Character(aCharacter));
}
return new String(aBuffer);
}
}
public class StringEditorTester {
public static void main(String args[]) {
String original = "Hello123, My Name is Mark,
234I think you are my classmate?!!";
System.out.println(
StringEditor.removeNonLetters(original));
}
}
运行结果
HelloMyNameisMarkIthinkyouaremyclassmate
(4)数学类(Math)
(Java中三种计算随机数)
提供一组常量和数学函数,例如
- E和PI常数
- 求绝对值的abs方法
- 计算三角函数的sin方法和cos方法
- 求最小值、最大值的min方法和max方法
- 求随机数的random方法等
其中所有的变量和方法都是静态的(static)
是终结类(final),不能从中派生其他的新类
-
Java Math.random()函数
- 调用这个Math.random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
-
java.util.Random类
-
Random类的两种构造方法:
Random()
:创建一个新的随机数生成器。
Random(long seed)
:使用单个 long 种子创建一个新的随机数生成器。 -
可以在构造Random对象的时候指定种子,如:
Random r1 = new Random(20);
-
或者默认当前系统时间的毫秒数作为种子数:
Random r1 = new Random();
-
需要说明的是:在创建一个Random对象的时候可以给定任意一个合法的种子数,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。
函数 作用 protected int next(int bits) 生成下一个伪随机数。 boolean nextBoolean() 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。 void nextBytes(byte[] bytes) 生成随机字节并将其置于用户提供的 byte 数组中。 double nextDouble() 返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。 float nextFloat() 返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。 double nextGaussian() 返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。 int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 int nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。 long nextLong() 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。 void setSeed(long seed) 使用单个 long 种子设置此随机数生成器的种子。 -
-
获取系统时间System.currentTimeMillis()
(5)系统和运行时类(System、Runtime)
- System类
- 访问系统资源
arraycopy() 复制一个数组
exit() 结束当前运行的程序
currentTimeMillis() 获得系统当前日期和时间等 - 访问标准输入输出流
System.in 标准输入,表示键盘
System.out 标准输出,表示显示器
- 访问系统资源
- Runtime类
- 可直接访问运行时资源
totalMemory() 返回系统内存总量
freeMemory() 返回内存的剩余空间
- 可直接访问运行时资源
(6)类操作类(Class、ClassLoader)
- Class类
- 提供运行时信息,如名字、类型以及父类
- Object类中的getClass方法返回当前对象所在的类,返回类型是Class
- 它的getName方法返回一个类的名称,返回值是String
- 它的getSuperclass方法可以获得当前对象的父类
- ClassLoader类
- 提供把类装入运行时环境的方法
Class类应用举例
public class ClassTest {
public static void main(String args[]) {
BankAccount anAccount = new BankAccount();
Class aClass = anAccount.getClass();
System.out.println(aClass);
System.out.println(aClass.getName());
}
}
运行结果
class BankAccount
BankAccount
三、实用包(java.util)
实用包(java.util)——实现各种不同实用功能
- 日期类:描述日期和时间
- Date
- Calendar
- GregorianCalendar
- 集合类
- Collection(无序集合)、Set(不重复集合)、List(有序不重复集合)、Enumeration(枚举)、LinkedList(链表)、Vector(向量)、Stack(栈)、Hashtable(散列表)、TreeSet(树)
- StringTokenizer类
- 允许以某种分隔标准将字符串分隔成单独的子字符串
(1)Date类
-
构造方法
Date() ;// 获得系统当前日期和时间值。 Date(long date);// 以date创建日期对象,date表示从GMT(格林威治)时间1970-1-1 00:00:00开始至某时刻的毫秒数
-
常用方法
getTime()
返回一个长整型表示时间,单位为毫秒(millisecond)
after(Date d)
返回接收者表示的日期是否在给定的日期之后
before(Date d)
返回接收者表示的日期是否在给定的日期之前
(2)Calendar类
-
一个抽象的基础类,支持将Date对象转换成一系列单个的日期整型数据集,如YEAR、MONTH、DAY、HOUR等常量
-
它派生的GregorianCalendar类实现标准的Gregorian日历
-
由于Calendar是抽象类,不能用new方法生成Calendar的实例对象,可以使用getInstance()方法创建一个GregorianCalendar类的对象
-
Calendar类中声明的常量:
- Calendar.SUNDAY
- Calendar.MONDAY
- Calendar.TUESDAY
- Calendar.SATURDAY
- Calendar.JANUARY
- Calendar.FEBRUARY
- Calendar.AM
- …
-
Calendar类中的方法
isLeapYear(int year)
返回给定的年份是否是润年- get(int field) 取得特定Calendar对象的信息
aCalendar.get(java.util.Calendar.YEAR); aCalendar.get(java.util.Calendar.MONTH); aCalendar.get(java.util.Calendar.DAY_OF_WEEK); aCalendar.get(java.util.Calendar.MINUTE); ...
- set(int field, int value) 给日期域设定特定的值
aCalendar.set(Calendar.MONTH, Calendar.JANUARY); aCalendar.set(1999, Calendar.AUGUST, 15);
(3)GregorianCalendar类
用于查询及操作日期
-
构造方法
new GregorianCalendar(); // 当前日期 new GregorianCalendar(1999, 11, 31) ; // 特定日期 new GregorianCalendar(1968, 0, 8, 11, 55) ;// 日期和时间
-
getTime()方法 返回Date对象,显示日历
System.out.println(new GregorianCalendar().getTime()); System.out.println(new GregorianCalendar(1999, 11, 31).getTime()); System.out.println(new GregorianCalendar(1968, 0, 8, 11, 55).getTime());
(4)StringTokenizer类
-
允许以某种分隔标准将字符串分隔成单独的子字符串,如可以将单词从语句中分离出来
-
术语分隔符(delimeter)是指用于分隔单词(也称为标记,tokens)的字符
-
常用方法
int countTokens(); //返回单词的个数 String nextToken(); //返回下一个单词 boolean hasMoreTokens(); //是否还有单词
-
生成StringTokenizer类的对象的方法
new StringTokenizer(String aString);
指定了将被处理的字符串,没有指定分隔符(delimeter),这种情况下默认的分隔符,java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r)。
new StringTokenizer(String aString, String delimiters);
除了指定将被处理的字符串,还指定了分隔符字符串,如分隔符字符串可以为“,:;|_()”
new StringTokenizer(String aString, String delimiters, boolean returnDelimiters);
第三个参数如果为true,则分隔符本身也作为标记返回
四、文本包(java.text)
文本包(java.text)提供各种文本或日期格式,包含
-
Format类(抽象类)
-
DateFormat类(抽象类)
DateFormat df = DateFormat.getDatelnstance(); //得到SimpleDateFormat对象
-
SimpleDateFormat类(是DateFormat的子类)
-
使用已定义的格式对日期对象进行格式化
-
构造方法 以一指定格式的字符串作为参数
new java.text.SimpleDateFormat(formatString);
-
format(Date d) 将此种格式应用于给定的日期
aSimpleDateFormat.format(aDate);
-