Java基础类库(系统包)

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-999999)。 所以超时的时间还需要加上 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/78107597

下面给出具体例子:

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/38060299

关于System类对IO的支持 参见 java的IO操作:System类对IO的支持 https://www.cnblogs.com/alsf/p/6854540.html

关于数据的输入输出更多内容,参见“Java输入输出” https://blog.csdn.net/cnds123/article/details/112132155 

 

System中其它常用的方法

1、System.arraycopy(a,b,c,d,e);

其中,a是被复制的数组,b是复制的起始位置,c是复制到的数组,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

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 尚硅谷Java基础笔记是一套系统而全面的Java基础学习资料。这份笔记从Java语言的基本概念介绍开始,涵盖了Java的核心知识点,括变量、数据类型、运算符、流程控制等。接着,笔记详细讲解了面向对象编程的特点和Java中的类、对象、封装、继承、多态等内容。 在这份笔记中,还深入讨论了Java中的常用类库,如String、ArrayList、HashMap等,以及它们的常见用法和实例操作。此外,笔记还介绍了常见的异常处理机制,括try-catch语句、throw和throws关键字等,帮助学习者理解并掌握Java中的错误和异常处理。 除了基础知识的讲解,尚硅谷Java基础笔记还提供了大量的例子和练习题,帮助学习者巩固所学内容,并通过实践提高编程能力。这些例子和练习题涵盖了各个知识点和应用场景,从简单到复杂,逐渐深入,非常有助于学习者的理解和应用能力的提升。 总而言之,尚硅谷Java基础笔记是一份详细、系统、易懂的学习资料,适合初学者入门学习Java编程。无论是对于零基础的学习者还是对于有一定编程经验的人来说,这份笔记都是一份不可多得的宝藏,可以帮助他们夯实Java基础,掌握编程技巧,为进一步扩展知识奠定坚实的基础。 ### 回答2: 尚硅谷java基础笔记是一份完整而详细的教程,对于初学者来说是一个很好的学习资源。 这份笔记由尚硅谷团队精心编写而成,含了Java基础的各个方面。首先从Java的历史和应用领域入手,引导读者对Java有一个整体的认识。然后逐步介绍Java的发展环境和使用工具,让读者能够了解如何配置和使用Java开发环境。 接下来,笔记逐个介绍了Java的基本语法、数据类型、运算符、流程控制语句等基础知识。这些内容以简洁明了的方式呈现,附有实例和练习题,让读者可以通过练习巩固所学内容。 除了基础语法,笔记还深入讲解了Java的面向对象编程思想和相关特性,括类与对象、封装、继承、多态等。这部分内容对于理解Java的核心思想和编程范式非常重要,而且通过实例和案例的讲解,更加直观地展示了面向对象的优势和应用。 此外,笔记还含了Java的常用类库的介绍,如集合框架、IO流、异常处理等,这些内容对于进行实际开发非常实用。 总之,尚硅谷java基础笔记内容全面、深入浅出,适合初学者学习和巩固基础知识。通过系统地学习这份笔记,读者可以建立起扎实的Java基础,为后续的学习和实践打下坚实的基础。同时,笔记中的案例和练习题也为读者提供了不少实践机会,帮助读者更好地理解和应用所学知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值