常用类(BigDecimal & DecimalFormat & Math & Random & File类)

String,StringBuffer,StringBuilder区别

  • String 是一个定长字符串,一旦赋值,则内容固定,在对String进行修改或者重新赋值时,实际上都是在修改对象,所以在进行大量字符串拼接时,String效率非常低
  • StringBuffer 是一个可变长度的字符串,内部提供了append,insert等方法用于修改字符串中的内容,由于对象不会变更,因此在进行字符串拼接是效率高。StringBuffer里面的所有方法都是线程安全的,在线程并发时由于锁的原因效率较低
  • StringBuilder 也是一个可变长度的字符串,和StringBuffer共享相同的API(构造器,方法,属性相同),在单线程形况下,字符串拼接效率和StringBuffer一致;StringBuilder是线程不安全可变长字符串,在多线程并发时效率高于StringBuffer。

封装类

java中为所有的8个基本类型数据提供了封装类型(引用类型),对于这些基本类型的封装类提供了一系列的方法以及属性。Java中基本类型封装类表示如下:

  • int —>Integer
  • byte—>Byte
  • short—>Short
  • long—>Long
  • float—>Float
  • double—>Double
  • boolean–>Boolean
  • char—>Character
public static void main(String[] args) {

    int i = 10;
    boolean b = false;

    String s = "123";

    System.out.println(i + s);

    System.out.println(Integer.MAX_VALUE);
    System.out.println(Integer.MIN_VALUE);

    Integer i2 = new Integer("10");

    byte byt = i2.byteValue();

    System.out.println(Integer.max(10, 100));

    System.out.println(i2.toString());

    int i3 = 100;

    //1*2^6+1*2^5+1*2^2  将十进制整数转换为二进制字符串表示形式
    System.out.println(Integer.toBinaryString(i3));

    //将整数转换为字符串
    s = Integer.toString(i3);
    //将字符串转换为整数
    i3 = Integer.parseInt(s);

    s = "3.14";
    double d = Double.parseDouble(s);
}

BigDecimal & DecimalFormat

BigDecimal

在进行浮点数运算时由于计算机CPU采用的二进制计算,因此存在精度丢失问题,如:

double d1 = 0.1;
double d2 = 0.2;
System.out.println(d1 + d2);
//以上代码输出预期结果是:0.3
//但实际结果为:0.30000000000000004

对于以上问题,如果涉及到一些对精度要求较高的项目时,比如用于表示金额的字段,就极有可能出现严重后果;因此Java中提供了类java.math.BigDecimal用于解决浮点数运算时精度丢失的问题:

String s1 = "0.1";
String s2 = "0.2";
BigDecimal bd1 = new BigDecimal(s1);
BigDecimal bd2 = new BigDecimal(s2);
// 相加运算
BigDecimal r = bd1.add(bd2);
System.out.println("相加:" + r);
// 相减运算
r = bd1.subtract(bd2);
System.out.println("相减:" + r);
// 相乘运算
r = bd1.multiply(bd2);
System.out.println("相乘:" + r);
//相除运算
r = bd1.divide(bd2);
System.out.println("相除:" + r);

注意事项:

使用BigDecimal类时,一定要确保是通过String类型作为参数构造的对象,否则还是会出现精度丢失问题。

DecimalFormat

​ 在对数值格式进行处理时往往存在一些特殊的需要,比如对一个小数点位数较长的浮点数截取小数点后两位,或者需要将一个浮点数显示为百分比,采用金额符号显示等。对于这些需求,JDK中提供了java.text.NumberFormat和java.text.DecimalFormat类用于实现这些需求,实例如下:

double d = 0.34567;
//获取数值格式化实例对象
NumberFormat format  = NumberFormat.getInstance();
System.out.println(format.format(d));//0.346

//获取用于表示金额的默认格式对象
format = NumberFormat.getCurrencyInstance();
System.out.println(format.format(d));//¥0.35

//获取百分比的默认格式对象
format = NumberFormat.getPercentInstance();
System.out.println(format.format(d));//35%

