栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java学习----常用类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java学习----常用类

java学习----常用类
  • 包装类
    • 基本介绍
    • 装箱和拆箱
    • 包装类和String类的转换
  • String类
    • 基本介绍
    • 创建流程
    • 常用方法
  • StringBuffer类StringBuilder类
    • 基本介绍
    • String的构造方法
    • String和StringBuffer的转换
    • StringBuilder类
  • Date日期类,Calendar日历类和新的日期
    • 第一代日期类
    • 第二代日期类
    • 第三代日期类
    • 时间戳Instant
  • System类
  • Arrays类
  • BigInteger类和BigDecimal类

包装类 基本介绍

1.针对8种基本数据类型相应的引用类型—包装类。

2.有了类的特点,就可以调用相应的方法。


装箱和拆箱

JDK5前的手动装箱和拆箱方式:装箱------基本类型到包装类型,拆箱------包装类型->基本类型。
JDK5以后有了自动装箱和拆箱方式,其实底层调用的还是之前的方法。

 		int n1 = 100;
        //手动装箱和拆箱
        Integer integer = new Integer(n1);
        Integer integer1 = Integer.valueOf(n1);
        int n2 = integer.intValue();
        //自动装箱和拆箱
        Integer integer2 = n1;
        int n3 = integer2;
包装类和String类的转换
		//包装类(Integer)->String
        //方式1
        Integer integer3 = 20;
        String str1 = integer3 + "";//这种方式integer3的类型没有转变
        //方式2
        String str2 = integer3.toString();
        //方式3
        String str3 = String.valueOf(integer3);

        //String->包装类(Integer)
        //方法1
        String s1 = "12345";
        Integer i1 = Integer.parseInt(s1);//使用了自动装箱
        //方法2
        Integer i2 = new Integer(s1);//使用了Integer的构造器

==运算符判断时,如果两边其中有一个是基本数据类型,那么判断的要求就是两边的值是否相等。

String类 基本介绍

1.字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节。

2.String类实现了接口Serializable,表示可以串行化:可以在网络中传输
实现了接口Comparable,表示它的对象可以比较大小。

1.String是final类,它不能被继承。

2.String有属性 private final char value[ ] ,用于存放字符串内容。

3.value是被final修饰的,表示 value 指向的地址是不能变化的,即不能进行数组间的赋值。

创建流程


(1).方法1 : 先从常量池查看是否有"hsp"数据空间,如果有,直接指向,如果没有,则重新创建,然后指向,s最终指向的是常量池的空间地址。

(2) 方法2 : 先在堆中创建空间,里面维护了value属性,指向常量池的"hsp"空间,如果常量池中没有"hsp",重新创建。

常用方法
		//1.equals  它的比较区分大小写
        String str1  = "hello";
        String str2 = "Hello";
        System.out.println(str2.equals(str1));
        //2.equalsIgnoreCase  它的比较忽略大小写
        String username = "johN";
        if("john".equalsIgnoreCase(username)){
            System.out.println("success!");
        }else{
            System.out.println("failure!");
        }
        //3.length 获取字符的个数
        System.out.println(str1.length());
        //4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1
        String s1 = "1234567";
        System.out.println(s1.indexOf('2'));
        //5.lastIndexOf  获取字符在字符串对象中最后一次出现的索引,索引从0开始,如果找不到,返回-1
        String s2 = "qwersdwe";
        System.out.println(s2.lastIndexOf('w'));
        //substring 截取指定范围的子串
        String name = "hello,张三";
        System.out.println(name.substring(6));//从下标6开始截取
        System.out.println(name.substring(0,5));//从下标0截取到4
		//1.toUpperCase转成大写
        String s1 = "hello";
        System.out.println(s1.toUpperCase());
        //2.toLowerCase转成小写
        System.out.println(s1.toLowerCase());
        //3.concat拼接字符串
        String s2 = "abc";
        System.out.println(s2.concat("def").concat("gh"));
        //4.replace 替换字符串中的字符
        String s3 = "123 234 123 abc abc";
        System.out.println(s3.replace("123","a"));//s3未改变
        System.out.println(s3);
        //5.split 分割字符串 返回一个数组,如果有特殊符号,需要加入转义符 
        String poem = "E:\aaa\bbb";
        String[] split = poem.split("\\");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }
        //6.toCharArray 转化成字符数组
        String s = "happy";
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            System.out.println(chs[i]);
        }
