API、Object、String

一、API

API: Application Programing Interface (应用程序编程接口)

  • 其实就是Java程序的说明书 , 字典 , 工具

二、Object【重要】

ps: java.lang包下的所有类,使用时不需要导包

Object是一个类,Object 是类层次结构的根类,即Object是所有类的超类,换句话就是Object是所有类的父类(祖宗....) (Java不支持多继承,但是支持层次继承)

Object类仅有一个无参构造,可以创建对象

返回值方法名解释
booleanequals(Object obj)指示其他某个对象是否与此对象"相等"
inthashCode()返回该对象的哈希码值
StringtoString()返回该对象的字符串表示

2.1 hashCode()方法

返回对象的hash值(哈希值),即认为是对象的地址值

//创建对象
Object o = new Object();

//hashcode(),返回对象的地址值
int i = o.hashCode();
System.out.println(i);//460141958

2.2 toString()方法

Object类中的toString是将对象信息返回

  • 内部是将对象类路径拼接@,拼接地址值返回的
  • 这样无意义,子类都会重写,返回对象的属性信息
//toString()方法
String s = o.toString();//将对象以字符串的形式返回
System.out.println(s);//java.lang.Object@1b6d3586

//输出语句输出对象,默认调用toString方法
System.out.println(o);//java.lang.Object@1b6d3586
System.out.println(o.toString());//java.lang.Object@1b6d3586

/**
 * 输出语句输出对象,默认调用toString返回对象信息
 * 但是默认返回的是包路径@地址值,这一般没有用
 * --------------------------------------
 * 子类一般会重写toString,以用来返回对象的属性信息
 */
Student student = new Student();
student.setAge(18);
student.setName("xiaoa");
//子类重写toString()
System.out.println(student);//Student{name = xiaoa, age = 18}
System.out.println(student.toString());//Student{name = xiaoa, age = 18}

2.3 equals()方法

Object类中的equals判断两个对象是否相等(判断地址值)

  • boolean equals(Object obj)

// 学生类

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }

    //idea自动生成的
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }
    //手动写的
    /*public boolean equals(Object o) {//Object o = new Student();
        Student other = (Student) o;
        if (age == other.getAge() || name.equals(other.getName())) {
            return true;
        }
        return false;
    }*/

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

三、String & StringBuffer & StringBuilder

3.1 String类

  • String是一个类,代表字符串
  • Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现,也就是说程序出现的字符串"abc"都是String类的对象
  • 字符串是常量,他们的值在创建之后不能更改
  • String类包括的方法可用于检查序列的单个字符,比较字符串,搜索字符串,提取字符串,创建字符串副本****并将所有字符全部转换成大写或小写
//程序中出现的""字符串都是String对象
 String s1 = "abc";//s1是String类的对象

//这是改变s1的引用,指向新的字符串对象efg
//并不是改变字符串
s1 = "efg";

3.1.1 String构造方法

提供了很多种构造方法,以供使用各种方式创建字符对象.

空参构造:

  • String() // 创建一个空字符,是"",不是null

通过字节数组创建字符串对象

  • String(byte[] bytes)
  • String(char[] chars)
  • String(String original)
//通过字节数组创建字符串
byte[] bytes = {65,66,67};
String string = new String(bytes);
System.out.println(string);//ABC

//通过一个字符串,创建出一个字符串副本
String s2 = new String("abc");
String s3 = "abc";

3.1.2 String常用方法

//char charAt(int index)根据下标找字符
String s = "java";
char c = s.charAt(0);
System.out.println(c);

//int indexOf(int ch) 根据字符找下标 -- 主要来做判断是否包含
int ovIndex = s.indexOf("av");//1   --  判断结果若大于等于0,则包含此字符
int bcIndex = s.indexOf("bc");//-1   --  判断结果若为-1,则不包含此字符
System.out.println(ovIndex);
System.out.println(bcIndex);

//boolean equals(Object anObject) 判断字符串相等(已重写)
System.out.println(s.equals("java"));//true

// 忽略大小写判断是否相等
boolean b = name1.equalsIgnoreCase(name2);
System.out.println(b );

//String substring(int beginIndex) 截取字符串
System.out.println(s.substring(1));//ava  -- 默认从开始下标截取到最后

