java常用类
数字相关类
Short: 16位 2字节 有符号的以二进制补码表示的整数(32768)
Int :32位(范围:10位数 开头是2)
Long: 64位
Float :32位
Double:64位(float和double都不能表示很精确的数字)
BigInteger :无限长的整数
BigDecimal:无限长的小数(bigdecimal做除法时,需要注意截断,防止出现无限循环小数)
BigDecimal num1 = new BigDecimal("10");
BigDecimal num2 = new BigDecimal("3");
BigDecimal num3 = num1.devide(num2,3,BigDecimal.ROUND_HALF_UP);
Random(java.util包下的):
nextInt()返回一个随机的整数
nextInt(int a)返回一个[0,a)之间的随机int
nextDouble()返回一个0.0-1.0之间的double
ints方法批量返回随机数数组
Math
Math.random()返回一个0.0-1.0之间的double
Math.obs(-5);
Math.max(-5,-8);
Math.pow(-5,2);
Math.round(3.5);
Math.ceil(3.5);
Math.floor(3.5);
字符串相关类
String类
不可变对象,加减操作性能比较差
String a = "123;456;789;123 ";
System.out.println(a.charAt(0)); // 返回第0个元素
System.out.println(a.indexOf(";")); // 返回第一个;的位置
System.out.println(a.concat(";000")); // 连接一个新字符串并返回,a不变
System.out.println(a.contains("000")); // 判断a是否包含000
System.out.println(a.endsWith("000")); // 判断a是否以000结尾
System.out.println(a.equals("000")); // 判断是否等于000
System.out.println(a.equalsIgnoreCase("000"));// 判断在忽略大小写情况下是否等于000
System.out.println(a.length()); // 返回a长度
System.out.println(a.trim()); // 返回a去除前后空格后的字符串,a不变
String[] b = a.split(";"); // 将a字符串按照;分割成数组
for (int i = 0; i < b.length; i++) {
System.out.println(b[i]);
}
System.out.println("===================");
System.out.println(a.substring(2, 5)); // 截取a的第2个到第5个字符 a不变
System.out.println(a.replace("1", "a"));
System.out.println(a.replaceAll("1", "a")); // replaceAll第一个参数是正则表达式
System.out.println("===================");
String s1 = "12345?6789";
String s2 = s1.replace("?", "a");
String s3 = s1.replaceAll("[?]", "a");
// 这里的[?] 才表示字符问号,这样才能正常替换。不然在正则中会有特殊的意义就会报异常
System.out.println(s2);
System.out.println(s3);
System.out.println(s1.replaceAll("[\\d]", "a")); //将s1内所有数字替换为a并输出,s1的值未改变。
输出
1
3
123;456;789;123 ;000
false
false
false
false
16
123;456;789;123
123
456
789
123
===================
3;4
a23;456;789;a23
a23;456;789;a23
===================
12345a6789
12345a6789
aaaaa?aaaa
可变字符串
StringBuffer是同步的,线程安全的,修改快速的,
StringBuild是不同步的,线程不安全的,修改更加快速
可变字符串在内存上的体现
StringBuffer sb1 = new StringBuffer("123");
StringBuffer sb2 = sb1;
sb1.append("12345678901234567890123456789012345678901234567890");
System.out.println(sb2); //sb1 和 sb2还是指向同一个内存的
//输出:12312345678901234567890123456789012345678901234567890
capacity()计算字符串在内存中占用的大小
//StringBuffer的的初始大小为(16+初始字符串长度)即capacity=16+初始字符串长度
//length 实际长度 capacity 存储空间大小
StringBuffer sb1 = new StringBuffer();
System.out.println("sb1 length: " + sb1.length());
System.out.println("sb1 capacity: " + sb1.capacity());
System.out.println("=====================");
StringBuffer sb2 = new StringBuffer("123");
sb2.append("456");
System.out.println("sb2 length: " + sb2.length());
System.out.println("sb2 capacity: " + sb2.capacity());
System.out.println("=====================");
sb2.append("7890123456789");
System.out.println("sb2 length: " + sb2.length());
System.out.println("sb2 capacity: " + sb2.capacity());
System.out.println("=====================");
sb2.append("0");
System.out.println("sb2 length: " + sb2.length());
System.out.println("sb2 capacity: " + sb2.capacity());
//一旦length大于capacity时,capacity便在前一次的基础上加1后翻倍;
System.out.println("=====================");
//当前sb2length 20 capacity 40, 再append 70个字符 超过(加1再2倍数额)
sb2.append("1234567890123456789012345678901234567890123456789012345678901234567890");
System.out.println("sb2 length: " + sb2.length());
System.out.println("sb2 capacity: " + sb2.capacity());
//如果append的对象很长,超过(加1再2倍数额),将以最新的长度更换
System.out.println("=====================");
sb2.append("0");
System.out.println("sb2 length: " + sb2.length());
System.out.println("sb2 capacity: " + sb2.capacity());
sb2.trimToSize();//释放掉空的空间
System.out.println("=====after trime================");
System.out.println("sb2 length: " + sb2.length());
System.out.println("sb2 capacity: " + sb2.capacity());
输出
sb1 length: 0
sb1 capacity: 16
=====================
sb2 length: 6
sb2 capacity: 19
=====================
sb2 length: 19
sb2 capacity: 19
=====================
sb2 length: 20
sb2 capacity: 40
=====================
sb2 length: 90
sb2 capacity: 90
=====================
sb2 length: 91
sb2 capacity: 182
=====after trime================
sb2 length: 91
sb2 capacity: 91
Process finished with exit code 0
时间相关类
java.util.Date(基本废弃,Deprecated)
常用方法:getTime()返回自1970.1.1以来的毫秒数 long型
java.sql.Date和数据库对应的时间类
Calendar是目前程序中最常用的,但是是抽象类
Calendar gc = Calendar.getInstance();
Calendar gc2 = new GregorianCalendar();
//gc与gc2是同一种对象
java.time
格式化类
专门用于处理前三种类的格式化输出。
NumberFormat:数字格式化,抽象类
DecimalFormat df1,df2;
System.out.println("整数部分为0的情况,0/#的区别");
// 整数部分为0 , #认为整数不存在,可不写; 0认为没有,但至少写一位,写0
df1 = new DecimalFormat("#.00");
df2 = new DecimalFormat("0.00");
System.out.println(df1.format(0.1)); // .10
System.out.println(df2.format(0.1)); // 0.10
System.out.println("小数部分0/#的区别");
//#代表最多有几位,0代表必须有且只能有几位
df1 = new DecimalFormat("0.00");
df2 = new DecimalFormat("0.##");
System.out.println(df1.format(0.1)); // 0.10
System.out.println(df2.format(0.1)); // 0.1
System.out.println(df1.format(0.006)); // 0.01
System.out.println(df2.format(0.006)); // 0.01
System.out.println("整数部分有多位");
//0和#对整数部分多位时的处理是一致的 就是有几位写多少位
df1 = new DecimalFormat("0.00");
df2 = new DecimalFormat("#.00");
System.out.println(df1.format(2)); // 2.00
System.out.println(df2.format(2)); // 2.00
System.out.println(df1.format(20)); // 20.00
System.out.println(df2.format(20)); // 20.00
System.out.println(df1.format(200)); // 200.00
System.out.println(df2.format(200)); // 200.00
字符串的format
String message = "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}";
Object[] array = new Object[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q"};
String value = MessageFormat.format(message, array);
System.out.println(value);
message = "oh, {0,number,#.##} is a good number";
array = new Object[]{new Double(3.1415)};
value = MessageFormat.format(message, array);
System.out.println(value);
SimpleDateFormat
String strDate = "2008-10-19 10:11:30.345" ;
// 准备第一个模板,从字符串中提取出日期数字
String pat1 = "yyyy-MM-dd HH:mm:ss.SSS" ;
// 准备第二个模板,将提取后的日期数字变为指定的格式
String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒" ;
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1) ; // 实例化模板对象
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ; // 实例化模板对象
Date d = null ;
try{
d = sdf1.parse(strDate) ; // 将给定的字符串中的日期提取出来
}catch(Exception e){ // 如果提供的字符串格式有错误,则进行异常处理
e.printStackTrace() ; // 打印异常信息
}
System.out.println(sdf2.format(d)) ; // 将日期变为新的格式
java8特性:DateFormatter 这是一个线程安全的格式化类
String dateStr= "2016年10月25日";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
LocalDate date= LocalDate.parse(dateStr, formatter);
System.out.println(date.getYear() + "-" + date.getMonthValue() + "-" + date.getDayOfMonth());
System.out.println("==========================");
//将日期转换为字符串输出
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy年MM月dd日 hh:mm:ss");
String nowStr = now.format(format);
System.out.println(nowStr);
jar机制
jar文件,是java所特有的一种文件格式,用于可执行程序文件的传播。jar文件实际上是一组class文件的压缩包。
优势:
jar文件包括很多个class,比多层目录更加简洁。
jar文件经过压缩,只有一个文件,在网络下载和传播方面,更具有优势。
jar文件只包括class没有包含java文件,在保护源文件和知识版权方面,能够起到更好的作用
format = DateTimeFormatter.ofPattern(“yyyy年MM月dd日 hh:mm:ss”);
String nowStr = now.format(format);
System.out.println(nowStr);
# jar机制
jar文件,是java所特有的一种文件格式,用于可执行程序文件的传播。jar文件实际上是一组class文件的压缩包。
优势:
jar文件包括很多个class,比多层目录更加简洁。
jar文件经过压缩,只有一个文件,在网络下载和传播方面,更具有优势。
jar文件只包括class没有包含java文件,在保护源文件和知识版权方面,能够起到更好的作用
将多个class文件压缩成一个jar文件,可以稳定给一个版本号,更加容易进行版本控制。