StringBuffer类StringBuilder类 基本介绍

1.很多方法和String是类似的,但是StringBuffer是可变长度的。

2.StringBuffer是一个容器。


3.StringBuffer 实现了 Serializable, 即 StringBuffer 的对象可以串行化。

4.在父类中 AbstractStringBuilder 有属性 char[] value,不是 final , 该 value 数组存放 字符串内容,是放在堆中的。

5.StringBuffer 是一个 final 类,不能被继承。

6.因为 StringBuffer 字符内容是存在 char[] value, 所有变化(增加/删除) 不用每次都更换地址(即不是每次创建新对象),(除非空间不够), 所以效率高于 String。

String和StringBuffer的比较:
1.保存的是字符串常量,里面的值不能更改,每次String 类的更新实际上就是更改地址,效率极低。

2.StringBuffer保存的是字符串变量,里面的值可以更改,不用每次更新地址,效率极高。

String的构造方法
//char[] value数组的长度为16
        StringBuffer stringBuffer = new StringBuffer();
        //char[] value数组的长度为20
        StringBuffer stringBuffer1 = new StringBuffer(20);
        //char[] value数组的长度为hello.length+16
        StringBuffer stringBuffer2 = new StringBuffer("hello");
String和StringBuffer的转换
		//String-->StringBuffer
        String str = "hello";
        //1.利用构造器,对str没有影响
        StringBuffer SB1 = new StringBuffer(str);
        //2.利用append方法
        SB1 = SB1.append(str);
        //StringBuffer--->String
        //方法1.利用toString方法
        String str2 = SB1.toString();
        //方法2.直接new
        String s = new String(SB1);
StringBuilder类

基本介绍:一个可变的字符序列,此类提供一个StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全),此类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用时,如果可能,优先使用该类,因为在大多数实现中,它比StringBuffer要快。

在StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接收任意类型的数据。

  1. StringBuilder 继承 AbstractStringBuilder 类

2.实现了 Serializable ,说明 StringBuilder 对象是可以串行化(对象可以网络传输,可以保存到文件)

  1. StringBuilder 是 final 类, 不能被继承

4.StringBuilder 对象字符序列仍然是存放在其父类 AbstractStringBuilder 的 char[] value,存放在堆中的。

5.StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的情况下使用。

Date日期类,Calendar日历类和新的日期 第一代日期类
		//Date的三种使用方式
        //第一种方式
        Date d1 = new Date();//此时默认输出的日期格式是国外的方式, 因此通常需要对格式进行转换
        //创建 SimpleDateFormat 对象,可以指定相应的格式
        //这里的格式使用的字母是规定好,不能乱写
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
        String format = sdf.format(d1);
        System.out.println(format);

        //第二种使用方式
        //通过输入一个long型数表示毫秒来获取时间
        Date d2 = new Date(1234568);
        System.out.println(d2);

        //第三种方式,恰好与第一种相反,将一个格式化的转换为默认的形式
        //在把 String -> Date , 使用的 sdf 格式需要和你给的 String 的格式一样,否则会抛出转换异常
        String s1 = "2019年12月12日 12:23:24 星期三";
        System.out.println(sdf.parse(s1));
第二代日期类
		//1. Calendar 是一个抽象类, 并且构造器是 private
        //2. 可以通过 getInstance() 来获取实例
        //3. 提供大量的方法和字段提供给程序员
        Calendar c1= Calendar.getInstance();
        System.out.println("年: "+c1.get(Calendar.YEAR));
        //这里为什么要 + 1, 因为 Calendar 返回月时候,是按照 0 开始编号
        System.out.println("月: "+(c1.get(Calendar.MONTH)+1));
        System.out.println("日:" + c1.get(Calendar.DAY_OF_MONTH));
        System.out.println("小时:" + c1.get(Calendar.HOUR_OF_DAY));
        System.out.println("分钟:" + c1.get(Calendar.MINUTE));
        System.out.println("秒:" + c1.get(Calendar.SECOND));