// 替换
String replace = s4.replace("赌博", "**");
System.out.println(replace);

// 判断是否包含
boolean contains = s4.contains("赌");
System.out.println(contains );

//String substring(int beginIndex,int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。
//beginIndex - 起始索引(包括)
//endIndex  -  结束索引(不包括)
System.out.println(s.substring(1, 3));//av

//int length() 获得字符串长度
System.out.println(s.length());//4

//String[] split(String regex) 拆分字符串
//regex -- 正则(根据什么拆)
String s4 = "110-10-1";
String[] split = s4.split("-");
System.out.println(Arrays.toString(split));//[110, 10, 1]

/*for (String s5 : s4.split("-")) {
System.out.println(s5);//110  10   1
}*/

//static String valueOf() // 有很多重载方法,可以将多种类型变为String
//该方法是静态的
//将任何数据类型转换成字符串
String valueOf = String.valueOf(1);

3.2 StringBuffer类和StringBuilder类【重点】

3.2.1 介绍

  • String类代表的字符串不能更改

  • 字符串缓冲区允许字符串更改 --> StringBuffer和StringBuilder就是字符串缓冲区

  • StringBuffer字符串缓冲区,StringBuilder是它的升级版

3.2.2 StringBuffer类

  • 代表字符串
  • 可变字符串
  • 线程安全(线程同步)
  • 提供很多方法,允许改变字符串内容
    • append()追加内容到末尾
    • insert()插入内容到指定的位置
    • delete*()删除任意内容
    • setCharAt()修改内容
    • 其他方法基本上与String一致
public static void main(String[] args) {

    //1.通过构造方法创建StringBuffer
    //其实也就是将String变为StringBuffer的
    StringBuffer stringBuffer = new StringBuffer("java");
    System.out.println(stringBuffer);//java

    //2.改变字符串qppend,追加
    //提供了很多重载的方法,允许追加各种类型数据到字符串
    System.out.println(stringBuffer.append(666));//java666

    //3.插入数据,改变字符串
    //insert(偏移量,插入内容)
    stringBuffer.insert(4,"-");
    System.out.println(stringBuffer);//java-666

    //4.将StringBuffer返回字符串
    System.out.println(stringBuffer.toString());//java-666
    System.out.println(String.valueOf(stringBuffer));//java-666
}

3.2.3 StringBuilder类

StringBuilder的API几乎完全和StringBuffer一致,设计类的目的就是为了在单线程情况下替换StringBuffer,因为不保证线程安全的话,执行速度块。

3.3 总结

StringStringBufferStringBuilder
字符改变不能更改可以改变可以改变
线程是否安全安全安全不安全
拼接效率极低较快最快
出现版本1.01.01.5

即以后如果只是表示字符串,用String

如果要频繁大量拼接字符串,建议使用StringBuilder

除非特别说明要保证线程安全,这样才使用StringBuilder

四、系统类【了解】

System系统类,java.lang包下

  • 系统类提供的正常输出System.out.println()

  • 系统类提供的错误输出System.err.println()

  • System.currentTimeMillis()获得当前系统时间毫秒值

    • 程序中时间的起始点是1970-01-01 00:00:00
  • System.arraycopy()数组拷贝

  • System.exit(0) 0是正常退出(直接停止jvm)

public static void main(String[] args) {
    //系统类提供的正常输出System.out.println()
    //系统类提供的错误输出System.err.println()
    System.err.println("Err");

    //获取当前时间(精确到毫秒值)
    long l = System.currentTimeMillis();
    System.out.println(l);//1698137750089
}

五、数学类【熟悉】

Math类提供了一些操作数学运算的方法

方法都是静态的,通过类名直接调用。

public static void main(String[] args) {
    //1.圆周率pi,静态常量
    double pi = Math.PI;
    System.out.println(pi);

    //2.绝对值
    System.out.println(Math.abs(-18));//18
    System.out.println(Math.abs(3000 - 5000));//2000

    //3.开几次幂
    System.out.println(Math.pow(2, 3));//8.0
    System.out.println(Math.pow(4, 0.5));//2.0

    //4.四舍五入  --  返回值为int整型
    System.out.println(Math.round(5.5));//6
    System.out.println(Math.round(5.4));//5

    //5.随机数(0-1之间)
    System.out.println(Math.random());//0.5405522699569238

    //6.向上取整(向上取最小值)
    System.out.println(Math.ceil(12.34));//13.0
    System.out.println(Math.ceil(-12.34));//-12.0

    //7.向下取整
    System.out.println(Math.floor(12.34));//12.0
    System.out.println(Math.floor(-12.34));//-13.0
}

