Java 05 常用类

1.API

应用程序编程接口

编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一定会提供一些用于控制机器人的Java类,这些类中定义好了操作机器人各种动作的方法。其实,这些Java类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为Xxx Robot API。本章涉及的Java API指的就是JDK中提供的各种功能的Java类。

2.Object类 

2.1 Object类概述

类层次结构的根类

所有类都直接或者间接的继承自该类

Class Object是类Object结构的根。 每个班都有Object作为超类。 所有对象(包括数组)都实现了这个类的方法。

2.2 成员方法

public int hashCode()

  • 返回对象的哈希码值。

 public final Class getClass()

  • 返回此Object的运行时类。

public String toString()

  • 返回对象的字符串表示形式。
  • public String toString()  获取对象的地址值 打印对象的名字默认会调用toString()方法
    但是,我们获取地址值是没有太大意义的,我们打印一个对象,更希望观察的是该对象成员变量值的情况
    子类重写toString()方法,不需要,自动生成即可,得到一个标准类的最终写法

 在教师类中重写toString()方法

@Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }

 调用得到的结果为:

public class ObjectDemo1 {
    public static void main(String[] args) {
        Teacher t1 = new Teacher();
        System.out.println(t1.hashCode());
        System.out.println(Integer.toHexString(t1.hashCode()));
        System.out.println(t1.getClass());
        System.out.println(t1.toString());
    }
}

 运行结果:

1163157884
4554617c
class com.bigdata.learn.day08x.Teacher
com.bigdata.learn.day08x.Teacher@4554617c

//可以看出,hashcode返回的是地址值(十进制表示)
//getclass返回的是运行的类
//tostring是二者相加

public boolean equals(Object obj)

== 比较基本数据类型的时候,比较的是具体数值
== 比较引用数据类型的时候,比较的是地址值

//通过观察原码发现Object中的equals方法底层是调用==去比较的
//而我们现在要比较成员变量值是否一样,怎么办呢?
//重写即可,不需要自己写,自动生成即可
public class ObjectDemo1 {
    public static void main(String[] args) {
        Teacher t1 = new Teacher("小啦",20,"男");
        Teacher t2 = new Teacher("小啦",20,"男");
        System.out.println(t1.equals(t2));
    }
}

 结果输出false;

自动生成equals方法,上述代码得到新的结果为true

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Teacher teacher = (Teacher) o;
        return age == teacher.age && Objects.equals(name, teacher.name) && Objects.equals(gender, teacher.gender);
    }

protected void finalize() 

当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。 一个子类覆盖了处理系统资源或执行其他清理的finalize方法。

protected Object clone()

创建并返回此对象的副本。

想要调用该方法需要让调用该方法的类实现cloneable接口,如果此对象的类不实现接口Cloneable ,则抛出CloneNotSupportedException

然后还要重写clone()方法,快捷键(选中类名,按ctrl+1,然后选择clone()方法)

clone是浅拷贝。

3.Scanner类

JDK5以后用于获取用户的键盘输入

import java.util.Scanner;

/*
    Scanner类的使用
    nextLine()方法可以接收特殊字符,如换行符
    next()不会接收特殊字符
 */
public class ScannerDemo1 {
    public static void main(String[] args) {
        //创建Scanner对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字:");
        int number = sc.nextInt();
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        System.out.println("数字:" + number);
        System.out.println("字符串:" + s);

    }
}

nextLine()方法可以接收特殊字符,如换行符

next()不会接收特殊字符

4.String类

String字符串:理解为使用一个签子将一个一个字符串起来的串儿,叫做字符串 字符串一旦被创建,就不能被改变,可以被看作是一个字符数组 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的对象。

4.1 构造方法

public String()

public String(byte[] bytes)

public String(byte[] bytes,int offset,int length)

public String(char[] value)

public String(char[] value,int offset,int count)

public String(String original)

