JavaNote9
Java中的常用类(常用方法)
1. 系统相关的类
- System:表示系统的意思.
public static void main(String[] args) {
//数组拷贝操作
//static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
int[] src = {1,2,3,4,5,6};//原数组
int[] dest = new int[10];//目标数组
System.out.println(Arrays.toString(dest));//[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
System.arraycopy(src, 1, dest, 6, 4);
System.out.println(Arrays.toString(dest));//[0, 0, 0, 0, 0, 0, 2, 3, 4, 5]
//static long currentTimeMillis() 返回以毫秒为单位的当前时间。
long time = System.currentTimeMillis();
System.out.println(time);//1502802226824
//public static void exit(int status) 退出程序(JVM) 一般的,传入0表示正常结束,其他表示异常结束
System.exit(0);
System.out.println("ending........");
//static void gc() 强制运行垃圾回收器
}
- Runtime:表示Java的运行过程.
- 每一个java虚拟机都对应了一个Runtime类的实例
注意:通过观察源代码发现System类中的exit()和gc()两个方法,底层都调用了Runtime的exit()和gc()方法.
2. 数学相关的三个常用类
- Math:Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数等,都是静态方法,使用不多.
//Math类中的常量和静态方法
public static void main(String[] args) {
//static double PI 比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值
System.out.println(Math.PI);//3.141592653589793
System.out.println(Math.max(88, 66));//88
//static double random() 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。 [0.0, 1.0)---随机数
double ret = Math.random();
System.out.println((int)(ret * 100));//12
}
- BigDecimal:float和double都不能表示精确的小数,此时使用BigDecimal,用于处理金钱和精度要求高的数据.
public static void main(String[] args) {
//使用double:结果不精确
System.out.println(0.09 + 0.01);//0.09999999999999999
System.out.println(1.0 - 0.33);//0.6699999999999999
System.out.println(4.015 * 1000);//4014.9999999999995
System.out.println(12.3 / 100);//0.12300000000000001
System.out.println("------------");
//使用BigDecimal:BigDecimal(double val)
BigDecimal num1 = new BigDecimal(0.09);
BigDecimal num2 = new BigDecimal(0.01);
System.out.println(num1.add(num2));//0.09999999999999999687749774324174723005853593349456787109375
//使用BigDecimal:BigDecimal(String val)--->通常建议优先使用 String 构造方法。
num1 = new BigDecimal("0.09");
num2 = new BigDecimal("0.01");
System.out.println(num1.add(num2));//0.10
}
- BigInteger:表示大整型,如果两个long类型的最大值相运算,结果long再也存储不下,此时使用BigInteger,一般不用.
3. 字符串
- 字符串的分类
- 不可变的字符串:String:当前对象创建完毕之后,该对象的内容(字符序列)是不能改变的,一旦内容改变就是一个新的对象.
- 可变的字符串:StringBuilder/StringBuffer:当对象创建完毕之后,该对象的内容可以发生改变,当内容发生改变的时候,对象保持不变.
注意:字符串的本质:底层其实就是一个char[]
String类:
特点字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中。
//String对象的创建
String s1 = "abc"; // s1 指向的内存中只有一个对象abc(常量池)。
String s2 = new String("abc"); // s2 指向的内容中有两个对象 abc(常量池)、new(堆) 。
//String对象的空值
String str 1 = null;//没有初始化,没有分配内存空间.
String str2 = "";//已经初始化,分配内存空间,不过没有内容.
System.out.println(s1==s2);//false,"=="比较的是引用的内存地址是否相同.
System.out.println(s1.equals(s2));//true ,字符串中equals比较的是字符串内容是否相同
String类中的常用方法
1:String的创建和转换:
byte[] getBytes():把字符串转换为byte数组
char[] toCharArray():把字符串转换为char数组
String(byte[] bytes):把byte数组转换为字符串
String(char[] value):把char数组转换为字符串
2:获取字符串信息
int length() 返回此字符串的长度
char charAt(int index) 返回指定索引处的 char 值
int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引。
int lastIndexOf(String str)返回指定子字符串在此字符串中最右边出现处的索引
3:字符串比较判断
boolean equals(Object anObject) 将此字符串与指定的对象比较。
boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写
boolean contentEquals(CharSequence cs) 将此字符串与指定的 CharSequence 比较(底层与equals相同)
4:字符串大小写转换
String toUpperCase() 把当前字符串转换为大写(谁调用该方法,谁就是当前字符)
String toLowerCase() 把当前字符串转换为小写
StringBuffer和StringBuilder
StringBuffer和StringBuilder 都表示可变的字符串,功能方法都是相同的.
StringBuffer和StringBuilder的区别:
- StringBuffer: StringBuffer中的方法都使用了synchronized修饰符,表示同步的,在多线程并发的时候可以保证线程安全,保证线程安全的时候,性能(速度)较低.
- StringBuilder:StringBuilder中的方法都没有使用了synchronized修饰符,不安全,但是性能较高.
常用方法:
append(Object val):表示追加任意类型数据
StringBuilder deleteCharAt(int index) :删除字符串中,指定位置的字符
4. 随机数
- Random类:用于生产一个伪随机数(通过相同的种子,产生的随机数是相同的)。
public static void main(String[] args) {
Random r1 = new Random(10);
System.out.println(r1.nextBoolean());//Boolean类型的随机数
System.out.println(r1.nextDouble());//Double类型的随机数
System.out.println(r1.nextInt());//Int类型的随机数
System.out.println(r1.nextInt(20));//Int类型的随机数(0~20)
System.out.println("------------");
//生成34~179之间的随机数 ---> 34 + [0, 145)
int num = new Random().nextInt(145) + 34;
System.out.println(num);
}
- ThreadLocalRandom类:是Java7新增类,是Random类的子类,在多线程并发情况下,保证了线程的安全性。
public static void main(String[] args) {
ThreadLocalRandom random = ThreadLocalRandom.current();
System.out.println(random.nextInt(16));
System.out.println(random.nextInt(34, 179));//直接生成[34, 179)之间的随机数
}
- UUID类:真正意义上的随机数(唯一)
public static void main(String[] args) {
String uuid = UUID.randomUUID().toString();
System.out.println(uuid);//b17a465e-aeee-4912-8269-c32675d6a69e
}
5. 日期类
- Date类: java.util.Date类,不是java.sql.Date.
public static void main(String[] args) {
//创建Date对象
Date date = new Date();
System.out.println(date);//Tue Aug 22 11:06:09 CST 2017
//public Date(long date) long--->Date对象
date = new Date(System.currentTimeMillis());
System.out.println(date);//Tue Aug 22 11:06:09 CST 2017
//Date对象--->long
System.out.println(date.getTime());//long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
}
- DateFormat/SimpleDateFormat类.
SimpleDateFormat类:是DateFormat的子类,支持自定义格式模式.(更强大)
public static void main(String[] args) throws ParseException {
//自定义日期模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
//格式化(format): Date类型对象------->String类型:
String time = sdf.format(new java.util.Date());
System.out.println(time);
//解析(parse): String类型时间------>Date类型
//注意:使用什么风格格式化的,必须使用相同风格解析回去
java.util.Date d = sdf.parse(time);
System.out.println(d);
}
- Calendar类.
日历类(Calendar):是抽象类,表示日历,比Date更强大.
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c);
System.out.println("年:"+ c.get(Calendar.YEAR));
System.out.println("月:"+ (c.get(Calendar.MONTH) + 1));
System.out.println("日:"+ c.get(Calendar.DAY_OF_MONTH));
System.out.println("时:"+ c.get(Calendar.HOUR_OF_DAY));
System.out.println("分:"+ c.get(Calendar.MINUTE));
System.out.println("秒:"+ c.get(Calendar.SECOND));
System.out.println("------------");
//Calendar---->Date类型
Date d = c.getTime();
//void add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。
System.out.println("日:"+ c.get(Calendar.DAY_OF_MONTH));
c.add(Calendar.DAY_OF_MONTH, 220);
System.out.println(c.getTime().toLocaleString());
}
6. 正则表达式
正则表达式(Regex)表示表达式正确的规则:
主要用于(匹配判断,分割操作,替换操作(网络爬虫(Lucene)))
public static void main(String[] args {
System.out.println("123456".matches("\\d{5,10}"));//true(正则表达式)
//判断手机号码
String input = "18702823333";
String regex = "^1[3|4|5|7|8]\\d{9}$";
System.out.println(input.matches(regex));//true
//验证邮箱
regex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
System.out.println("9584acg@qq.com".matches(regex));
}
最后附上Java学习网址