六、包装类

6.1 介绍

包装类是对一系列包装成类的那些类的统称

主要是:基本数据类型8个包装成8个引用类型中的类

int a = 1;//基本数据类型只能代表一个数据,可以做简单数学运算

Integer a = 1;//将其包装成类,那就是对象,其中就有属性和方法可以使用

目的:基本数据类型与String之间进行转换

ps:8个包装类

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter
public static void main(String[] args) {
    //没有无参构造
    //1.创建包装类
    //将int类型的数据作为参数创建包装类
    Integer integer1 = new Integer(1);

    //字符串String当参数创建包装类
    Integer integer2 = new Integer("1");

    System.out.println(integer1);//1
    System.out.println(integer2);//1

    //2.包装类获得基本数据类型
    int i3 = integer1.intValue();
    
    //3.其他类型变成包装类
    Integer i4 = Integer.valueOf(1);
    Integer i5 = Integer.valueOf("1");


    //4.[[非常重要]]的方法   --   String转int
    //int parseInt(String s);
    int i6 = Integer.parseInt("1");
}

在这里插入图片描述

6.2 自动装箱&自动拆箱

  • 装箱:将基本数据类型包装成类的过程
  • 拆箱:将包装类中的基本类型取出
  • 自动拆箱装箱就是,不需要再调用方法完成这个功能,自动可以进行
//5.自动装箱(基本类型直接赋值给包装类)
Integer i = 1;

//6.拆箱(直接取值)
int a = i;

6.3 Character【了解】

char的包装类

“12” --> 12

“12” --> char无法转型

Character包装类作用不是为了和String转换的,主要目的是提供了一些方法可以操作字符

  • 判断是否是大小写:isLowerCase isUpperCase
  • 判断是否是字母:isLetter
  • 判断是否是数字:idDigit
  • 转换大小写:toLowerCase toUpperCase
//7.判断是否是字母:isLetter
if (Character.isLetter('A')){
    System.out.println("是字母");//是字母
}

6.4 总结

包装类最重要的类是Integer

重要方法:

  • 自动装箱
  • 自动拆箱
  • Integer.parseInt() — 即将字符串变为int

七、日期

7.1 Date【重要】

将日期数据封装成对象来表示

Date类表示某一瞬间,该类有很多方法表示日期时间或者指定日期时间

ps1:Date类中有很多方法都过时了,不建议用,而是建议使用Calendar

ps2:JDK8新特性,日期有新的API

public static void main(String[] args) {
    //1.默认创建的是当前时间
    Date date = new Date();
    System.out.println(date);//Tue Oct 24 19:20:09 CST 2023

    //2.可以指定年月日创建时间(了解,已经过时)
    //月份从0开始  0-11
    //年份从1900开始
    Date date2 = new Date(100, 1, 1);
    System.out.println(date2);//Tue Feb 01 00:00:00 CST 2000

    //3.没过时的方法
    //获得从1970-01-01 00:00:00 距date的毫秒值
    long time = date.getTime();
    System.out.println(time);//1698146678009

    //4.设置毫秒值(改时间)
    date.setTime(1 * 1000 * 60 * 60 * 24 * 365L);
    System.out.println(date);//Fri Jan 01 08:00:00 CST 1971

    //5.Date的应用
    Student student = new Student();
    student.setName("zs");
    student.setAge(18);
    Date date1 = new Date(105, 0, 1);
    student.setBirthday(date1);
    System.out.println(student);//Student{name = zs, age = 18, birthday = Sat Jan 01 00:00:00 CST 2005}
}

7.2 Date总结

  • 大部分方法都过时了,所以只需要记住
    • 空参构造,创建当前时间
    • setTime(),指定毫秒值
    • getTime(),获得毫秒值

注:一般都是用来描述时间类型数据的,类似:

