首页 > 其他 > 详细

4.2.常用类库

时间:2021-04-06 20:58:17      阅读:20      评论:0      收藏:0      [点我收藏+]

二.常用类库

标签(空格分隔): 开课吧-03核心类库


2.1 泛型

2.1.1 定义

  • 参数化类型。将类型有原来的具体类型参数化,类似于方法中的变量参数

2.1.2 使用方法

2.1.2.1 泛型类

  • 作用:声明属性时,类型可以参数化

2.1.2.2 泛型接口

  • 作用:声明抽象方法时可以参数化
  • 实现该接口时有两种方法
  1. 指定泛型类型
  2. 不指定泛型类型
    //指定泛型类型
    public interface IntercaceName<T>{ 
        T getData(); 
    }
    
    public class Interface1 implements IntercaceName<String> {
        private String text; 
        
        @Override public String getData() { 
        return text; 
        } 
    }
    //不指定类型: 
    public class Interface1<T> implements IntercaceName<T> { 
        private T data; 
        
        @Override public T getData() { 
        return data; 
        } 
    }

2.1.2.3 泛型方法

  • 作用:提高了非继承的两个类同一方法的复用性,常和抽象方法结合使用
  • 分析:以往若想通过一个方法传两种类型的形参,需方法重载或父子类继承,现在通过泛型化参数,使得两个没有关联的两个类也能使用同一个
  • 要点:
  1. 形参泛型化和与是否泛型化无关,与方法是否泛型化有关
  2. 方法泛型具体化后,形参/返回值必须具体化
  3. 方法泛型化,若无泛型化形参,则此泛型不起作用,若返回值也为泛型,则起作用
  4. 方法返回值为泛型前提该方法必须为泛型方法
  5. 返回值为泛型,多与抽象类使用,否则需形参为泛型,不然无返回值

2.1.3 通配符

2.1.3.1 使用格式

    <? extends Parent>//指定了泛型类型的上届,?是子类
    <? super Child>//指定了泛型类型的下届,?是父类

2.1.3.2 使用位置

  • 通过构造方法,实例化对象时
    public class Demo4 {
         public static void main(String[] args) {
            Test1<? extends Demo4> t=new Test1<>();
            Test1<? super Son0fDemo4> t2=new Test1<>();
         }
    }
class Son0fDemo4 extends Demo4 { }

class Test1<T> { }

2.1.4 注意事项

  • 在编译之后程序会采取去泛型化的措施。
  • 即Java中的泛型,只在编译阶段有效。不会进入到运行时阶段
  • 在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加 类型检查和类型转换的方法。

2.2 Math类

2.2.1 常用方法

    //取绝对值
        System.out.println(Math.abs(-100));
        //取最小值
        System.out.println(Math.min(200, 300));
        //四舍五入
        System.out.println(Math.round(30.5));//31
        System.out.println(Math.round(-30.5));//-30
        //返回小于等于参数的最大整数
        System.out.println(Math.floor(30.5));//30
        System.out.println(Math.floor(-30.5));//-31
        //返回大于等于参数的最大整数
        System.out.println(Math.ceil(30.5));//31
        System.out.println(Math.ceil(-30.5));//-30

2.3 Arrays类

2.2.2 常用方法

         int[] arr = {1, 4, 3, 5, 2};
        //输出数组元素
        System.out.println(Arrays.toString(arr));
        //数组正向排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        //查找某个元素的下标
        System.out.println(Arrays.binarySearch(arr,5));
        //数组扩容
        int[] ints = Arrays.copyOf(arr, 10);

2.4 BigDecimal类

2.4.1 概念

  • 通过控制台运行0.1+0.2会发现float和double的运算误差

2.4.2 运算方法

  • 运算结果不会参与运算本身的数据,而是会被封装为一个新的BigDecimal对象
    BigDecimal b1 = new BigDecimal(0.1);
        BigDecimal b2 = new BigDecimal(0.2);
        BigDecimal b3 = b2.add(b1);//加法
        BigDecimal b4 = b2.subtract(b1);//减法 
        BigDecimal b5 = b2.multiply(b1);//乘法 结果:
        BigDecimal b6 = b2.divide(b1);//除法
        
        System.out.println(b5); //0.0200000000000000022204460492503131424770215
        System.out.println(0.1*0.2); //0.020000000000000004

2.5 Date类

2.5.1 作用:表示特定的时刻,精度为毫秒

2.5.2 常用方法

  • Date():不传参,传入当前日期
  • getTime:获取当前毫秒数
  • setTime:设置当前毫秒数

2.5 DateFormat类

2.5.1 作用

  • 格式化日期字符串

2.5.2 常用方法

        //将日期对象转换成字符串
        SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = s.format(new Date());
        System.out.println(time);
        
        //将字符串转换成日期对象
        Date date = s.parse("2021-10-1 20:11:33");
        System.out.println(date);

面试题:求一个人年龄或给定年龄求哪一年出生的

            //求一个人的年龄
        System.out.println((new Date().
            getTime()-date.getTime())/1000/60/60/24);//date为变量
            
        //求哪一年出生的
        int age=18;
        System.out.println(new Date().getTime()/1000/60/60/24-age);

2.6 Calendar类

2.6.1 作用

  • 传入年月日等时间对象,比Date类更具国际化

2.6.2 常用方法

        //实例化
        Calendar c=Calendar.getInstance();
        //获取值
        //原理:通过int类型field[]数组存储全局常量,YEAR=1,MONTH=2,WEEK=3
        //这些数字就是数组的下标,通过全局常量对应的下标对数据进行操作
        //年份
        System.out.println(c.get(Calendar.YEAR));
        //月份 1-12月对应0-11 获取正确的月份需+1
        System.out.println(c.get(Calendar.MONTH)+1);
        //第几周
        System.out.println(c.get(Calendar.WEEK_OF_YEAR));
        //几号
        System.out.println(c.get(Calendar.DAY_OF_MONTH));
        //周几 周日对应1
        System.out.println(c.get(Calendar.DAY_OF_WEEK)-1);
        //一年第几天
        System.out.println(c.get(Calendar.DAY_OF_YEAR));
        //增减值
        c.add(Calendar.YEAR,-1);
        //获取日期对象
        Date time = c.getTime();
        //获取最大值
        c.set(Calendar.MONTH, 1);
        System.out.println(c.getActualMaximum(Calendar.DAY_OF_MONTH));//2月最大天数

2.7 String类

2.7.1 定义

  • 字符串是不变的,值在创建后无法更改。

2.7.2 原理

  • 通过char[]数组存储,长度确定

2.7.3 拼接

  1. 用加号(+)
  • 分析:在方法区中生成新的字符串,GC不能回收,生成较多内存垃圾
  1. 用实现类(可变字符序列)
  • StringBuilder:线程不安全,效率高
  • StringBuffer:线程安全,效率低
  • 原理:通过构造方法构造一个字符串缓冲区,其中无字符,初始容量为16个字符,存满自动扩容,通过append方法进行拼接

2.7.4 常用方法

    /**
     * 1. 练习 1:StringBuffer 中的 reverse()
     */
    public static void reverse() {
        String str = "I love China";
        System.out.println(new StringBuffer(str).reverse().toString());
    }
    
     /**
     * 2. 练习 2:使用 String 的方法按照空格间隔每部分数据,然后再根据等号切割
     */
    public static void spilt() {
        //实例化学生类对象
        Student s=new Student();
        //要分割的数据
        String info = "name=王五 age=18 classNum=1101";
        //分割后的数据
        String str[] = info.split(" |=");

4.2.常用类库

原文:https://www.cnblogs.com/ly411/p/14623355.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!