常用类
一、object类
1.1简介
Object
类是所有类的直接或间接父类,位于继承树的最顶层。
任何类,如果没有明确书写extends
继承某个类,都默认直接继承Object
类,否则为间接继承。
Object
类中所定义的方法,是所有对象都具备的方法。
Object
类型可以存储任何对象
- 作为参数,可接收任何对象;
- 作为返回值,可返回任何对象。
2.2常用方法
2.2.1hashCode
方法
- 方法定义:
public int hashCode()
- 返回该对象的哈希码值
2.2.2getClass方法
- 方法定义
public final Class<?> getClass()
- 返回此 Object 的运行时类
2.2.3toString
方法
- 方法定义:
public String toString()
- 直接打印是地址 重写后显示你想要的内容
- 返回一个对象的字符串表示形式
2.2.4equals
方法
方法定义:public boolean equals(Object obj)
比较两个对象的地址是否相同
==
跟equals
有什么区别
==
比较的是地址 一般情况下 用于基本数据类型比较,基本数据类型储存在栈内存当中- equals 默认也是比较地址 一般用于引用类型数据比较
2.2.5finalize()
方法
-
方法定义:
protected void finalize()
-
当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
二、包装类
2.1简介
-
包装类:一种可以将基本数据类型数据当成对象使用的技术
-
8种基本数据类型和其包装类对应关系如下:
byte -- Byte
short -- Short
int -- Integer
long -- Long
float -- Float
double -- Double
char -- Character
boolean -- Boolean
2.2、装修和拆箱
-
装箱:基本数据类型转换成包装类;
-
拆箱:包装类转换成基本数据类型。
手动拆装箱
/*
* 手动装箱
* 基本数据类型--->包装类
* */
int a = 10;
Integer i = Integer.valueOf(a);
System.out.println(i);
/*
* 手动拆箱
* 包装了--->基本数据类型
* */
int b = i.intValue();
System.out.println(b);
- JDK自从1.5(5.0)版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。
/*
* 自动装箱 JDK1.5
* */
int a = 10;
Integer i1 = a;
/*
* 自动拆箱 JDK1.5
* */
int c = i1;
2.3基本数据类型和字符串转换
/*
* 基本数据类型和字符串转换
* 基本数据类型--->字符串
* int x = 10; "10"
* x + "";
* 字符串--->基本数据类型
* String str = "10";
* */
int x = 10;
String s = x + "";
/*
* 字符串--->基本数据类型
* String--->int
* */
String str = "100";
x = Integer.parseInt(str);
System.out.println(x);
三、String类
Java程序可以方便的处理字符串类型的数据信息,而这都要归功于Java中String
类提供的强大功能。
String
类描述的是文本字符串序列,即多个字符组成的一串数据。
String
类代表字符串。Java 程序中的所有字符串字面值(如 "abc"
)都作为此类的实例实现
字符串是不可变的。一个字符串对象一旦被配置,其内容是不可变的。
3.1常用方法
3.1.1判断功能
boolean equals(Object obj)
boolean equalsIgnoreCase(String str)
boolean contains(String str)
boolean startsWith(String str)
boolean endsWith(String str)
boolean isEmpty()
String str1 = new String("abcd");
/*
* equals() 判断字符串的内容是否相等
* */
System.out.println(str1.equals("abcd"));
//equalsIgnoreCase() 忽略大小写判断内容是否相等
System.out.println(str1.equalsIgnoreCase("ABCD"));
System.out.println(str1.contains("abc"));
//startsWith()
System.out.println(str1.startsWith("abc"));
System.out.println(str1.startsWith("bc"));
//endsWith()
System.out.println(str1.endsWith("bc"));
System.out.println(str1.endsWith("bcd"));
//isEmpty()
System.out.println(str1.isEmpty());
System.out.println("".isEmpty());
3.1.2获取功能
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)
//length()
System.out.println("abcde".length());
//contains(str)判断字符v换是否拥有指定的字符 返回boolean
System.out.println("qwerty".contains("a"));
//charAt()
//charAt(index)获取字符串指定下标索引位置的元素
System.out.println("abcdef".charAt(2));
//indexOf() 返回字符首次出现的索引,如果没有被判断的字符,返回-1
System.out.println("abcdabc".indexOf('e'));
//判断字符串首次出现的索引
System.out.println("abcdabc".indexOf("bcd"));
System.out.println("abcdabc".indexOf('c'));
System.out.println("abcdabc".indexOf('c', 3));
//获取字串
System.out.println("abcdabc".substring(5));
//获取字串,但是不包含end
System.out.println("abcdabc".substring(1, 2));
3.1.3转换功能
byte[] getBytes()
char[] toCharArray()
static String valueOf(char[] chs)
static String valueOf(int i)
String toLowerCase()
String toUpperCase()
String concat(String str)
/*
* 字符串的转换功能
* */
String str = "hello";
//getBytes()转换成byte类型的数组
byte[] arr = str.getBytes();
System.out.println(Arrays.toString(arr));
//toCharArray()转换成char类型的数组
char[] arrChar = str.toCharArray();
System.out.println(Arrays.toString(arrChar));
//大小写转换
System.out.println(str.toUpperCase());
System.out.println("ABCD".toLowerCase());
/*
* 字符串连接---生成了新的字符串
* */
System.out.println(str.concat("****"));
System.out.println(str);
//基本数据类型--->字符串
System.out.println(String.valueOf(1000));
System.out.println(String.valueOf(100.56F));
3.1.4替换功能
String replace(char old, char new)
String replace(String old, String new)
/*
* 替换功能---生成了新的字符串
* */
String str = "hello 123";
System.out.println(str.replace('l', '*'));
System.out.println(str);
System.out.println(str.replace("ll", "$"));
System.out.println(str);
3.1.5去空格功能
trim()
/*
* 去除空格的功能
* trim()---去除字符串首位的空格
* */
String str1 = " ab c ";
System.out.println(str1.length());
String str2 = str1.trim();
System.out.println(str2);
System.out.println(str2.length());
3.1.6按字典比较
int compareTo(String str)
- int compareToIgnoreCase(String str)
System.out.println("a".compareTo("b"));
System.out.println("a".compareTo("a"));
System.out.println("b".compareTo("a"));
System.out.println("abc".compareTo("abd"));
System.out.println("abcd".compareTo("abdd"));
可变字符串
1.1
概念:可在内存中创建可变的缓冲空间,存储频繁改变的字符串
- StringBuilder:可变长字符串,jdk5.0提供,运行效率快,线程不安全
- StringBuffer:可变长字符串,JDK1.0提供,运行效率满线程安全
StringBuffer与StringBuilder用法一致
1.2常用方法
append(String str);
在末尾添加insert(index,String str);
在指定下标位置添加字符串sb.delete(index,index);
删除从指定位置开始在指定位置结束的子字符串reverse();
将字符串内容反转toString();
将StringBuffer转换成String
public class Demo01 {
public static void main(String[] args) {
//创建StringBuffer对象
//StringBuffer sb = new StringBuffer();//等效于String sb="";
StringBuffer sb = new StringBuffer("aaa");
//常用方法
//在末尾添加字符串
sb.append("bbb");
System.out.println(sb);
//在指定下标位置添加字符串
sb.insert(3,",");
System.out.println(sb);
//删除从指定位置开始在指定位置结束的子字符串
sb.delete(3,4);
System.out.println(sb);
//将字符串内容反转
sb.reverse();
System.out.println(sb);
//将StringBuffer转换成String
String s=sb.toString();
System.out.println(s);
System.out.println(s.getClass());
}
}
1.4String StringBuffer StringBuilder异同
- 相同:三者都可以表示字符串
- 不同:
- String类是字符串常量,一旦定义不能被改变
- StingBuffer StringBuilder 是可变字符串 自带缓冲区 默认是16个字节
- StingBuffer 线程安全但效率低 StringBuilder 线程不安全但效率高
- 总结:
- 在大量字符串拼接时使用StringBuilder和StingBuffer
- 不考虑线程安全情况下使用StringBuilder
- 考虑线程安全情况下使用StringBuffer
package StringBuChong;
public class Demo02 {
public static void main(String[] args) {
//需求:定义一个字符串a在这个字符串后面添加100w个比较运行时间
//记录开始时间
//currentTimeMillis 获取当前系统的一个时间毫秒数
/*
//String运行时间
long start = System.currentTimeMillis();
String s="a";
for (int i = 0; i < 1000000; i++) {
s+="a";
}
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end-start));//耗时92055毫秒
*/
/*
//tringBuffer运行时间
long start = System.currentTimeMillis();
StringBuffer sb= new StringBuffer("a");
for (int i = 0; i < 1000000; i++) {
sb.append("a");
}
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end-start));//耗时27毫秒
*/
//StringBuilder运行时间
long start = System.currentTimeMillis();
StringBuilder sb= new StringBuilder("a");
for (int i = 0; i < 1000000; i++) {
sb.append("a");
}
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end-start));//耗时17毫秒
}
}
四、时间和日期类
4.1、Date
表示特定的瞬间,精确到毫秒。要注意该类中很多方法已经过时。
构造方法:
Date()
:分配Date
对象并用当前时间初始化此对象,以表示分配它的时间(精确到毫秒)Date(long date)
:分配Date
对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日 00:00:00 GMT)以来的指定毫秒数。
常用方法:
boolean after(Date anotherDate)
:测试此日期是否在指定日期之后boolean before(Date anotherDate)
:测试此日期是否在指定日期之前int compareTo(Date anotherDate)
:比较两个日期的顺序long getTime()
:返回自1970年1月1日00:00:00 GMT以来此Date对象表示的毫秒数void setTime(long time)
:以long
类型参数time设置此Date对象,以表示1970年 1 月 1 日 00:00:00 GMT以后指定毫秒的时间点String toString()
:默认实现是把此Date对象转换为以下形式的字符串dow mon dd hh:mm:ss zzz yyyy
- dow是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)
- mon是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
- dd是一月中的某一天(01 至 31),显示为两位十进制数
- hh是一天中的小时(00 至 23),显示为两位十进制数
- mm是小时中的分钟(00 至 59),显示为两位十进制数
- ss是分钟中的秒数(00 至 61),显示为两位十进制数
- zzz是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符
- yyyy是年份,显示为 4 位十进制数
import java.util.Date;
public class DateDemo01 {
public static void main(String[] args) {
/*
//创建date对象
Date date = new Date();//使用无参构造
//表示系统当前时间
System.out.println(date);
*/
/*
//表示当前指定时间
*/
/*
* year:从1900年开始
* month:从0-11为止
* date:天数
* *//*
//有参构造表示 显示指定时间
Date date = new Date(2022 - 1900, 10 - 1, 26);
System.out.println(date);
*/
//Date的常用方法
Date date = new Date();
System.out.println(date.getYear()+1900);
System.out.println(date.getMonth()+1);
System.out.println(date.getDate());
System.out.println(date.getHours());
System.out.println(date.getMinutes());
System.out.println(date.getSeconds());
//返回date所对应的毫秒数(时间戳)1970开始
System.out.println(date.getTime()/1000/60/60/24/365);
//计算自己活了多少天
Date date1 = new Date(2000-1900,12-1,9);
//判断date是否在date1后
System.out.println(date.after(date1));
System.out.println(date.before(date1));
long day=((date.getTime()-date1.getTime())/1000/60/60/24);
System.out.println(day);
}
}
4.2SimpleDateFormat
-
以指定格式输出日期和时间。
-
将
Date
类型与字符串转换:-
Date
转换成字符串:format()
-
字符串转为
Date
:parse()
-
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) {
/*
//将日期类型格式化字符串
//创建日期格式化对象 pattern:表示格式化的格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//创建时间对象
Date date = new Date();
System.out.println(sdf.format(date));
*/
//将字符串类型转换成时间类型
String time = "2022-10-26 14:45:20";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date d= sdf.parse(time);
System.out.println(d);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
4.3Calendar
单独获取当前日期和时间中的年月日和星期。
获取Calendar对象:Calendar.getInstance()
常用字段:
Calendar.YEAR
年份Calendar.MONTH
月份,从0开始Calendar.DATE
日期Calendar.DAY_OF_MONTH
日期,和Calendar.DATE
完全相同Calendar.HOUR
12小时制的小时数Calendar.HOUR_OF_DAY
24小时制的小时数Calendar.MINUTE
分钟Calendar.SECOND
秒Calendar.DAY_OF_WEEK
星期几
常用方法:
set()
get()
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
//创建Calendar 类对象 单例模式
//表示系统当前时间
Calendar c = Calendar.getInstance();
//get参数表示指定的字段
System.out.println(c.get(Calendar.YEAR));
//month
System.out.println(c.get(Calendar.MONTH)+1);
System.out.println(c.get(Calendar.DAY_OF_YEAR));
System.out.println(c.get(Calendar.DAY_OF_MONTH));
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(c.get(Calendar.HOUR_OF_DAY));
System.out.println(c.get(Calendar.MINUTE));
System.out.println(c.get(Calendar.SECOND));
//set方法
c.set(2022,10-1,26);//设置-1 获取+1
//参数1:表示指定字段 参数2:字段值
c.set(Calendar.MONTH,10-1);
System.out.println(c.get(Calendar.MONTH));
System.out.println(c.get(Calendar.DAY_OF_MONTH));
//add方法
//参数1:表示指定的字段 参数2:增加或减少值
Calendar c2 = Calendar.getInstance();
c2.add(Calendar.MONTH,+5);
System.out.println(c2.get(Calendar.MONTH)+1);
System.out.println(c2.get(Calendar.DAY_OF_MONTH));
}
}
案例:
import java.util.Calendar;
public class Test {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println("周一\t周二\t周三\t周四\t周五\t周六\t周日");
// 设置当前月份为10月
c.set(2022,10-1,1);
int weekDay = c.get(Calendar.DAY_OF_WEEK);
for (int i = 1; i <= weekDay-2; i++) {
System.out.print("\t");
}
int month =c.get(Calendar.MONTH);
while (month==9){
int day = c.get(Calendar.DATE);
System.out.print(day+"\t");
//重新获取星期几
weekDay = c.get(Calendar.DAY_OF_WEEK);
if (weekDay==Calendar.SUNDAY){
System.out.println();
}
//每天的循环次数+1
c.add(Calendar.DATE,1);
//重新获取月份
month = c.get(Calendar.MONTH);
}
}
}
五、数学相关类
5.1、Math
类
位置:
java.lang
包中
常量:
PI
圆周率
常用方法:
ramdom()
:返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
System.out.println(Math.random());
System.out.println("===============================================");
//0~9
for(int i = 0; i < 10; i++) {
System.out.println((int)(Math.random()*10));
}
System.out.println("===============================================");
//1~10
for(int i = 0; i < 10; i++) {
System.out.println((int)(Math.random()*10) + 1);
}
//1~4
System.out.println("===============================================");
for(int i = 0; i < 10; i++) {
System.out.println(((int)(Math.random()*10))%4 + 1);
}
5.2、BigDecimal
类
位置:
java.lang
包中
**作用:**精确计算浮点整数
常用方法:
add(BigDecimal augend)
加subtract(BigDecimal subtrahend)
减multiply(BigDecimal multiplicand)
乘divide(BigDecimal divisor)
除
public class MyTest2 {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal(10);
BigDecimal num2 = new BigDecimal(9.5);
System.out.println(num1.add(num2));
System.out.println(num1.subtract(num2));
System.out.println(num1.multiply(num2));
System.out.println(num1.divide(num2));
}
}
进行除法运算时,如果不能准确的计算出结果时需要指定保留的位数和取舍方式。
divide(BigDecimal divisor, int scale, int roundingMode)
scale
:指定精确到小数点后几位mode
:指定小数部分的取舍模式,通常采用四舍五入的模式,取值为BigDecimal.ROUND_HALF_UP
public class MyTest2 {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal(10);
BigDecimal num2 = new BigDecimal(9.5);
System.out.println(num1.add(num2));
System.out.println(num1.subtract(num2));
System.out.println(num1.multiply(num2));
System.out.println(num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP));
}
}