常用API

文章目录

  • 1、String类
    • String概述
    • 创建对象的两种方式
    • 字符串的内容比较
    • String常用API
    • String类开发验证码功能
    • 手机号码屏蔽功能
  • 2、Object类
    • Object类的作用
    • Object类的常用方法
    • **Object的toString方法**
    • Object的equals方法
  • 3、Objects类
  • 4、StringBuilder类
  • 5、Math类
  • 6、System类
  • 7、BigDecimal作用
  • 8、日期时间
    • Date类
    • SimpleDateFormat类
    • Calendar类
  • 9、JDK8开始新增日期API
    • LocalDate、LocalTime、LocalDateTime
    • Instant时间戳
    • DateTimeFormatter类
    • Period类

1、String类

String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能

String概述

  • java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串

  • Java程序中的所有字符串文字(例如“abc”)都为此类的对象

    String name = "小吴";
    String schoolName = "B站大学";
    

String类的特点详解

  • String其实常被称为不可变字符串类型,它的对象在创建后不能被更改

    public class StringDemo01 {
        public static void main( String[] args ) {
            String name = "小吴";
            name+="在";
            name+="敲Bug";
            System.out.println(name);
        }
    }
    

    在这里插入图片描述

  • String是什么,可以做什么?

    • 字符串类型,可以定义字符串变量指向字符串对象。
  • String是不可变字符串的原因?

    • String变量每次的修改其实都是产生并指向了新的字符串对象。
    • 原来的字符串对象是没有改变的,所以称不可变字符串。

创建对象的两种方式

  • 方式一:直接使用“ ”定义。(推荐方式)

    String name = "小吴在敲Bug";
    
  • 方式二:通过String类的构造器创建对象。

    构造器 说明
    public String() 创建一个空白字符串对象,不含有任何内容
    public String(String original) 根据传入的字符串内容,来创建字符串对象
    public String(char[ ] chs) 根据字符数组的内容,来创建字符串对象
    public String(byte[ ] chs) 根据字节数组的内容,来创建字符串对象
    package string;
    
    
    public class StringDemo02 {
        public static void main( String[] args ) {
            //方式一:直接使用双引号得到字符串对象
            String name2 = "我恨Java";
            System.out.println(name2);
    
            //方式二:
            //1、public String():创建一个空白字符串对象,不含有任何内容(几乎不用)
            String s1 = new String();//s1=""
            System.out.println(s1);
    
            //2、public String(String original):根据传入的字符串内容,来创建字符串对象(几乎不用)
            String s2 = new String("我爱学习");
            System.out.println(s2);
    
            //3、public String(char[ ] chs):根据字符数组的内容,来穿件字符串对象
            char[] chars = {'a','b','学','习'};
            String s3 = new String(chars);
            System.out.println(s3);
    
            //4、public String(byte[] b):根据字节数组的内容,来创建字符串对象
            byte[] bytes = {97,98,99,65,66,67};
            String s4 = new String(bytes);
            System.out.println(s4);     //会把字节数组中的每个元素转换为对应的字符数组
        }
    }
    
  • “ ”和构造器给出的字符串有区别吗?

    • 以“ ”方式给出的字符串对象,在字符串常量池中存储,而且想通内容只会在其中存储一份。
    • 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中 (分开存储)

字符串的内容比较

  • 推荐使用String类提供的“equals”比较:只关心内容一样即可
  • equalsIgnoreCase: 忽略大小写进行比较
  1. 如果是字符串比较应该实用什么方式进行比较,为什么?
    • 使用S天天日你哥提供的equals方法。
    • 只关心内容一样就放回true。
  2. 开发中什么时候使用==比较?
    • 基本数据类型比较时实用。

String常用API

