一.APl
Java 的API(API: Application(应用) Programming(程序) Interface(接口))
Java API就是JDK中提供给我们使用的类,这些类将底层 的代码实现封装了起来,我们不需要关心这些类是如何 实现的,只需要学习这些类如何使用即可。
二.Object类
1.1Object类概述
java.lang.Object类是Java语言中的根类,每个类都使用 Object作为超类。所有对象(包括数组)都实现这个类 的方法。如果一个类没有特别指定父类,那么默认则继承自 Object类。
1.2 toString()方法
方法声明:public String toString():返回该对象的字符 串表示。
包名类名@对象内存地址; 包名+类名=全限定名
由于toString方法返回的结果是内存地址,而在开发中, 内存地址并没有实际的应用价值,经常需要按照对象的 属性得到相应的字符串表现形式,因此也需要重写它。、
1.3 equals()方法
方法声明:public boolean equals(Object obj):指示其 他某个对象是否与此对象“相等”。
equals方法默认比较两个对象的内存地址是否相同,相 同则返回true。
Object类equals()方法源码:
public boolean equals(Object obj) {
return (this == obj);
}
this是当前对象,哪个对象调用的equals方法就表示 哪个对象。
obj表述传递的参数,参数类型Object,可以传递任意 类型对象。
this==obj 比较两个对象的内存地址是否相同
三.String类
1.1 String类概述
String 类代表字符串,Java 程序中的所有字符串文字 (例如“abc”)都被实现为此类的实例。
Java 程序中所有的双引号字符串,都是 String 类的对 象。
String 类在 java.lang 包下,所以使用的时候不需要 导包!
1.2 String类的构造方法
public String() 创建一个空字符串对象
public String(String original) 通过给定的内容创建一 个 String 对象
public String(char[] value) 根据char数组中的内容,来 创建对应的字符串对象
public String(byte[] bytes) 根据byte数组中的内容,来 创建对应的字符串对象
public String(byte[] bytes, int offset, int length) 指 定byte数组的范围,根据指定范围中的内容,来创建对应 的字符串对象
直接写字符串字面值也是String类对象 例如: String str = "abc";
public class DemoTest {
public static void main(String[] args) {
//public String():创建一个空白字符串对象,不含有任何内容
String str01=new String();
System.out.println("str01="+str01);
//public String(String original) 通过给定的内容创建一个 String 对象
String str02=new String("abc");
System.out.println("str02="+str02);
//public String(char[] value) 根据char数组中的内容,来创建对应的字符串对象
char[] cs={'a','b','c','d'};
String str03=new String(cs);
System.out.println("str03="+str03);
//public String(byte[] bytes) 根据byte数组中的内容,来创建对应的字符串对象
byte[] bs={97,98,99,100,101};
String str04=new String(bs);
System.out.println("str04="+str04);
//public String(byte[] bytes, int offset, int length)
//指定byte数组的范围,根据指定范围中的内容,来创建对应的字符串对象
String str05=new String(bs,1,3);
System.out.println("str05="+str05);
//直接写字符串字面值也是String类对象
String str06="hello";
System.out.println("Str06="+str06);
}
}
1.3 两种方式创建字符串的区别
通过 new 创建的字符串对象,每一次 new 都会申请 一个内存空间,虽然字符串内容相同,但是地址值不同
1.4 字符串常用方法
public int length ():返回此字符串的长度。
public boolean equals(String s):比较两个字符串内容 是否相同、区分大小写
public boolean equalsIgnoreCase (String anotherString):将此字符串与指定对象进行比较, 忽略大小写。
public String concat (String str):将指定的字符串连接 到该字符串的末尾。
public char charAt (int index):返回指定索引处的 char值。
public int indexOf (String str):返回指定子字符串第一 次出现在该字符串内的索引。
public String substring (int beginIndex):返回一个子 字符串,从beginIndex开始截取字符串到字符串结 尾。
public String substring (int beginIndex, int endIndex):返回一个子字符串,从beginIndex到 endIndex截取字符串。含beginIndex,不含 endIndex。
public class DemoTest {
public static void main(String[] args) {
String str="woaijava";
//public int length ():返回此字符串的长度。
int len = str.length();
System.out.println(len);//8
//public boolean equals(String s):比较两个字符串内容是否相同、区分大小写
boolean lean01 = str.equals("woaiJava");//false
System.out.println(lean01);
//public boolean equalsIgnoreCase (String anotherString)
// 将此字符串与指定对象进行比较,忽略大小写。
boolean lean02 = str.equalsIgnoreCase("woaiJava");
System.out.println(lean02);//true
//public String concat (String str):将指定的字符串连接到该字符串的末尾。
String newStr = str.concat("haha");
System.out.println(newStr);//woaijavahaha
//public char charAt (int index):返回指定索引处的 char值。
char c = str.charAt(3);
System.out.println(c);//i
//遍历字符串 w o a i j a v a
for(int i=0;i<str.length();i++){
System.out.print(str.charAt(i)+"\t");
}
System.out.println();
//public int indexOf (String str):
//返回指定子字符串第一次出现在该字符串内的索引。
int index = str.indexOf("a");
System.out.println(index);//2
//public String substring (int beginIndex)
// 返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
String sub01 = str.substring(4);
System.out.println(sub01);//java
//public String substring (int beginIndex, int endIndex):
// 返回一个子字符串,从beginIndex到endIndex截取字符串。
// 含beginIndex,不含endIndex。
String sub02 = str.substring(2, 6);
System.out.println(sub02);//aija
}
}
1.5其他方法
四.StringBuilder类
1.1 String类字符串拼接问题
1.2 StringBuilder类概述
StringBuilder 是一个可变的字符串类,我们可以把它 看成是一个容器,这里的可变指的是 StringBuilder 对象 中的内容是可变的。
StringBuilder类和String类的区别:
String类:内容是不可变的
StringBuilder类:内容是可变的
1.3StringBuilder类的构造方法
.4 1.4StringBuilder类常用方法
public StringBuilder append(任意类型) 拼接数据, 并返回对象本身
public StringBuilder insert(int offset, 任意类型) 在 指定位置插入数据,并返回对象本身
public StringBuilder reverse() 反转字符串,并返回对 象本身
public class DemoTest {
public static void main(String[] args) {
StringBuilder sb01=new StringBuilder();
//public StringBuilder append(任意类型) 拼接数据,并返回对象本身
// StringBuilder sb02 = sb01.append("hello");
//
System.out.println(sb02==sb01);//true
// sb01.append(123);
// System.out.println(sb01);
//public StringBuilder insert(int offset, 任意类型)
// 在指定位置插入数据,并返回对象本身
// sb01.insert(5,"world");
// System.out.println(sb01);
//public StringBuilder reverse() 反转字符串,并返回对象本身
// StringBuilder sb03 = sb01.reverse();
// System.out.println(sb01==sb03);
// System.out.println(sb01);
//链式编程
sb01.append("hello").append(123).insert(5,"world").reverse();
System.out.println(sb01);
}
}
1.5 StringBuilder和String相互转换
StringBuilder转换为String
public String toString():通过StringBuilder类中的 toString() 就可以实现把 StringBuilder 转换为 String
String转换为StringBuilder
public StringBuilder(String s):通过StringBuilder的构 造方法就可以实现把 String 转换为 StringBuilder
五.Date类
1.1 Date类概述
类java.util.Date表示特定的瞬间(日期和时间),精确到毫秒。
1.2 Date类的构造方法
public Date(): 用来创建当前系统时间对应的日期对象。
public Date(long date):用来创建以标准基准时间为基准指定偏移毫秒 数对应的日期对象
标准基准时间: 0时区: 1970年01月01日 00:00:00;东八区: 1970年01 月01日 08:00:00
1.3 Date类的常用方法
public long getTime() 获取当前日期对象距离标准基准时间的毫秒值。
public void setTime(long time) 设置当前日期对象距离标准基准时间的 毫秒值。也就意味着改变了当前日期对象。
public boolean after(Date when) 测试此日期是否在指定日期之后。
public boolean before(Date when) 测试此日期是否在指定日期之前。
public class DemoTest {
public static void main(String[] args) {
//创建一个当前系统时间的日期对象
Date date01=new Date();
System.out.println(date01);//Wed Jul 03 09:18:23 CST 2024
System.out.println("------------------------");
//创建一个与标准基准时间偏移1秒的日期对象
Date date02=new Date(1000);
System.out.println(date02);//Thu Jan 01 08:00:01 CST 1970
System.out.println("------------------------");
//public long getTime() 获取当前日期对象距离标准基准时间的毫秒值。
System.out.println(date01.getTime());//1719972679512
System.out.println(date02.getTime());//1000
System.out.println("------------------------");
//public void setTime(long time) 设置当前日期对象距离标准基准时间的毫秒值。也就意味着改变了当前日期对象。
date01.setTime(2000);
date02.setTime(3000);
System.out.println(date01);//Thu Jan 01 08:00:02 CST 1970
System.out.println(date02);//Thu Jan 01 08:00:03 CST 1970
System.out.println("------------------------");
//public boolean after(Date when) 测试此日期是否在指定日期之后。
//public boolean before(Date when) 测试此日期是否在指定日期之前。
System.out.println(date01.before(date02));//true
System.out.println(date01.after(date02));//false
}
}
六.DateFormat类
1.1 DateFormat类的概述
java.text.DateFormat是日期/时间格式化子类的抽象类,我们通过这个类 可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对 象之间进行来回转换。
格式化:按照指定的格式,把Date对象转换为String对象。
解析:按照指定的格式,把String对象转换为Date对象。
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类 java.text.SimpleDateFormat
public SimpleDateFormat(String pattern):用给定的模式和默认语言 环境的日期格式符号构造。参数pattern是一个字符串,用来指定日期格 式。
格式规则:
常用的日期格式: yyyy年MM月dd日 HH时mm分ss秒
常用的日期格式: yyyy-MM-dd HH:mm:ss
1.2 DateFormat类的常用方法
public String format(Date date):将Date对象格式化为字符串。
public Date parse(String source):将字符串解析为Date对象。
1.3练习
需求:键盘输入一个字符串类型的时间,打印你来到世界多少天?
public static void main(String[] args) throws Exception{
//从控制台接收用户的生日——String类型,例如:"1998-03-18"
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的生日(yyyy-MM-dd):");
String birthDay = sc.next();
//1.计算生日的毫秒值
//将birthDay转换为Date对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMdd");
Date birthDate = sdf.parse(birthDay);
//取毫秒值
long m1 = birthDate.getTime();
//2.计算现在的毫秒值
long m2 = new Date().getTime();
System.out.println("你出生到现在一共经历了:" + ((m2 - m1) / 1000 / 3600 / 24) + " 天");
}
七. BigDecimal类
1.1 BigDecimal类的概述
java.math.BigDecimal类表示一个超大的小数,并且可以解决小数运算的精度问题。
对于浮点运算,不要使用基本类型,而使用"BigDecimal类"类型
1.2 BigDecimal类的构造方法
1 .3 BigDecimal类的常用方法
public class DemoTest {
public static void main(String[] args){
//加法运算
BigDecimal b1 = new BigDecimal("0.09");
BigDecimal b2 = new BigDecimal("0.01");
BigDecimal result01 = b1.add(b2);
System.out.println(result01);//0.10//减法运算
BigDecimal b3 = new BigDecimal("1.0");
BigDecimal b4 = new BigDecimal("0.32");
BigDecimal result02 = b3.subtract(b4);
System.out.println(result02);//0.68
//乘法运算
BigDecimal b5 = new BigDecimal("1.015");
BigDecimal b6 = new BigDecimal("100");
BigDecimal result03 = b5.multiply(b6);
System.out.println(result03);// 101.500
//除法运算
BigDecimal b7 = new BigDecimal("1.301");
BigDecimal b8 = new BigDecimal("100");
BigDecimal result04 = b7.divide(b8);
System.out.println(result04);// 0.01301
}
}
注意:对于divide方法来说,如果除不尽的话,就会出现 java.lang.ArithmeticException异常。此时可以使用divide方法的另一个重 载方法;
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode): divisor:除数对应的BigDecimal对象;scale:精确的 位数;roundingMode取舍模式
向上进1 BigDecimal.ROUND_UP
直接舍去 BigDecimal.ROUND_DOWN
四舍五入 BigDecimal.ROUND_HALF_UP
public class DemoTest {
public static void main(String[] args){
BigDecimal b1 = new BigDecimal("3.125");
BigDecimal b2 = new BigDecimal("1.582");
//1.975347661188369
//java.lang.ArithmeticException
//BigDecimal divide = b1.divide(b2);
BigDecimal result01 = b1.divide(b2, 3, BigDecimal.ROUND_UP);
System.out.println(result01);//1.976
BigDecimal result02 = b1.divide(b2, 2, BigDecimal.ROUND_DOWN);
System.out.println(result02);//1.97
BigDecimal result03 = b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);
System.out.println(result03);//1.98
}
}
八.包装类
1.1包装类概述
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率, 然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我 们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:
1.2 Integer类
Integer类概述:
包装一个对象中的原始类型 int 的值
Integer类构造方法及静态方法:
public class DemoTest {
public static void main(String[] args){
//public Integer(int value):根据 int 值创建 Integer 对象(过时)
Integer i1 = new Integer(100);
System.out.println(i1);
//public Integer(String s):根据 String 值创建 Integer 对象(过时)
Integer i2 = new Integer("100");
System.out.println(i2);
//Integer i = new Integer("abc");//java.lang.NumberFormatException
//System.out.println(i);
//public static Integer valueOf(int i):返回表示指定的 int 值的 Integer 实例
Integer i3 = Integer.valueOf(100);
System.out.println(i3);
//public static Integer valueOf(String s):返回一个保存指定值的Integer对象 String
Integer i4 = new Integer("100");
System.out.println(i4);
}
}
1.3装箱与拆箱
装箱与拆箱的概述
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
装箱:从基本类型转换为对应的包装类对象。
拆箱:从包装类对象转换为对应的基本类型
自动装箱与自动拆箱
由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开 始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:
1.4基本类型与字符串之间的转换
基本类型转换为String
方式一:直接在数字后加一个空字符串
方式二:通过String类静态方法valueOf()
String转换成基本类型
除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字 符串参数转换为对应的基本类型:
例如:public static int parseInt(String s):将字符串参数转换为对应的int 基本类型。
方式一:通过Integer静态方法parseInt()进行转换
方式二:先通过Integer类的valueOf方法将字符串数字转成Integer,再 调用xxxValue方法得到基本数据类型