一、API
API: Application Programing Interface (应用程序编程接口)
- 其实就是Java程序的说明书 , 字典 , 工具
二、Object【重要】
ps: java.lang包下的所有类,使用时不需要导包
Object是一个类,
Object
是类层次结构的根类,即Object是所有类的超类,换句话就是Object是所有类的父类(祖宗....)
(Java不支持多继承,但是支持层次继承)Object类仅有一个无参构造,可以创建对象
返回值 | 方法名 | 解释 |
---|---|---|
boolean | equals(Object obj) | 指示其他某个对象是否与此对象"相等" |
int | hashCode() | 返回该对象的哈希码值 |
String | toString() | 返回该对象的字符串表示 |
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 总结
String | StringBuffer | StringBuilder | |
---|---|---|---|
字符改变 | 不能更改 | 可以改变 | 可以改变 |
线程是否安全 | 安全 | 安全 | 不安全 |
拼接效率 | 极低 | 较快 | 最快 |
出现版本 | 1.0 | 1.0 | 1.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个包装类
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
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);
}