方法名 说明
public int length() 返回此字符串的长度
public char charAt(int index) 获取某个索引位置出的字符
public char[ ] toCharArray() 将当前字符串转换成字符数组返回
public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串 (包前不包后)
public String substring(int beginIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
public String replace(CharSequence traget, CharSequence replacement) 使用新值,将字符串中的旧值替换,得到新的字符串
public boolean contains(CharSequence s) 判断字符串是否包含了指定的字符串
public boolean startsWith(String prefix) 判断以什么开始
public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组返回

Demo

public class StringAPIOttherDemo05 {
    public static void main( String[] args ) {
        //public int length ():返回此字符串的长度
        String name = "我爱学习Java";
        System.out.println(name.length());

        //public char charAt ( int index):获取某个索引位置出的字符
        char c = name.charAt(1);
        System.out.println(c);

        //public char[] toCharArray (): 将当前字符串转换成字符数组返回
        char[] chars = name.toCharArray();
        for (char aChar : chars) {
            System.out.println(aChar);
        }


        //public String substring ( int beginIndex, int endIndex):根据开始和结束索引进行截取,得到新的字符串 (包前不包后)
        String rs = name.substring(0, 4);
        System.out.println(rs);

        //public String substring ( int beginIndex)|从传入的索引处截取,截取到末尾,得到新的字符串
        String rs2 = name.substring(4);
        System.out.println(rs2);

        //public String replace (CharSequence traget, CharSequence replacement):使用新值,将字符串中的旧值替换,得到新的字符串
        String name2="小吴是最厉害的80后,小吴棒棒的,我好爱小吴";
        String rs3 = name2.replace("小吴", "***");
        System.out.println(rs3);

        //public boolean contains(CharSequence s):判断字符串是否包含了指定的字符串
        System.out.println(name2.contains("小吴"));
        System.out.println(name2.contains("大吴"));

        //public boolean startsWiths(String prefix):判断以什么开始
        System.out.println(name2.startsWith("小吴"));
        System.out.println(name2.startsWith("80后"));
        
        //public String[] split (String regex):根据传入的规则切割字符串,得到字符串数组返回
        String name3 = "Java,HTML,Css";
        String[] names = name3.split(",");
        for (String s : names) {
            System.out.println(s);
        }

    }
}

String类开发验证码功能

需求:

  • 随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。

分析:

  1. 定义一个String类型的变量存储a-zA-Z0-9之间的全部字符。
  2. 循环5次,随机一个范围内的索引,获取对应字符连接起来即可。

Demo

package string;

import java.util.Random;

public class StringExen1 {
    public static void main( String[] args ) {
        // 1.定义可能出现的字符信息
        String datas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        // 2.循环几次,每次生成一个随机的索引,提取对应的字符连接起来即可
        String code = "";
        Random r = new Random();
        for (int i = 0; i < 5; i++) {
            //随机一个索引
            int index = r.nextInt(datas.length());
            char c = datas.charAt(index);
            code += c;
        }

        // 3.输出字符串变量即可
        System.out.println(code);
    }
}

手机号码屏蔽功能

需求:

  • 以字符串的形式从键盘接收一个手机号,将中间四位号码屏蔽,最终效果
    在这里插入图片描述

分析:

  1. 键盘录入一个字符串,用Scanner实现。
  2. 截取字符串前三位,截取字符串后四位。
  3. 将截取后的两个字符串,中间加上****进行拼接,输出即可

Demo

public class StringExec2 {
    public static void main( String[] args ) {
        // 1.键盘录入一个手机号码
        Scanner sc = new Scanner(System.in);
        System.out.printf( "请输入您的手机号码:");
        String tel = sc.next();

        // 2.截取号码的前三位,后四位
        String before = tel.substring(0, 3);
        String after = tel.substring(7);        //从索引开始到末尾
        String s = before + "****" + after;
        System.out.println(s);
    }
}

2、Object类

Object类的作用

  • 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类
  • Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法

Object类的常用方法

方法名 说明
public String toString() 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
public Boolean equals(Object o) 默认比较当前对象与另一个对象的地址是否相同,想通返回true,不同放回false

Object的toString方法

问题引出:

  • 开发中直接输出对象,默认输出对象的地址其实是毫无意义的。
  • 开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。

toString存在的意义:

  • 父类toString()方法存储的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息
  • 让子类重写,以便返回子类对象的内容
@Override
public String toString( ) {
    return "Student{" +
            "name='" + name + '\'' +
            ", sex=" + sex +
            ", age=" + age +
            '}';
}

Object的equals方法

问题思考:

  • 直接比较两个对象的地址是否相同完全可以用“==”代替equals。

equals存在的意义

  • 默认是与另一个对象比较地址是否一样
  • 父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则
@Override
public boolean equals( Object o ) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Student student = (Student) o;
    return sex == student.sex && age == student.age && name.equals(student.name);
}

3、Objects类

  • Objects类与Object还是继承关系,Objects类是从JDK1.7开始之后才有的

  • Objects的常见方法:

    方法名 说明
    public static boolean equals (Object a, Object b) 比较两个对象的,底层非空判断,从而可以避免空指针异常。再进行equals比较
    public static boolean IsNull(Object obj) 判断变量是否为null,为null返回true,反之返回false
  • 源码分析

    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }
    
  • 对象进行内容比较的时候建议使用什么?为什么?

    1. 建议使用Objects提供的equals方法
    2. 比较的结果是一样的,但是更安全

4、StringBuilder类

  • StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器
  • 作用: 提高字符串的操作效率,如拼接、修改等

StringBuilder构造器

名称 说明
public StringBuilder() 创建一个空白的可变的字符串对象,不包含任何内容
public StringBuilder(String str) 创建一个指定字符串的可变字符串对象

StringBuilder常用方法

