java Random类、File类、System类初识

117 阅读3分钟
  • 本文已参加「新人创作礼活动」,一起开启掘金之路。

Random类

java.lang.Math.Random

  • 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间返回值是一个伪随机选择的数,在该范围内(近似)均匀分布
public static void main(String[] args) {
	// 结果是个double类型的值,区间为[0.0,1.0)
	System.out.println("Math.random()=" + Math.random());
	int num = (int) (Math.random() * 3);
	// 注意不要写成(int)Math.random()*3,这个结果为0或1,因为先执行了强制转换
	System.out.println("num=" + num);
}
//结果
//Math.random()=0.44938147153848396
//num=1

java.util.Random

  • Random()的两种构造方法:
    • Random():创建一个新的随机数生成器。
    • Random(long seed):使用单个 long 种子创建一个新的随机数生成器。

创建一个Random对象的时候可以给定任意一个合法的种子数,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。

例子一

  • 在没带参数构造函数生成的Random对象的种子缺省是当前系统时间的毫秒数。
  • rand.nextInt(100)中的100是随机数的上限,产生的随机数为0-100的整数,不包括100。
public static void main(String[] args) {
	Random rand =new Random();
	int i=rand.nextInt(100);
	System.out.println(i);
}

例子二

  • 对于种子相同的Random对象,生成的随机数序列是一样的。
public static void main(String[] args) {
	Random ran1 = new Random(25);
	System.out.println("使用种子为25的Random对象生成[0,100)内随机整数序列: ");
	for (int i = 0; i < 10; i++) {
	System.out.print(ran1.nextInt(100) + " ");
	}
	System.out.println();
}

在这里插入图片描述

方法摘要

  1. protected int next(int bits):生成下一个伪随机数。
  2. boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。
  3. void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。
  4. double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。
  5. float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。
  6. double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标差是1.0。
  7. int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
  8. int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
  9. long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
  10. void setSeed(long seed):使用单个 long 种子设置此随机数生成器的种子。
  • 【例子】
    1. 生成[0,1.0)区间的小数:double d1 = r.nextDouble();
    2. 生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;
    3. 生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;
    4. 生成[0,10)区间的整数:int n2 = r.nextInt(10)

File类

File类的基本用法

  • java.io.File类:文件和目录路径名的抽象表示形式。
  • File类的常见构造方法:
public File(String pathname)

以pathname为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。

  1. File的静态属性String separator存储了当前系统的路径分隔符。
  2. 通过File对象可以访问文件的属性
public boolean canRead()
public boolean exists()
public boolean isFile()
public long lastModified()
public String getName()
public boolean canWrite()
public boolean isDirectory()
public boolean isHidden()
public long length()
public String getPath()
  • 通过File对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下)
public boolean createNewFile()throws IOException
public boolean delete()
public boolean mkdir(), mkdirs()

演示

import java.io.File;
import java.io.IOException;
public class TestFile {
	/**
	* File文件类 1.代表文件 2.代表目录
	*/
	public static void main(String[] args) {
		File f = new File("d:/src3/TestObject.java");
		File f2 = new File("d:/src3");
		File f3 = new File(f2, "TestFile.java");
		File f4 = new File(f2, "TestFile666.java");
		File f5 = new File("d:/src3/aa/bb/cc/dd");
		//f5.mkdirs();
		f5.delete();
		try {
			f4.createNewFile();
			System.out.println("文件创建成功!");
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (f.isFile()) {
			System.out.println("是一个文件!");
		}
		if (f2.isDirectory()) {
			System.out.println("是一个目录!");
		}
		if (f3.isFile()) {
			System.out.println("是一个文件奥");
		}
	}
}

System类

  • System系统类,主要用于获取系统的属性和其他操作,构造方法私有。
  • 常用方法
方法名说明
static void arraycopy()复制数组
static long currentTimeMillis();获取当前系统的时间,返回的是毫秒值
static void gc();建议JVM启动垃圾回收器回收垃圾
static void exit(int status);退出jvm,如果参数表示正常退出jvm,非0表示退出异常
  • 案例
 public static void main(String[] args) {
        //arrayCopy;数组的复制
        /*
        * public static void arraycopy(
        * @NotNull  Object src,//原数组
        *  int srcPos,//从哪个位置开始复制
        *   @NotNull  Object dest,目标数组
        *   int destPos,//目标数组的位置
        *   int length //数组的长度
        * )
        * */
        int[] arr={520,1314,666,888,999};
        int[] arr2=new int[3];
        System.arraycopy(arr,2,arr2,0,arr.length-2);
        for (int x:arr2) {
            System.out.println(x);
        }

        //System.currentTimeMillis()用途计算代码执行的时间
        System.out.println(System.currentTimeMillis());
        long begin = System.currentTimeMillis();
        for(int i=0;i<10000;i++) {
            i++;
        }
        long end = System.currentTimeMillis();
        System.out.println("用时:"+(end-begin)/1000.0);

        //System.gc ;垃圾回收器

    }

在这里插入图片描述