Java中我们所用到的几种常用类

一.比较器

Comparator 和 Comparable 比较:

1.Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
(作用在实体类上)

2.而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
(作用在排序类上)

总结:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

二.内部类

1.成员内部类

定义在类中,充当类的一个成员。

访问权限:内部类可以访问外部类的属性和方法,外部类想要访问内部类的成员必须先创建内部类的对象来访问。

创建对象:new Outer().new Inner()

2.局部内部类

定义在方法中,充当方法的一个变量,注意: 局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的。

3.匿名内部类

匿名内部类,通常作为方法传参时使用,用于继承抽象类或实现接口,并不需要额外定义方法。Jdk8开始可以使用Lambda表达式进行简化。

4.静态内部类

①静态内部类可以理解为类的一个静态成员。

②静态内部类不需要依赖于外部类的对象,可以直接创建自己的对象。

③不能访问外部类的非static成员属性或方法,因为静态内部类不依赖外部对象,就可以自己创建对象,所以如果没有外部对象,就调用外部的实例成员,就产生了矛盾,因为外部的实例成员必须要有外部对象。

三.包装类

1.包装类的概念

由于基本数据类型没有类和对象的概念,java的设计理念是万事万物皆对象。

所以特定为每一种基本数据类型量身定制了一个属于自己的类,称为包装类。

在这里插入图片描述
2.包装类的应用

由于集合中不能存储基本数据类型,我们所看到的 list.add(6);事实上存储的都是包装类型,由基本数据类型升级成包装类的过程叫做“装箱”,反之称为“拆箱”;

  //1.基本数据类型和包装类之间可以自动进行转换
        //int 和 integer会自动拆箱和装箱;
        int a=6;
        Integer i =a; //装箱 int->Integar
        Integer i1 = 6; //装箱 int->Integar
        a = i1; //拆箱Integer-->int

1.装箱—拆箱 包装类 –基本数据类型
2.向上转型—向下转型 父类—子类
3.强制类型转换—自动转换 byte-short-int-long float-double

3.包装类的构造方法

1.所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例 (调用包装类的有参构造生成对象—参数类型就是对应的基本数据类型)

2.除Character类外,其他包装类可将一个字符串作为参数构造它们的实例

注意事项

1.Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false

2.当Number包装类(除了Character和Boolean其它的包装类)构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译不通过,运行时会抛出NumberFormatException异常

总结:
包装类的构造方法一般都有重载,一个构造方法的参数是对应的基本数据类型,另一个构造方法的参数是字符串类型。

1.XXXValue():包装类转换成基本类型(实例方法)

byteValue()、intValue()、longValue()、shortValue()、doubleValue()、floatValue() charValue()、booleanValue()

2.toString():以字符串形式返回包装对象表示的基本类型数据(基本类型->字符串)

3.parseXXX():把字符串转换为相应的基本数据类型数据(Character除外)(字符串->基本类型)(静态方法)

4.valueOf()(静态方法)

(1)所有包装类都有如下方法(基本类型->包装类)
public static Type valueOf(type value)
(2)除Character类外,其他包装类都有如下方法(字符串->包装类)
public static Type valueOf(String s)

四.String常用方法

  1. 长度 length()
  2. 拼接 str.concat(str2)
  3. 格式化
 //方式一
System.out.printf("大家好,我的名字叫:%s,我今年:%d岁了,我的存款有:%f %n","曹操",36,999.99);
//方式二
String s = String.format("大家好,我的名字叫:%s,我今年:%d岁了,我的存款有:%f","曹操",36,999.99);
System.out.println(s);
  1. charAt(index)返回指定索引处的字符
  2. indexOf(str)返回指定字符串在此字符串中第一次出现处的索引
  3. compareTo(str2)比较两个字符串
  4. equals()和equalsIgnoreCase()
  5. getBytes()使用默认字符集将字符串变为字节数组,IO流中会用到
  6. toCharArray() 字符串转换为字符数组
  7. 截取:subString()
  8. 转换成大小写toLowerCase() toUpperCase()
  9. 截取前后空白 trim()
  10. 替换:replace()
  11. 分割:split()
  12. 正则匹配 matches(String reg) 返回boolean

五.正则

1.概念
正则表达式,又称规则表达式。(英语:Regular Expression,常简写为regex)。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。支持正则表达式的有:PHP、Java、Python、JavaScript等。有了正则表达式写代码更加简洁,通常两三行代码就可以达到目的。