方法名称 说明
public StringBuilder append(任意类型) 添加数据并返回StringBuilder对象本身
public StringBuilder reverse() 将对象的内容反转
public int length() 返回对象内容长度
public String toString() 通过toString()就可以实现把StringBuilder转换为String

  1. 为什么拼接,反转字符串建议使用StringBuilder?
    • String:内容是不可变的、拼接字符串性能差
    • StringBuilder:内容是可变的、拼接字符串性能好、代码优雅
    • 定义字符串使用String
    • 拼接、修改等操作字符串使用StringBuilder

5、Math类

  • 包含执行基本数字运算的方法,Math类没有提供公开的构造器

Math类的常用方法

方法名 说明
public static int abs(int a) 获取参数绝对值
public static double ceil(double a) 向上取整
public static double floor(double a) 向下取整
public static int round(float a) 四舍五入
public static int max(int a,int b) 获取两个int值中的较大值
public static double random() 返回值为double的随机值,范围[0.0,1.0)

6、System类

  • System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化

System类的常用方法

方法名 说明
public static void exit(int status) 终止当前运行的Java虚拟机,非零表示异常终止
public static long currentTimeMillis() 返回当前系统的时间毫秒值形式
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组拷贝

7、BigDecimal作用

  • 用于解决浮点型运算精度失真的问题
  • 使用步骤
    • 创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)
      public static BigDecimal valueOf(double val);		//包装浮点数成为BigDecimal对象
      

BigDeciaml常用API

方法名 说明
public BigDeciaml add(BigDeciaml b) 加法
public BigDeciaml subtract(BigDecimal b) 减法
public BigDeciaml multiply(BigDeciaml b) 乘法
public BigDeciaml divide(BigDeciaml b) 除法
public BigDeciaml divide(另一个BigDeciaml对象,精确几位,舍入模式) 除法

8、日期时间

Date类

  • Date类的对象在Java中代表的是当前所在系统的此刻时间

Date的构造器

名称 说明
public Date() 创建一个Date对象,代表的是系统当前此刻日期时间
public Date(long time) 把时间毫秒值转换成Date日期对象

Date的常用方法

名称 说明
public long getTime() 获取时间对象的毫秒值
public void setTime(long time) 设置日期对象的时间为当前时间毫秒值对应的时间

SimpleDateFormat类

  • 可以对Date对象时间毫秒值 格式化 成我们想要的时间形式
  • 也可以把字符串的时间形式 解析 成日期对象

SimpleDateFormat的构造器

名称 说明
public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认格式
public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat,使用指定的格式

SimpleDateFormat的常用方法

名称 说明
public final String format(Date date) 将日期格式化成日期/时间字符串
public final String format(Object time) 将时间毫秒值式化成日期/时间字符串
public Date parse(String source) 从给定字符串的开始解析文本以生成日期

Calendar类

  • Calendar代表了系统此刻日期对应的日历对象

  • Calendar是一个抽象类,不能直接创建对象

  • Calendar获取日历对象

    public static Calendar getinstance();		//获取当前日历对象
    

Calendar的常用方法

名称 说明
public int get(int field) 取日期中的某个字段信息
public void set(int field,int value) 遍历日历的某个字段信息
public void add(int field,int amount) 为某个字段增加/减少指定的值
public final Date getTime() 拿到此刻日期对象
public long getTimeInMillis() 拿到此刻时间毫秒值

9、JDK8开始新增日期API

  • 从Java8开始,Java.time包提供了新的日期和时间API,主要涉及类型有常用API_第1张图片
  • 新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间和时间进行运算更加方便
  • 其次,新API的类型几乎全部都是不变类型(类似于String类),可以放心使用不必担心被修改

LocalDate、LocalTime、LocalDateTime

  • 他们分别表示日期、时间、日期时间对象、他们的类的实例是不可变的对象
  • 他们三者构建对象和API都是通用的

构建对象的方式如下:

方法名 说明
public static now(): 静态方法,根据当前时间创建对象 LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
public static Xxxx of(···); 静态方法,指定日期/时间创建对象 LocalDate localDate = LocalDate.of(2002,06,19);
LocalTime localTime = LocalTime.of(06,19);
LocalDateTime localDateTime = LocalDateTime.of(2002,06,19,13,23,24);

Instant时间戳

  • JDK8获取时间戳特别简单,且功能更丰富。Instant类由一个静态的工厂方法now()可以放回当前时间戳。
  • 时间戳是包含日期和时间的,与java.util.Date很类似,事实上就是类似JDK8以前的Date
  • Instant和Date这两个类可以进行转换

DateTimeFormatter类

  • 在JDK8中,引入了一个全新的日期与时间格式器DateTimeFormatter
  • 正反都能调用format方法

Period类

  • 在Java8中,我们可以使用以下类累计算 日期间隔 差异:java.time.Period
  • 主要是Period类方法getYears(),getMonths()和getDays()来计算,只能精确到年月日
  • 用于LocalDate之间的比较

你可能感兴趣的:(Java笔记,java,jvm,开发语言)