常用类以及接口

简介: 常用类以及接口

Object

1. 所有类的父类,不管继承不继承都是这个类的子类

2. 构造方法public Object(){}  注意,因为是超类,所以第一句没有super()

Scanner类

用来向键盘输入一些数据,Scanner in = new Scanner(System.in);

备注:System.in 系统输入指的是通过键盘录入数据

int i = in.nextInt();//输入一个整数

String s = in.next();//输入一个字符串

system类

控制端输入一些信息的类

//获取当前的时间戳起点是1970

Long time  =System.currentTimeMillis();

//结束当前的jvm虚拟机

System.exit(0);

//立即运行垃圾回收机制

System.gc();

System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象。System类中的都是static方法,类名访问即可。在JDK中,有许多这样的类

Math类

顾名思义,Math类就是用来进行数学计算的,它提供了大量的静态方法来便于我们实现数学计算:

主要方法

Random类

Random用来创建伪随机数。所谓伪随机数,是指只要给定一个初始的种子,产生的随机数序列是完全一样的。

要生成一个随机数,可以使用nextInt()nextLong()nextFloat()nextDouble()

Random r = new Random();
r.nextInt(); // 2071575453,每次都不一样
r.nextInt(10); // 5,生成一个[0,10)之间的int
r.nextLong(); // 8811649292570369305,每次都不一样
r.nextFloat(); // 0.54335...生成一个[0,1)之间的float
r.nextDouble(); // 0.3716...生成一个[0,1)之间的double

有童鞋问,每次运行程序,生成的随机数都是不同的,没看出伪随机数的特性来。

这是因为我们创建Random实例时,如果不给定种子,就使用系统当前时间戳作为种子,因此每次运行时,种子不同,得到的伪随机数序列就不同。

如果我们在创建Random实例时指定一个种子,就会得到完全确定的随机数序列:

public class Main {

   public static void main(String[] args) {

       Random r = new Random(12345);

       for (int i = 0; i < 10; i++) {

           System.out.println(r.nextInt(100));

       }

       // 51, 80, 41, 28, 55...

   }

}

前面我们使用的Math.random()实际上内部调用了Random类,所以它也是伪随机数,只是我们无法指定种子。

SecureRandom

有伪随机数,就有真随机数。实际上真正的真随机数只能通过量子力学原理来获取,而我们想要的是一个不可预测的安全的随机数,SecureRandom就是用来创建安全的随机数的:

SecureRandom sr = new SecureRandom();
System.out.println(sr.nextInt(100));

SecureRandom无法指定种子,它使用RNG(random number generator)算法。JDK的SecureRandom实际上有多种不同的底层实现,有的使用安全随机种子加上伪随机数算法来产生安全的随机数,有的使用真正的随机数生成器。实际使用的时候,可以优先获取高强度的安全随机数生成器,如果没有提供,再使用普通等级的安全随机数生成器:

public class Main {
    public static void main(String[] args) {
        SecureRandom sr = null;
        try {
            sr = SecureRandom.getInstanceStrong(); // 获取高强度安全随机数生成器
        } catch (NoSuchAlgorithmException e) {
            sr = new SecureRandom(); // 获取普通的安全随机数生成器
        }
        byte[] buffer = new byte[16];
        sr.nextBytes(buffer); // 用安全随机数填充buffer
        System.out.println(Arrays.toString(buffer));
    }
}

SecureRandom的安全性是通过操作系统提供的安全的随机种子来生成随机数。这个种子是通过CPU的热噪声、读写磁盘的字节、网络流量等各种随机事件产生的“熵”。

在密码学中,安全的随机数非常重要。如果使用不安全的伪随机数,所有加密体系都将被攻破。因此,时刻牢记必须使用SecureRandom来产生安全的随机数。

需要使用安全随机数的时候,必须使用SecureRandom,绝不能使用Random!

UUID

一台机器上通过当前时间与电脑网卡生成的一段字符

UUID.randomUUID().toString()一般转成string使用

Comparator

java.util包中的接口

Comparable

java.lang包中得接口


相关文章
|
设计模式 存储 缓存
Java中的抽象类、接口、设计模式、包装类和泛型(附带相关面试题)
一.抽象类(abstract),二.接口(interface),三.设计模式,四.包装类,五.泛型
359 0
|
5月前
|
安全 Java
深入理解 Java 泛型工厂方法:类型安全与灵活性的结合
深入理解 Java 泛型工厂方法:类型安全与灵活性的结合
62 1
|
5月前
|
Java
JavaSE——面向对象高级二(4/4)-接口的其他细节-三个新方法(默认方法、私有方法、静态方法),接口的多继承
JavaSE——面向对象高级二(4/4)-接口的其他细节-三个新方法(默认方法、私有方法、静态方法),接口的多继承
38 0
|
C# 开发者
C#扩展方法和工具类的区别
扩展方法和工具类的主要区别在于它们的作用。扩展方法旨在扩展现有的类,而工具类旨在提供一组通用且可靠的方法来执行某些任务。当需要扩展现有的类时,使用扩展方法;当需要实用函数来执行通用任务时,使用工具类。
77 0
|
Java
在Java中,接口、抽象类、静态类以及非静态类有着各自的特点和用途
在Java中,接口、抽象类、静态类以及非静态类有着各自的特点和用途
76 1
泛型-使用泛型结合工厂方法实现单例模式,以支持类型自定义
泛型-使用泛型结合工厂方法实现单例模式,以支持类型自定义
Java中接口,抽象类.嵌套接口区别和用法
Java中接口,抽象类.嵌套接口区别和用法
|
存储 Java 索引
Java_常用类之包装类和其他类
Java_常用类之包装类和其他类
102 0
java 接口,接口的特性,接口实现多态,面向接口编程
java 接口,接口的特性,接口实现多态,面向接口编程
|
存储 安全 算法
3. 常用类
看类的描述 Random类是用于生成随机数的类
63 0
3. 常用类