Java常用类

5.其他常用类

5.1Math类

java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型。如果需要更加强大的数学运算能力,计算高等数学中相关内容,可以使用apache commons下面的Math类库。

package li.normalclass.other;

public class TestMath {
    public static void main(String[] args) {
        
        System.out.println(Math.PI);//PI
        System.out.println(Math.random());//随机数
        System.out.println(Math.abs(-5));//absolute   求绝对值
        System.out.println(Math.floor(4.5));//向下取整  4.0
        System.out.println(Math.ceil(4.5));//向上取整   5.0
        System.out.println(Math.round(4.5));//四舍五入  5
        System.out.println(Math.pow(2,5));//幂指数   2的5次方   32.0
        System.out.println(Math.signum(-50.5));//判断符号-->负数返回-1.0
        System.out.println(Math.signum(123));//整数返回1.0
        System.out.println(Math.signum(0));//0返回0.0
        System.out.println(Math.sqrt(25));//开方   5.0
        
    }
}

5.2Random类

Math中虽然为我们提供了产生随机数的方法Math.random(),但是通常我们需要的随机数并不是[0,1)之间的double类型的数据,这就需要对其进行一些复杂的运算。如果使用Math.random()计算过于复杂的话,我们可以使用额外一种方式得到随机数,即Random类,这个类是专门用来生成随机数的,并且Math.random()底层调用的就是Random类的nextDouble()方法。

构造方法:

Random() 创建一个新的随机数生成器

Random(long seed) 使用单个long种子创建一个新的随机数生成器

只要种子数和nextInt()中的参数一致的话,每次生成的随机数列都是一样的(伪随机数)

例子:

package li.normalclass.other;

import java.util.Random;

/*
    Math.random()底层调用的就是Random类的nextDouble()方法
    产生[0,1)之间的随机double数
 */
public class TestRandom {
    public static void main(String[] args) {
        //随机数的生成是从种子值开始。 如果反复使用同一个种子,就会生成相同的数字系列,
        // 产生不同序列的一种方法是使种子值与时间相关
        Random rand = new Random(System.nanoTime());
        for (int i = 0; i < 10; i++) {
            //System.out.println(rand.nextDouble());
             System.out.println(rand.nextInt(20));//[0,20)
        }

        //生成一个从[10,20]的随机整数
        //思路:即[10,21)----即[0,11)+10
        for (int i = 0; i < 10; i++) {
            System.out.println(rand.nextInt(11)+10);
        }

    }
}

5.3枚举

JDK1.5引入枚举类型。枚举类型的定义包括枚举声明和枚举体。枚举体就是放置一些常量。定义枚举要使用关键字enum关键字。对于性别、季节、星期几等内容,如果定义为字符串类型,是很难限制其取值的。采用枚举可以轻松解决该问题。

所有的枚举类型隐形地继承自java.lang.Enum。枚举类型实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,它们默认都是pubilc static final 修饰的。可以直接通过枚举类型名使用它们

注意:

  • 当你需要定义一组常量时,尽量枚举类型
  • 另外尽量不要使用枚举的高级特性

例子:

  1. 定义枚举
  2. 变量定义为枚举类型
  3. 枚举变量的赋值
package li.normalclass.other;

//性别的枚举定义
public enum Gender {
    男,女
}
package li.normalclass.other;

public class Person {
    private String name ;
    private Gender sex ;//变量定义为枚举类型

    public Person() {
    }

    public Person(String name, Gender sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Gender getSex() {
        return sex;
    }

    public void setSex(Gender sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

}
package li.normalclass.other;

public class Application {
    public static void main(String[] args) {
        // 使用枚举类来定义性别
        Person person = new Person("张三",Gender.男);//枚举变量的赋值
        System.out.println(person);
    }
}

例子2:

package li.normalclass.other;

public enum Season {
    春,夏,秋,冬
}
package li.normalclass.other;

public class TestSeason {
    public static void main(String[] args) {
        //定义一个枚举变量
        Season season ;
        //给枚举变量赋值
        season = Season.冬;
        //switch
        switch(season){
            case 春:
                System.out.println("踏青 放风筝 春意盎然");break;
            case 夏:
                System.out.println("吃西瓜 吃雪糕 夏日炎炎");break;
            case 秋:
                System.out.println("赏菊 登高 秋高气爽");break;
            case 冬:
                System.out.println("滑冰 打雪仗 寒冬腊月");break;

        }
    }
}