public class Stringtest1 {
    public static void main(String[] args) {
        byte[] byte1 = {97, 98, 99, 100, 101, 102, 103, 104};
        char[] char1 = {'s', 'l', 'e', 'e', 'p'};
        String s1 = new String(); //无参数输入
        String s2 = new String(byte1); //将字节数组里的元素组成一个字符串,ASCII码
        String s3 = new String(byte1, 2, 4); //从索引为2开始,选取4个元素组成一个字符串
        String s4 = new String(char1); //将字符数组里的元素组成一个字符串
        String s5 = new String(char1, 2, 3); //从索引为2开始,选取4个元素组成一个字符串,超出会报错
        String s6 = new String("zifuchuan"); //字符串
    }
}

 String s = new String(“hello”)和String s = “hello”;的区别?

String s = “hello”; s += “world”; 问s的结果是多少?    

public class Stringtest2 {
    public static void main(String[] args) {
        String s1="hello";
        String s2="world";
        String s3=s1+s2;
        System.out.println(s3);
    }
}

 输出helloworld

 4.2 判断功能

boolean equals(Object obj) 比较两个字符串的内容是否相同,区分大小写的

boolean equalsIgnoreCase(String str) 比较两个字符串的内容是否相同,忽略大小写的

boolean contains(String str) 判断大字符串中是否包含小字符串

boolean startsWith(String str) 判断字符串以什么开头

boolean endsWith(String str) 判断字符串以什么结尾

boolean isEmpty()

public class Stringtest2 {
    public static void main(String[] args) {
        String s1="hello";
        String s2="HellO";
        String s3="hello_world";
        String s4="";
        System.out.println(s1.equals(s2));  //比较两个字符串的内容是否相同,区分大小写的
        System.out.println(s1.equalsIgnoreCase(s2)); //比较两个字符串的内容是否相同,忽略大小写的
        System.out.println(s3.contains(s1)); //判断大字符串中是否包含小字符串
        System.out.println(s3.startsWith(s1)); //判断字符串以什么开头
        System.out.println(s3.endsWith(s1)); //判断字符串以什么结尾
        System.out.println(s2.isEmpty()); //判断s2是否为空
    }
}

4.3 获取功能

int length()

char charAt(int index)

int indexOf(int ch)

int indexOf(String str)

int indexOf(int ch,int fromIndex)

int indexOf(String str,int fromIndex)

String substring(int start)

String substring(int start,int end)

public class Stringtest3 {
    public static void main(String[] args) {
        String s1="today is a good day";
        System.out.println(s1.length()); //获取字符串长度
        System.out.println(s1.charAt(2)); //获得s1中索引位置为2的字符,若超出字符串长度,则报错
        System.out.println(s1.indexOf("is")); //获取s1中‘is’所出现的第一个位置,如果字符串中不存在该字符,则返回-1
        System.out.println(s1.indexOf("a",10)); //从10号索引开始,找到‘a’出现的第一个位置,如果不存在该字符,则返回-1(第一个参数可以是字符也可以是字符串)
        System.out.println(s1.substring(11)); //从索引位置11开始截取
        System.out.println(s1.substring(11,15)); //从索引位置11开始截取,到14位置,左闭右开
    }
}

4.4 转换功能

byte[] getBytes()

char[] toCharArray()

static String valueOf(char[] chs)

static String valueOf(int i)

String toLowerCase()

String toUpperCase()

String concat(String str) 

public class Stringtest4 {
    public static void main(String[] args) {
        String s1="huaishida";
        byte[] byte1=s1.getBytes(); //将字符串转换成字节数组,ASCII码
        for(int i=0;i<byte1.length;i++){
            System.out.println(byte1[i]);
        }

        char[] char1=s1.toCharArray(); //将字符串转换成字符数组
        for(int i=0;i<char1.length;i++){
            System.out.println(char1[i]);
        }

        char[] chars = {'a','b','c','d'};
        String s2 =String.valueOf(chars); //将字符数组转换为字符串
        System.out.println(s2);

        String s3 =String.valueOf(100); //将数字转换为字符串,浮点型,整型,boolen均可
        System.out.println(s3);

        String s4= "JustDoIt";
        System.out.println(s4.toLowerCase()); //将字符串全都改成小写
        System.out.println(s4.toUpperCase()); //将字符串全改成大写

        System.out.println(s1.concat(s2).concat(s3).concat(s4)); //字符串拼接
    }
}