​ 以上为java.text.NumberFormat提供的用于获取实例对象的静态方法,基本能够满足大多数需求,但是如果有其他格式需求,jdk还扩展了另一个类java.text.DecimalFromat用于实现定制化需求:

double d = 1231231231233.14159265535533;
//用于对数值类型格式化的工具类(小数点截取,百分比,金额)
DecimalFormat fmt = new DecimalFormat("#,###.##");
String s = fmt.format(d);
System.out.println(s);//1,231,231,231,233.14

d = 0.1354678;
fmt = new DecimalFormat("#.##%");
System.out.println(fmt.format(d));//13.55%

//将字符串类型特殊数值,解析为数值类型
String str = "56.7%";//0.567
DecimalFormat f = new DecimalFormat("##.#%");
Number n = f.parse(str);
d = n.doubleValue();
System.out.println(d);

Math&Random类

Math

Math类中包含一些用于数学运算相关的静态方法,Math类常用方法:

  • abs() 获取绝对值
  • ceil(double d) 向上取整
  • floor(double d) 向下取整
  • pow(int a,int b) 返回a的b次幂
  • max(int a,int b) 返回两数中较大的一个
  • min(int a,int b) 返回两数中较小的一个
  • sqrt(double d) 对d开平方根
  • round(double) 四舍五入
  • random() 返回0.0~1.0之间的随机浮点数(开区间,闭区间)

Random

Random类用于生成伪随机数的流,可以随机生成数值,布尔值等

构造器

  • Random() 使用默认的随机种子构建对象
  • Random(long speed) 根据提供的随机种子构建对象

常用方法

  • nextBoolean() 随机返回一个true或false值
  • nextInt(int bound) 随机返回从0~bound(不含)之间的整数
  • nextDouble() 随机返回(0,1) 左闭右开区间内的小数
  • nextFloat() 随机返回(0,1) 左闭右开区间内的小数

基于Random类实现一个随机位数的验证码生成器

import java.util.Random;

public class ValidateUtils {

	//ctrl+shift+x/y(大小写转换)
	static String s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	public static String genVCode(int count){
		Random r = new Random();
		//声明临时变量用于存储生成的验证码字符串
		String code = "";
		//循环count次获取每次取到的字符
		for(int i = 0;i<count;i++){
			//随机产生一个索引(0~s.length()-1)
			int index = r.nextInt(s.length());
			//把每次获取的字符拼接到字符串中
			code += s.charAt(index);
		}
		//循环结束后返回生成的字符串对象
		return code;
	}
	
	public static void main(String[] args) {
		//生成并输出长度为6的验证码字符串
		System.out.println(genVCode(6));
	}
}

File类

java中提供的File类可以用于跟本机的文件以及目录交互,即File可以用于表示一个标准文件以及一个目录对象

常用构造器

  • File(String path) 根据提供的抽象路径创建一个File对象
  • File(String parent,String child) 根据提供的抽象父路径和子文件(目录)名构建File对象

常用方法

  • createNewFile() 创建新文件(标准文件)
  • exists() 判断File对象是否存在
  • delete() 删除File对象所表示的文件或者目录(空目录)
  • deleteOnExit() 当JVM结束时删除
  • getName() 获取File对象所表示的文件名称
  • getParent() 获取File所指的文件或者目录的父路径
  • isFile() 判断当前File所指的是否是标准文件
  • isDirectory() 判断当前File所指的是否是目录
  • isHidden() 判断当前File对象是否是隐藏目录
  • lastModified() 获取最后修改时间
  • length() 获取File所表示文件大小(目录为4096)
  • list() 获取File所表示目录下所有子文件的名称数组
  • listFiles() 获取File对象所表示目录下的所有子File数组
  • listFiles(FileFilter filter) 通过文件过滤器将File所表示目录中符合条件的File对象过滤出来
  • listRoots() 获取当前电脑可用的磁盘根
  • mkdir() 创建当前File所表示的目录(一级)
  • mkdirs() 创建当前File所表示的目录(多级)
  • renameTo(File file) 重命名文件

你可能感兴趣的:(java,eclipse)