public class Student {
    private String name;
    private int age;
    private Date birthday;//生日

7.3 SimpleDateFormat【重要】

7.3.1 SimpleDateFormat该类主要用来:

  • 格式化日期:将日期对象变为日期字符串
    • 将日期对象按照指定模板变成字符串,目的就是方便阅读/查看
    • 方法名:String format(Date d)
  • 解析日期:将日期字符串变为日期对象
    • 将日期字符串按照模板变成日期对象,目的方便调用日期api
    • 方法名:Date parse(String s)

7.3.2 日期模板格式

  • y年,M月,d天 H(h)时 m分 s秒
  • 常见模板
    • yyyy/MM/dd 2020/01/01
    • yyyy年MM月dd日 HH:mm:ss 2020年01月01日 08:00:00

这个模板是用在构造方法内,即通过模板创建对象

再通过对象调用方法完成格式化/解析时已经是有固定的格式

public static void main(String[] args) throws ParseException {
    //1.创建SimpleDateFormat对象
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

    //2.格式化(日期 --> 字符串) --  将当前日期赋值给format方法
    String str = sdf.format(new Date());
    System.out.println(str);//2023年10月24日 19:47:27

    //3.解析(字符串  -->  日期)
    //特别注意:要按照创建SimpleDateFormat对象传入的模板进行解析
    String s = "1990年01月01日 12:00:00";
    Date date = sdf.parse(s);//要抛出异常
    System.out.println(date);//Mon Jan 01 12:00:00 CST 1990
}

7.4 Calendar【了解】

Calendar日历类,主要有两个方法

  • set(日历字段,值),根据指定字段设置值
  • get(日历字段),得到指定日历字段的值

日历字段是Calendar类提供的静态属性,YEAR MONTH DAY_OF_MONTH HOURS MINUTE SECONDS

另外,Calendar是抽象类

public static void main(String[] args) {
    //1.因为是抽象类,不能直接new对象
    //但是提供静态方法,调用可以获得对象
    //默认当前时间
    Calendar rightNow = Calendar.getInstance();
    System.out.println(rightNow);
    //java.util.GregorianCalendar[time=1698148753865,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=9,WEEK_OF_YEAR=43,WEEK_OF_MONTH=4,DAY_OF_MONTH=24,DAY_OF_YEAR=297,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=7,HOUR_OF_DAY=19,MINUTE=59,SECOND=13,MILLISECOND=865,ZONE_OFFSET=28800000,DST_OFFSET=0]

    int year = rightNow.get(Calendar.YEAR);
    int month = rightNow.get(Calendar.MONTH);
    int day = rightNow.get(Calendar.DAY_OF_MONTH);
    int hour = rightNow.get(Calendar.HOUR_OF_DAY);
    int minute = rightNow.get(Calendar.MINUTE);
    int second = rightNow.get(Calendar.SECOND);
    int week = rightNow.get(Calendar.DAY_OF_WEEK);//周
    //周是周日是1  --   周六是7

    System.out.println(year);//2023
    System.out.println(month);//月份从0开始   //9
    System.out.println(day);  //24
    System.out.println(hour); //20
    System.out.println(minute);  //7
    System.out.println(second);  //49
    System.out.println(week);  //3

    System.out.println("--------");

    //2.直接设置年月日
    rightNow.set(1990,1,1);
    System.out.println(rightNow.get(Calendar.YEAR));//1990
    System.out.println(rightNow.get(Calendar.MONTH));//1
    System.out.println(rightNow.get(Calendar.DAY_OF_MONTH));//1
}

八、随机数

Random类,该类的方法可以产生随机数

  • nextInt(int n);随机产生0~n之间的数(不包括n) -->即 [ )
public static void main(String[] args) {
    //1.创建随机数对象
    Random random = new Random();

    //2.调用方法
    //获取到0-9之间的数
    int nextInt = random.nextInt(10);
    System.out.println(nextInt);

    //3.摇骰子
    System.out.println(random.nextInt(6)+1);

    //4.产生6位数的验证码
    //思路:每次产生一位数,进行拼接
    //创建对象
    Random random1 = new Random();
    //创建StringBuilder对象,由于添加字符串
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 6; i++) {
        int n = random1.nextInt(10);
        sb.append(n);
    }
    System.out.println("验证码:" + sb);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Su sir~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值