Java基础类库(系统包)
Java基础类库(系统包)是Java系统为程序员提供的一系列标准类,按照用途实现的功能不同归属于不同的包中,是 Java 的API(Application Program Interface)。
Java提供了丰富的基础类库,如Java 8提供了4000多个基础类,这些类可以帮我们降低开发难度,提高开发效率。但是这些基础类并不需要我们去背,我们只需要在平常的使用中去反复的查阅API文档,就可以记住大部分功能。
Java® Platform, Standard Edition & Java Development Kit
Version 11 API Specification 所有包的层次结构
官网 https://docs.oracle.com/en/java/javase/11/docs/api/overview-tree.html
中文 https://www.runoob.com/manual/jdk11api/overview-tree.html
Java 常用包的简单介绍如下:
java.lang 包:主要含有与语言相关的类。java.lang 包由解释程序自动加载,不需要显式说明(不需要用import)。Java语言包(java.lang)定义了Java中的大多数基本类,由Java语言自动调用,不需要显示声明。该包中包含了Object类,Object类是所有 Java 类的祖先,是整个类层次结构的根结点,同时还定义了基本数据类型的包装类(Wrapper Classes),如:String、Boolean、Byter、Short等,这些类支持数字类型的转换和字符串的操作等。System类与Runtime类也在Java.lang包里。Thread类也在Java.lang包里,Thread类是非常重要的线程类。
java.io 包:主要含有与输入/输出相关的类,这些类提供了对不同的输入和输出设备读写数据的支持,这些输入和输出设备包括键盘、显示器、打印机、磁盘文件等。程序的输入和输出可以说是程序与用户之间沟通的桥梁,通过输入输出操作实现用户与程序的交互。在Java中用java.io包来管理所有与输入和输出有关的类与接口。其中有5个重要的类分别是:InputStream、OutStream、Reader、Writer和File类,几乎所有的输入输出类都是继承这5个类而来的。
java.util 包:含有的类有Scanner 类、集合类(集合框架)、日期(Date)类等。此包中早期遗留的向量(Vector)、哈希表(Hashtable)、堆栈(Stack),有人不建议继续使用。
java.swing 包和 java.awt 包:提供了创建图形用户界面元素的类。通过这些元素,编程者可以控制所写的 Applet 或 Application 的外观界面。包中包含了窗口、对话框、菜单等类。
java.net 包:含有与网络操作相关的类,如 TCP Scokets、URL 等工具。
java.sql包: 提供与数据库连接的接口。
java.security包 提供安全方面的支持。
下面选取部分介绍
java.lang包中的类
java.lang包定义了Java中的大多数基本类,由Java语言自动调用,不需要显示声明。
☆Object类
该类是所有类的子类,如果一个类没有显示继承指定父类,则会默认继承Object类。所以任何对象都可以调用Object的方法。也就是说,Java Object 类是所有类的父类, Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。
Object 类可以显示继承,也可以隐式继承,以下两种方式时一样的:
显示继承:
public class Runoob extends Object{
……
}
隐式继承:
public class Runoob {
……
}
Object类构造函数
构造函数
描述
Object()
构造一个新对象。
Object类的方法
方法
描述
protected Object clone()
创建并返回一个对象的拷贝
boolean equals(Object obj)
比较两个对象是否相等
protected void finalize()
当 GC (垃圾回收器)确定不存在对该对象的有更多引用时,由对象的垃圾回收器调用此方法。
Class<?> getClass()
获取对象的运行时对象的类
int hashCode()
获取对象的 hash 值
void notify()
唤醒在该对象上等待的某个线程
void notifyAll()
唤醒在该对象上等待的所有线程
String toString()
返回对象的字符串表示形式
void wait()
让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
void wait(long timeout)
让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数设置的timeout超时时间。
void wait(long timeout, int nanos)
与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-)。 所以超时的时间还需要加上 nanos 纳秒。。
☆System类
官网 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/System.html
中文 https://www.runoob.com/manual/jdk11api/java.base/java/lang/System.html
System类代表当前Java程序的运行平台,位于java.lang包下,该类被private修饰,所以不能创建System类的对象,System类提供了一些类变量和方法,允许直接通过System类来调用这些类变量和方法。
System类提供了代表标准输入、标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还提供了加载文件和动态链接库的方法。
System类中包含了in、out和err三个成员变量,分别代表标准输入流(键盘输入)、标准输出流(显示器)和标准错误输出流(显示器):
public final static InputStream in; //标准输入流
public final static PrintStream out; //标准输出流
public final static PrintStream err; //标准错误流
System.out是一个已经预先处理过的,被包装成PrintStream的对象。和System.out一样,System.err也是一个PrintStream,但是System.in不是,它是一个未经处理的InputStream。也就是说,可以直接使用System.out和System.err打印输出到控制台,使用比较简单,但是使用System.in直接读取数据不可行,必须变通(如数据转换或包装)处理。
java 里System.in 输入流的使用
System.in是一个很原始、很简陋的输入流对象,因为只能按字节读取,返回值是占一个字节的整形数据,通常不直接使用它来读取用户的输入,一般需要变通(如数据转换或包装)处理,包装成字符流的示例如下:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
str = br.readLine();
下面将进一步介绍。
现在给出使用System.in的几种方式:
1)构造Scanner对象:Scanner in = new Scanner(System.in);
下面给出具体例子
import java.util.Scanner; //导入 java.util.Scanner;
public class IOTestA {
public static void main(String[] args) {
System.out.println("hello world!");
// System.in的使用
Scanner in=new Scanner(System.in);
System.out.println("请输入姓名");
String name=in.nextLine();//从键盘读一行
System.out.println(name);
System.out.print("请输入");
String word=in.next();//从键盘读一个数据,空格为分隔符
System.out.println(word);
}
}
2)使用InputStream input = System.in;
下面给出具体例子:
import java.io.InputStream;
public class TestSysC {
public static void main(String[] args) throws Exception { // 所有异常 抛出
InputStream input = System.in; // System.in的使用,从键盘接收数据
byte b[] = new byte[1024]; // 开辟空间,接收数据
System.out.print("请输入内容:"); // 信息提示
int len = input.read(b); // 接收数据
System.out.println("输入的内容为:" + new String(b, 0, len));
input.close(); // 关闭输入流
}
}
3)构造BufferedReader对象:BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 关于这句的意思参见 https://blog.csdn.net/lzh_86/article/details/
下面给出具体例子:
import java.io.*;
public class LineInTest
{
public static void main(String[] args)
{
String s=" ";
System.out.print("请输入一个字符串: ");
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
s = in.readLine();
System.out.println("你输入的字符串是: "+s);
}catch(Exception e) {}
//System.out.println("你输入的字符串是: "+s);
}
}
4)使用System.in.read()读取从控制台输入的字节
System.in.read()时,键盘上按下的任何一个键都会被当做是输入值——包括Enter键也会被当做是一个值,当我们按下Enter的时候,实际上发送两个键值:一个回车(13),一个是换行(10)——返回一个整型字节数据。并且,需要使用 throws Exception或将System.in.read()放在try块中。
下例通过变通处理,可以一次处理一个字符:
public class CharInTest{
public static void main( String args[] ) throws Exception {
char c=' ';
System.out.print("请输入一个字符: ");
c=(char)System.in.read();
System.out.println("你输入的是: "+c);
}
}
或
public class CharInTest2
{
public static void main(String[] args)
{
char c=' ';
System.out.print("请输入一个字符: ");
try
{
c = (char) System.in.read();
System.out.println("你输入的是: "+c);
}catch(Exception e) {}
//System.err.println(e.toString());
}
}
下例变通处理字符串:
public class LinInTest2
{
public static void main(String args[])
{
try
{
byte bArray[]=new byte[128];
String str;
System.out.println("请输入字符串:");
System.in.read(bArray);
str = new String(bArray);
System.out.println("你输入的是:" + str);
}
catch(Exception e)
{
//System.err.println(e.toString());
}
}
}
关于System.in.read() 的官网见: https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html
关于System.in.read()用法 参见https://blog.csdn.net/wangluqinglxq/article/details/
关于System类对IO的支持 参见 java的IO操作:System类对IO的支持 https://www.cnblogs.com/alsf/p/6854540.html
关于数据的输入输出更多内容,参见“Java输入输出” https://blog.csdn.net/cnds123/article/details/
System中其它常用的方法
1、System.arraycopy(a,b,c,d,e);
其中,a是被复制的数组,b是复制的起始位置,c是复制没有java基础类库到的数组,d是复制到这个数组的起始位置,e是复制到这个数组的结束位置。
2、System.currentTimeMillis();
返回毫秒数,这个就比较简单了,和Date类中的getTime方法一样。
例子
public class TestSysA{
public static void main(String[] args){
//当前时间的毫秒值
System.out.println(System.currentTimeMillis());
//我们可以计算一段程序用了多少毫秒,例如
long start = System.currentTimeMillis();
for(int i = 0 ; i < 10000 ; i++){
System.out.println("hello"+i);
}
long end = System.currentTimeMillis();
System.out.println("这段程序共用了"+(end - start)+"毫秒"); //输出
}
}
3、getProperty获取系统属性,如:
public class TestSysB{
public static void main(String[] args){
//当前系统属性值
System.out.println("当前系统:"+System.getProperty("os.name"));
//环境变量
System.out.println("环境变量:"+System.getenv("path"));
}
}
☆Runtime类
Runtime类代表java程序的运行时环境,可以通过它访问JVM的相关信息,如处理器数量,内存信息等,它还可以通过exec()方法来启动一个进程或执行操作系统命令。每个java程序都有一个与之对应的Runtime实例,在程序中可以通过getRuntime()获得对应的Runtime对象。
例、
public class TestRuntimeA {
public static void main (String[] args) throws Exception {
Runtime rt = Runtime.getRuntime();
System.out.println("处理器数量" + rt.availableProcessors()); //CPU数量
rt.exec("notepad.exe"); //打开运行记事本程序
}
}
☆Math类
Math类提供了常用的数学运算方法以及Math.PI和Math.E两个数学常量。该类是final的,不能被继承,类中的方法和属性全部是静态,不允许在类的外部创建Math类的对象。因此,只能使用Math类的方法而不能对其作任何更改。
Math类的主要方法如下表:
方法
功能
int abs(int i)
求整数的绝对值(另有针对long、float、double的方法)
double ceil(double d)
不小于d的最小整数(返回值为double型)
double floor(double d)
不大于d的最大整数(返回值为double型)
int max(int i1,int i2)
求两个整数中最大数(另有针对long、float、double的方法)
int min(int i1,int i2)
求两个整数中最小数(另有针对long、float、double的方法)
double random()
产生0~1之间的随机数
int round(float f)
求最靠近f的整数
long round(double d)
求最靠近d的长整数
double sqrt(double a)
求平方根
double sin(double d)
求d的sin值(另有求其他三角函数的方法如cos,tan,atan)
double log(double x)
求自然对数
double exp(double x)
求e的x次幂(ex)
double pow(double a, double b)
求a的b次幂
例、产生10个10~100之间的随机整数。
☆字符串类
字符串是字符的序列。在 Java 中,字符串无论是常量还是变量都是用类的对象来实现的。java.lang 提供了两种字符串类:String 类和 StringBuffer 类。
String 类是 immutable(不可改变的) 的 Unicode(一种国际标准编码方案) 字符序列,其作用是实现一种不能改变的静态字符串。例如,把两个字符串连接起来的结果是生成一个新的字符串,而不会使原来的字符串改变。实际上,所有改变字符串的结果都是生成新的字符串,而不是改变原来字符串。
字符串与数组的实现很相似,也是通过 index 编号来指出字符在字符串中的位置的,编号从0 开始,第 2 个字符的编号为 1,以此类推。如果要访问的编号不在合法的范围内,系统会产生 StringIndexOutOfBoundsExecption 异常。如果 index 的值不是整数,则会产生编译错误。
String 创建字符串的方法
方法
功能
String s=”Hello!”
用字符串常量自动创建 String 实例。
String s=new String(String s)
通过 String 对象或字符串常量传递给构造方法。
public String(char value[])
将整个字符数组赋给 String 构造方法。
public String(char value[], int offset, int count)
将字符数组的一部分赋给 String 构造方法,offset 为起始下标,count为子数组长度。
String 类不能改变字符串对象中的内容,只能通过建立一个新串来实现字符串的变化。如果字符串需要动态改变,就需要用 StringBuffer 类。StringBuffer 类主要用来实现字符串内容的添加、修改、删除,也就是说该类对象实体的内存空间可以自动改变大小,以便于存放一个可变的字符序列。
StringBuffer 类提供的三种构造方法
构造方法
说明
StringBuffer()
使用该无参数的构造方法创建的 StringBuffer 对象,初始容量为 16 个字符,当对象存放的字符序列大于 16 个字符时,对象的容量自动增加。该对象可以通过 length()方法获取实体中存放的字符序列的长度,通过 capacity()方法获取当前对象的实际容量。
StringBuffer(int length)
使用该构造方法创建的 StringBuffer 对象,其初始容量为参数 length 指定的字符个数,当对象存放的字符序列的长度大于 length 时,对象的容量自动增加,以便存放所增加的字符。
StringBuffer(Strin str)
使用该构造方法创建的 StringBuffer 对象,其初始容量为参数字符串 str 的长度再加上 16 个字符。
几种 StringBuffer 类常用的方法
方法
说明
append()
使用 append() 方法可以将其他 Java 类型数据转化为字符串后再追加到 StringBuffer 的对象中。
insert(int index, String str)
insert() 方法将一个字符串插入对象的字符序列中的某个位置。
setCharAt(int n, char ch)
将当前 StringBuffer 对象中的字符序列 n 处的字符用参数 ch 指定的字符替换,n 的值必须是非负的,并且小于当前对象中字符串序列的长度。
reverse()
使用 reverse()方法可以将对象中的字符序列翻转。
delete(int n, int m)
从当前 StringBuffer 对象中的字符序列删除一个子字符序列。这里的 n 指定了需要删除的第一个字符的下标,m 指定了需要删除的最后一个字符的下一个字符的下标,因此删除的子字符串从 n~m-1。
replace(int n, int m, String str)
用 str 替换对象中的字符序列,被替换的子字符序列由下标 n 和 m 指定。
java.util 包中的类
☆Date 类
Date 类是 Java 中的日期时间类,其构造方法比较多,下面是常用的两个:
Date():使用当前的日期和时间初始化一个对象。
Date(long millisec):从1970年01月01日00时(格林威治时间)开始以毫秒计算时间,计算 millisec 毫秒。如果运行 Java 程序的本地时区是北京时区(与格林威治时间相差 8 小时),Date dt1=new Date(1000);,那么对象 dt1 就是1970年01月01日08时00分01秒。
一些比较常用的 Date 类方法:
方法
功能
boolean after(Date date)
若调用 Date 对象所包含的日期比 date 指定的对象所包含的日期晚,返回 true,否则返回 false。
boolean before(Date date)
若调用 Date 对象所包含的日期比 date 指定的对象所包含的日期早,返回 true,否则返回 false。
Object clone()
复制调用 Date 对象。
int compareTo(Date date)
比较调用对象所包含的日期和指定的对象包含的日期,若相等返回 0;若前者比后者早,返回负值;否则返回正值。
long getTime()
以毫秒数返回从 1970 年 01 月 01 日 00 时到目前的时间。
int hashCode()
返回调用对象的散列值。
void setTime(long time)
根据 time 的值,设置时间和日期。time 值从 1970 年 01 月 01 日 00 时开始计算。
String toString()
把调用的 Date 对象转换成字符串并返回结果。
public Static String valueOf(type variable)
把 variable 转换为字符串。
Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。若需要修改时间显示的格式可以使用“SimpleDateFormat(String pattern)”方法。
☆Scanner 类
官网 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Scanner.html
中文 https://www.runoob.com/manual/jdk11api/java.base/java/util/Scanner.html
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/19081.html