1、Math类
(1)直接使用,无需导包;
package java.lang;
(2)final修饰的类,这个类不能被继承;
public final class Math{}
(3)private修饰构造器,即构造器私有化,不能创建Math类的对象;
不能:
(4)Math内部的所有的属性、方法都被static修饰:则,类名. 直接调用,无需创建对象;
(5)常用方法;
代码示例:
package test6_Math_class;
public class Test1 {
public static void main(String[] args) {
//常用属性
System.out.println(Math.PI);
//常用方法
System.out.println("随机数:"+Math.random());//范围[0.0, 1.0),注,右边取不到
System.out.println("绝对值:"+Math.abs(-20));
System.out.println("9.1向上取值:"+Math.ceil(9.1));
System.out.println("9.9向下取值:"+Math.floor(9.9));
System.out.println("3.3四舍五入:"+Math.round(3.3));
System.out.println("3.5四舍五入:"+Math.round(3.5));
System.out.println("5,10里大的为:"+Math.max(5, 10));
System.out.println("6,9里小的为:"+Math.min(6, 9));
}
}
(6)静态导入
代码示例:
package test6_Math_class;
//静态导入: —— 但是不建议用
import static java.lang.Math.*;
//想直接用Math类下的属性和方法,不加Math. 则需要静态导入,见上
public class Test2_static_import {
public static void main(String[] args) {
//常用属性
System.out.println(Math.PI);
//常用方法
System.out.println("随机数:"+random());//范围[0.0, 1.0),注,右边取不到
System.out.println("绝对值:"+abs(-20));
System.out.println("9.1向上取值:"+ceil(9.1));
System.out.println("9.9向下取值:"+floor(9.9));
System.out.println("3.3四舍五入:"+round(3.3));
System.out.println("3.5四舍五入:"+round(3.5));
System.out.println("最大值、最小值:");
System.out.println("5,10里大的为:"+max(5, 10));
System.out.println("6,9里小的为:"+min(6, 9));
//Math.max(2,4,7);//只能比较两个数
}
//如果跟Math中方法重复了,那么会优先走本类中的方法(就近原则)
public static int random(){
return 100;
}
}
2、Random类
代码示例:
package test7_Random_class;
import java.util.Random;
public class Test1 {
public static void main(String[] args) {
//Math类中的random()方法
//返回带正号的double值,该值大于等于0.0,且小于1.0
System.out.println("生成随机数:"+Math.random());
//但是生成随机数有一个单独的类 —— Random
//学习Random类
//(1)利用带参数的构造器创建对象: —— 用的比较少
Random r1 = new Random(1111111L);
System.out.println(r1);//java.util.Random@74a14482 ???
int i = r1.nextInt(); //返回下一个伪随机数,从这个随机数发生器的序列中均匀分布 int值。
System.out.println("随机数1:"+i);//生成的随机数都是一样的
//固定的种子seed产生固定的随机数,所以要改变:
Random r2 = new Random(System.currentTimeMillis());
//System.currentTimeMillis()返回的是当前时间距离1970年1月1号
// 午夜00:00(零点)的时间差,以毫秒为单位(即是long型),所以seed的值是不确定的
int j = r2.nextInt();
System.out.println("随机数2:"+j);
System.out.println(System.nanoTime());//每次都不一样?
//表面是在调用无参数构造器,实际底层还是调用了带参构造器
//(2)利用空参构造器 创建对象:
Random r3 = new Random();
System.out.println(r3.nextInt(10));
//带参的nextInt()方法--返回伪随机的,均匀分布int值介于0(含)
//和指定值(不包括),从该随机数生成器的序列绘制。
System.out.println(r3.nextDouble());
//返回下一个伪随机数,从这个随机数发生器的序列中 0.0和 1.0之间的 double值 0.0分布。
//同Math.random一样了。
}
}