4.5 其他功能

替换功能

String replace(char old,char new)

String replace(String old,String new)

去除字符串两空格    

String trim()

按字典顺序比较两个字符串  

//1.如果俩字符串不等长,则直接返回长度之差
//2.如果俩字符等长,则返回第一个不相等的字符之差

int compareTo(String str)

int compareToIgnoreCase(String str) 

public class Stringtest5 {
    public static void main(String[] args) {
        String s1 ="  aaaaaaa  bbbbbb  cccccc     ";
        System.out.println(s1.replace('a','1')); //将所有a替换成1
        System.out.println(s1.replace("aa","he")); //将’aa‘换成’he‘
        System.out.println(s1.trim()); //去掉开头和结尾的空格

        String s2="hello";
        String s3="world";
        String s4="hel";
        System.out.println(s2.compareTo(s3));
        System.out.println(s2.compareTo(s4)); 
        //1.如果俩字符串不等长,则直接返回长度之差
        //2.如果俩字符等长,则返回第一个不相等的字符之差

    }
}

5.StringBuffer类

5.1 概述

我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题

线程安全的可变字符序列

5.2 构造方法

public StringBuffer()

public StringBuffer(int capacity)

public StringBuffer(String str)

public class StringBuffertest {
    public static void main(String[] args) {
        StringBuffer sb1=new StringBuffer();
        System.out.println(sb1); //内部重写了toString方法
        System.out.println(sb1.capacity()); //显示容量大小,默认为16

        StringBuffer sb2=new StringBuffer(100); //参数为容量大小,容量只要在int范围之内即可
        System.out.println(sb2.capacity());

        StringBuffer sb3 = new StringBuffer("hello");
        System.out.println(sb3.capacity()); //结果为字符串长度+16
        System.out.println(sb3.length()); //获取真实字符串长度
    }
}

 5.3 成员方法

添加功能

public StringBuffer append(String str)

public StringBuffer insert(int offset,String str)

删除功能

public StringBuffer deleteCharAt(int index)

public StringBuffer delete(int start,int end)

替换功能

public StringBuffer replace(int start,int end,String str)

反转功能    

public StringBuffer reverse()

public class StringBuffertest2 {
    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer();
        sb1.append("java").append(100).append(12.34).append(true);
        System.out.println(sb1); //加入进去的不管什么类型都被转换成字符串

        sb1.insert(5,"new"); //在索引为5的位置添加”new“
        System.out.println(sb1);

        sb1.deleteCharAt(8); //删除索引位置为8的元素
        sb1.delete(1,3); //删除索引位置从1到3的元素,左闭右开
        System.out.println(sb1);

        sb1.replace(8,11,"replace"); //将指定索引位置用指定字符串进行替换
        System.out.println(sb1);

        sb1.reverse();
        System.out.println(sb1); //反转字符串

        String s1=sb1.substring(1,4); //截取字符串1-3,左闭右开
        String s2=sb1.substring(4); //从第四个元素截取到末尾
        System.out.println(s1);
        System.out.println(s2);
        
    }
}

String和StringBuffer的相互转换

public class Stringtrans {
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("string");
        String s = new String(sb); //第一种转换方式
        String s1 =sb.toString(); //第二种转换方式
        System.out.println(s);
        System.out.println(s1);
    }
}

StringBuffer刚开始不会创建新空间,但一旦拼接或者操作完成,便会沉淀到常量池中。即StringBuffer操作字符的时候会将常量池中的值拿到堆内存中操作,操作完后会沉淀到常量池中做地址的引用。