第三代日期类
		//使用now方法创建当前时间的对象
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);

        //分别获得各个时间
        System.out.println("年=" + ldt.getYear());
        System.out.println("月=" + ldt.getMonth());
        System.out.println("月=" + ldt.getMonthValue());
        System.out.println("日=" + ldt.getDayOfMonth());
        System.out.println("时=" + ldt.getHour());
        System.out.println("分=" + ldt.getMinute());
        System.out.println("秒=" + ldt.getSecond());

        //使用DateTimeFormatter对象将时间进行格式化
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String s = dtf.format(ldt);
        System.out.println(s);
时间戳Instant
		//通过 静态方法 now() 获取表示当前时间戳的对象
        Instant i1 = Instant.now();
        System.out.println(i1);
        //2. 通过 from 可以把 Instant 转成 Date
        Date d1 = Date.from(i1);
        System.out.println(d1);
        //3. 通过 date 的 toInstant() 可以把 date 转成 Instant对象
        Instant i2 = d1.toInstant();
        System.out.println(i2);
System类
//exit(0)表示程序退出
//0表示一个状态,正常的状态
System.out.println("123");
System.exit(0);
System.out.println("234");

//arraycopy:复制数组元素,比较适合底层使用。
//传入的参数意义分别为:源数组,从源数组那个下标开始拷贝,目标数组,从目标数组那个下标开始存放
//拷贝的元素个数
System.arraycopy(src,0,dest,0,src.length);

//currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
System.out.println(System.currentTimeMillens());
Arrays类
		Integer[] integers = {1, -4, 23, 12, 35};
        //返回数组的字符串形式
        System.out.println(Arrays.toString(integers));

        //sort方法的使用,这个是从小到大排序
        Arrays.sort(integers);
        System.out.println(Arrays.toString(integers));
        //sort方法在Arrays类中实现了重载,可以实现从大到小排序
        
        // System.out.println(Arrays.toString(integers));

        //binarySearch 通过二分搜索法进行查找,要求必须排好
        //如果数组中不存在该元素,就返回 return -(low + 1);
        System.out.println(Arrays.binarySearch(integers, 2));

        //copyOf 数组元素的复制
        //1. 从 arr 数组中,拷贝 arr.length 个元素到 newArr 数组中
        // 2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
        // 3. 如果拷贝长度 < 0 就抛出异常 NegativeArraySizeException
        Integer[] integers1 = Arrays.copyOf(integers,3);
        System.out.println("拷贝完成后:");
        System.out.println(Arrays.toString(integers1));

        //equals 比较两个数组元素内容是否完全一致
        Integer[] integers2 = {-4, 1, 12, 23, 35};
        System.out.println(Arrays.equals(integers,integers2));

        //asList 将一组值,转换成 list
        // asList 运行类型 java.util.Arrays$ArrayList
        List integers3 = Arrays.asList(1, 23, 4, 5, 6);
        System.out.println(integers3);
        System.out.println("integers3的运行类型是:"+ integers3.getClass());

BigInteger类和BigDecimal类

应用场景:
1.BigInteger适合保存比较大的整型。

//在对BigInteger进行加减乘除时,需要使用对应的方法,不能直接使用+ , -,*, 
BigInteger BigNum1 =  new BigInteger("1234567890123");
BigInteger BigNum2 =  new BigInteger("123456789");
 System.out.println(BigNum1.add(BigNum2));
  System.out.println(BigNum1.subtract(BigNum2));
  

2.BigDecimal:适合保存精度更高的浮点型(小数)。

BigDecimal digDecimal1 = new BigDecimal("1234.234513243123123");
BigDecimal digDecimal2 = new BigDecimal("1.1");
System.out.println(digDecimal1.add(digDecimal2));
//使用除法时可能会抛出异常,如果除不尽的话会有异常,因此使用以下方法解决
//商的小数点后的位数和被除数保持一致
System.out.println(digDecimal1.divide(digDecimal2,BigDecimal.ROUND_CEILING));
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276502.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号