2.规则

  1. 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。

  2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。

  3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。

  4. 在中括号里面和外面含义不同,如在外时,就表示开头,如7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。

  5. .表示匹配任意的字符。

  6. \d表示数字。

  7. \D表示非数字。

  8. \w表示字母、数字、下划线,[a-zA-Z0-9_]。

  9. \W表示不是由字母、数字、下划线组成。

  10. [\u4e00-\u9fa5]匹配汉字

  11. ?: 表示出现0次或1次。

  12. +表示出现1次或多次。

  13. *表示出现0次、1次或多次。

  14. {n}表示出现n次。

  15. {n,m}表示出现n~m次。

  16. {n,}表示出现n次或n次以上。

六.StringBuffer和StringBuilder

1.区别

1.1 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String 。

1.2 当对字符串进行修改的时候,特别是字符串对象经常改变的情况下,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

七.Math和Random

  • 向上/下取整,四舍五入 ceil() floor() round()
  • 绝对值 abs()
  • 随机数 random() 范围:[0,1) 小数
  • 幂函数 pow(a,b)
  • sqrt()平方根

八.日期类

1.Date

//创建一个代表系统当前日期的Date对象
Date d = new Date();

2、创建一个我们指定的时间的Date对象:
使用带参数的构造方法Date(int year, int month, int day) ,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。

//创建一个代表2014年6月12号的Date对象
Date d1 = new Date(2014-1900, 6-1, 12); (注意参数的设置)

3、正确获得一个date对象所包含的信息,如:
Date d2 = new Date(2014-1900, 6-1, 12);
//获得年份 (注意年份要加上1900,这样才是日期对象d2所代表的年份)
int year = d2.getYear() + 1900;
//获得月份 (注意月份要加1,这样才是日期对象d2所代表的月份)
int month = d2.getMonth() + 1;
//获得日期
int date = d2.getDate();
//获得小时
int hour = d2.getHours();//不设置默认为0
//获得分钟
int minute = d2.getMinutes();
//获得秒
int second = d2.getSeconds();
//获得星期
int day = d2.getDay();

2.Calendar

1.Calendar类的功能要比Date类强大很多,考虑了时区等问题。
2.Calendar类是一个抽象类,提供了getInstance方法用来创建对象。

//1.创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
//2.创建一个指定日期的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2014, 5 - 1, 9);
//3.创建一个指定日期的Calendar对象–方式二
c1.set(Calendar.DATE,10);
c1.set(Calendar.YEAR,2015);
//4.获取时间
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;(MONTH+1)
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几
int day = c1.get(Calendar.DAY_OF_WEEK);
//5.和Date关联
setTime(new Date())

3.SimpleDateFormat

//1.创建格式化对象
SimpleDateFormat f = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
//2.调用format或parse方法,可以进行String和Date之间的转换

九.数字类

1.BigDecimal

常用方法

//BigDecimal对象中的值相加,返回BigDecimal对象
add(BigDecimal)

//BigDecimal对象中的值相减,返回BigDecimal对象
subtract(BigDecimal)

//BigDecimal对象中的值相乘,返回BigDecimal对象
multiply(BigDecimal)

//BigDecimal对象中的值相除,返回BigDecimal对象
divide(BigDecimal)

BigDecimal b1 = new BigDecimal(“0.03”);
BigDecimal b2 = new BigDecimal(“0.02”);
System.out.println(b1.subtract(b2));
//对比输出结果
BigDecimal b1 = new BigDecimal(0.03);
BigDecimal b2 = new BigDecimal(0.02);
System.out.println(b1.subtract(b2));

2.BigInteger

如果操作一个整数已经超过了long的范围,此时可以使用BigInteger。由于不是基本数据类型,所以不能使用±*/,操作方法和上面一致。

long l=999999999999999999l;
BigInteger in1=new BigInteger("999999999999999999999999999999999999999999");
BigInteger in2=new BigInteger("999999999999999999999999999999999999999998");
System.out.println(in1.subtract(in2));

十进制和二进制之间的转换:

BigInteger in = new BigInteger("10001110",2);
System.out.println(in.intValue());//二进制转换为10进制
System.out.println(in.toString(2));//十进制转换为
System.out.println(in.toString(3));

3.DecimalFormat

double pi = 3.1415927;//圆周率
//取一位整数
        System.out.println(new DecimalFormat("0").format(pi));//3
//取一位整数和两位小数
        System.out.println(new DecimalFormat("0.00").format(pi));//3.14
//取两位整数和三位小数,整数不足部分以0填补。
        System.out.println(new DecimalFormat("00.000").format(pi));// 03.142
//取所有整数部分
        System.out.println(new DecimalFormat("#").format(pi));//3
//以百分比方式计数,并取两位小数
        System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%
long c =299792458;//光速
//显示为科学计数法,并取五位小数
        System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8
//显示为两位整数的科学计数法,并取四位小数
        System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7
//每三位以逗号进行分隔。
        System.out.println(new DecimalFormat(",###").format(c));//299,792,458
//将格式嵌入文本
        System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值