6.Arrays类

java专门为数组提供的一个工具类 在java.util.Arrays中

成员方法

public static String toString(int[] a)

public static void sort(int[] a)

public static int binarySearch(int[] a,int key)

import java.util.Arrays;
public class Arraytest {
    public static void main(String[] args) {
        int[] arr={42,22,73,34,15};
        String s1=Arrays.toString(arr); //将数组转成字符串类型
        System.out.println(s1);

        Arrays.sort(arr); //底层是快速排序
        System.out.println(Arrays.toString(arr)); //排序

        int index=Arrays.binarySearch(arr,22); //底层是二分查找,前提是数组必须有序
        System.out.println(index); //返回值

    }
}

 7.包装类

将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。

常用的操作之一:用于基本数据类型与字符串之间的转换。

基本类型和包装类的对应 Byte,Short,Integer,Long,Float,Double,Character,Boolean

7.1 Integer类

Integer 类在对象中包装了一个基本类型 int 的值 该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法

public class Integeryest {
    public static void main(String[] args) {
        //创建Integer类型的对象
        Integer inte1=new Integer(100);
        Integer inte2=100; //自动装箱,把int-->integer
        Integer inte3=new Integer("188"); //必须是数字类型的字符串
        System.out.println(inte1+20); //自动拆箱

        //int--->String
        //Integer类中有一个静态方法:toString
        String s = Integer.toString(100);
        System.out.println(s);

        //String-->int
        int i = Integer.parseInt("100");
        System.out.println(i);

        //Integer-->int 自动拆箱的过程
        int i1 = inte1.intValue();
        System.out.println(i1);

        Integer i2=Integer.valueOf("222"); //字符串转Integer
        System.out.println(i2);

        System.out.println(Integer.toBinaryString(100)); //转二进制
        System.out.println(Integer.toOctalString(100)); //转八进制
        System.out.println(Integer.toHexString(100)); //转十六进制
    }
}

 7.2 Character类

是基本数据类型char的包装类

public static boolean isUpperCase(char ch)

public static boolean isLowerCase(char ch)

public static boolean isDigit(char ch)

public static char toUpperCase(char ch)

public static char toLowerCase(char ch)

public class Charactertest {
    public static void main(String[] args) {
        System.out.println(Character.isUpperCase('a')); //判断是不是大写
        System.out.println(Character.isLowerCase('b')); //判断是不是小写
        System.out.println(Character.isDigit('1')); //判断是不是数字字符
        System.out.println(Character.toUpperCase('a')); //将字符改成大写
        System.out.println(Character.toLowerCase('A')); //将字符改成小写

    }
}

8.Random类 

此类用于产生随机数

如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。

import java.util.Random;
public class RandomTest {
    public static void main(String[] args) {
        Random random = new Random();
        int i1=random.nextInt(); //生成一个随机数
        int i2=random.nextInt(100); //随机生成0-99之间的一个整数,左闭右开
        System.out.println(i1);
        System.out.println(i2);

    }
}

9.System类

和系统操作相关的类,不允许被实例化,只有成员变量和静态方法

 System.exit(0); 强制退出

10.Date类

时间戳:从1970年1月1日 08时:00分:00秒开始计算

俩种方式:毫秒和秒制度

遇到或者使用时间戳的场景:
    1、操作系统日志中
    2、实时接收的数据
import java.text.SimpleDateFormat;
import java.util.Date;

public class Systemtest1 {
    public static void main(String[] args) {
        long l=System.currentTimeMillis(); //获取时间戳
        System.out.println(l);

        Date date = new Date();
        System.out.println(date);  //打印当前时间

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");//将时间转成指定的日期格式
        String s=simpleDateFormat.format(date);
        System.out.println(s);

        Date date1 = new Date(l); //将时间戳转为指定的日期格式
        String s1=simpleDateFormat.format(date1); //首先将时间戳转为日期格式
        System.out.println(s1); //然后转为指定格式
        
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值