一、Java包装类
在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。
1、包装类
包装类 | 基本数据类型 |
---|---|
Boolean | boolean |
Byte | byte |
Short | short |
Integer | int |
Long | long |
Character | char |
Float | float |
Double | double |
2、装箱与拆箱
- 装箱:将基本数据类型转换为包装类类型
装箱的时候,调用包装器的valueOf方法实现
- 拆箱:将包装类类型装换为基本数据类型
拆箱的时候,调用包装器的xxxValue方法实现,xxx代表基本数据类型
二、Math类
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
1、Number & Math类方法
方法与描述 | |
---|---|
1 | xxxValue() 将 Number 对象转换为xxx数据类型的值并返回。 |
2 | compareTo() 将number对象与参数比较。 |
3 | equals() 判断number对象是否与参数相等。 |
4 | valueOf() 返回一个 Number 对象指定的内置数据类型 |
5 | toString() 以字符串形式返回值。 |
6 | parseInt() 将字符串解析为int类型。 |
7 | abs() 返回参数的绝对值。 |
8 | ceil() 返回大于等于( >= )给定参数的的最小整数,类型为双精度浮点型。 |
9 | floor() 返回小于等于(<=)给定参数的最大整数 。 |
10 | rint() 返回与参数最接近的整数。返回类型为double。 |
11 | round() 它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。 |
12 | min() 返回两个参数中的最小值。 |
13 | max() 返回两个参数中的最大值。 |
14 | exp() 返回自然数底数e的参数次方。 |
15 | log() 返回参数的自然数底数的对数值。 |
16 | pow() 返回第一个参数的第二个参数次方。 |
17 | sqrt() 求参数的算术平方根。 |
18 | sin() 求指定double类型参数的正弦值。 |
19 | cos() 求指定double类型参数的余弦值。 |
20 | tan() 求指定double类型参数的正切值。 |
21 | asin() 求指定double类型参数的反正弦值。 |
22 | acos() 求指定double类型参数的反余弦值。 |
23 | atan() 求指定double类型参数的反正切值。 |
24 | atan2() 将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。 |
25 | toDegrees() 将参数转化为角度。 |
26 | toRadians() 将角度转换为弧度。 |
27 | random() 返回一个随机数。 |
2、Math的floor,round和ceil方法比较
- Math.floor:向下取整,返回比当前值小的最大整数
- Math.round:四舍五入取整
- Math.ceil:向上取整,返回比当前值大的最小整数
三、Character类
1、Character类
(1)创建Character类对象
Character ch = new Character('a');
(2)char与Character的装换
//char转Character
Character c1=new Character('A');
Character c2=Character.valueOf('A');
//Character转char
Character ch1=new Character( 'A' );
char ch2=ch1.toString().charAt(0);
char ch3=Character.toString(ch1).charAt(0);
char ch4=ch1.charValue();
2、转义字符
转义序列 | 描述 |
---|---|
\t | 在文中该处插入一个tab键 |
\b | 在文中该处插入一个后退键 |
\n | 在文中该处换行 |
\r | 在文中该处插入回车 |
\f | 在文中该处插入换页符 |
\' | 在文中该处插入单引号 |
\" | 在文中该处插入双引号 |
\\ | 在文中该处插入反斜杠 |
public class Test {
public static void main(String[] args) {
System.out.println("访问\"菜鸟教程!\"");
}
}
输出结果:
访问"菜鸟教程!"
3、Character类中的方法
序号 | 方法与描述 |
---|---|
1 | isLetter() 是否是一个字母 |
2 | isDigit() 是否是一个数字字符 |
3 | isWhitespace() 是否是一个空白字符 |
4 | isUpperCase() 是否是大写字母 |
5 | isLowerCase() 是否是小写字母 |
6 | toUpperCase() 指定字母的大写形式 |
7 | toLowerCase() 指定字母的小写形式 |
8 | toString() 返回字符的字符串形式,字符串的长度仅为1 |
四、String类
1、创建字符串
//直接创建
String str = "Runoob";
//构造函数创建
String str2=new String("Runoob");
//但String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。如果需要对字符串做很多修改,那么应该选择使用StringBuffer类或者StringBuilder类。
2、创建格式化字符串
String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。
String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。
float floatVar = 5.2f;
int intVar = 5;
String stringVar = "hello";
System.out.printf("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
"is %s", floatVar, intVar, stringVar);
//或者
fs = String.format("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
" %s", floatVar, intVar, stringVar);
System.out.println(fs);
输出结果:
浮点型变量的值为 5.200000, 整型变量的值为 5, 字符串变量的值为 hello
3、String方法
序号 | 方法及解释 |
1 | char charAt (int index) 返回index所指定的字符 |
2 | String concat(String str) 将两字符串连接 |
3 | boolean endsWith(String str) 测试字符串是否以str结尾 |
4 | boolean equals(Object obj) 比较两对象 |
5 | char[] getBytes 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
6 | char[] getBytes(String str) 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
7 | boolean startsWith(String str) 测试字符串是否以str开始 |
8 | int length() 返回字符串的长度 |
9 | String replace(char old ,char new) 将old用new替代 |
10 | char[] toCharArray 将字符串转换成字符数组 |
11 | String toLowerCase() 将字符串内的字符改写成小写 |
12 | String toUpperCase() 将字符串内的字符改写成大写 |
13 | String valueOf(Boolean b) 将布尔方法b的内容用字符串表示 |
14 | String valueOf(char ch) 将字符ch的内容用字符串表示 |
15 | String valueOf(int index) 将数字index的内容用字符串表示 |
16 | String valueOf(long l) 将长整数字l的内容用字符串表示 |
17 | String substring(int1,int2) 取出字符串内第int1位置到int2的字符串 |
五、StringBuffer类和StringBuilder类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
1、StringBuffer与StringBuilder
- 在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
- StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
- 由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
2、StringBuffer常用方法
StringBuilder 和 StringBuffer 方法和功能完全一致
方法描述 | |
---|---|
1 | public StringBuffer append(String s) 将指定的字符串追加到此字符序列。 |
2 | public StringBuffer reverse() 将此字符序列用其反转形式取代。 |
3 | public delete(int start, int end) 移除此序列的子字符串中的字符。 |
4 | public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。 |
5 | insert(int offset, String str) 将 str 参数的字符串插入此序列中。 |
6 | replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。 |
7 | char charAt(int index) 返回此序列中指定索引处的 char 值。 |
8 | int indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。 |
9 | int indexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。 |
10 | int lastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引。 |
11 | int lastIndexOf(String str, int fromIndex) 返回 String 对象中子字符串最后出现的位置。 |
12 | int length() 返回长度(字符数)。 |
13 | String substring(int start) 返回一个新的 String ,它包含此字符序列当前所包含的字符子序列。 |
14 | String substring(int start, int end) 返回一个新的 String ,它包含此序列当前所包含的字符子序列。 |
15 | String toString() 返回此序列中数据的字符串表示形式。 |
String,StringBuffer和StringBuilder常用方法可参考:
https://blog.youkuaiyun.com/qq_34107571/article/details/80098055
六、日期与时间
1、创建日期对象
Date()
Date(long millisec)
2、常用方法
序号 | 方法和描述 |
---|---|
1 | boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
2 | boolean before(Date date) 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
3 | Object clone( ) 返回此对象的副本。 |
4 | int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
5 | int compareTo(Object obj) 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。 |
6 | boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
7 | long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
8 | int hashCode( ) 返回此对象的哈希码值。 |
9 | void setTime(long time) 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 |
10 | String toString( ) 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
3、日期比较的三种方法
- 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
- 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
- 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
System.out.println(new Date(99, 2, 12).getTime()<new Date(99, 2, 18).getTime());
System.out.println(new Date(99, 2, 12).before(new Date(99, 2, 18)) );
System.out.println(new Date(99, 2, 12).after(new Date(99, 2, 18)) );
System.out.println(new Date(99, 2, 12).equals(new Date(99, 2, 18)) );
System.out.println(new Date(99, 2, 12).compareTo(new Date(99, 2, 18)));
执行结果:
true
true
false
false
-1
4、日期格式化
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println("当前时间为: " + ft.format(dNow));
输出结果:
当前时间为: 2022-04-04 01:45:21
日期格式化编码
字母 | 描述 | 示例 |
---|---|---|
G | 纪元标记 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一个月的日期 | 10 |
h | A.M./P.M. (1~12)格式小时 | 12 |
H | 一天中的小时 (0~23) | 22 |
m | 分钟数 | 30 |
s | 秒数 | 55 |
S | 毫秒数 | 234 |
E | 星期几 | Tuesday |
D | 一年中的日子 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
' | 文字定界符 | Delimiter |
" | 单引号 | ` |
printf格式化日期
printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。
转 换 符 | 说 明 | 示 例 |
---|---|---|
c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | "年-月-日"格式 | 2007-10-27 |
D | "月/日/年"格式 | 10/27/07 |
r | "HH:MM:SS PM"格式(12时制) | 02:25:51 下午 |
T | "HH:MM:SS"格式(24时制) | 14:28:16 |
R | "HH:MM"格式(24时制) | 14:28 |
// 初始化 Date 对象
Date date = new Date();
//c的使用
System.out.printf("全部日期和时间信息:%tc%n",date);
//f的使用
System.out.printf("年-月-日格式:%tF%n",date);
//d的使用
System.out.printf("月/日/年格式:%tD%n",date);
//r的使用
System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
//t的使用
System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
//R的使用
System.out.printf("HH:MM格式(24时制):%tR",date);
输出结果:
全部日期和时间信息:星期一 四月 04 13:48:36 CST 2022
年-月-日格式:2022-04-04
月/日/年格式:04/04/22
HH:MM:SS PM格式(12时制):01:48:36 下午
HH:MM:SS格式(24时制):13:48:36
HH:MM格式(24时制):13:48
5、休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
public class SleepDemo {
public static void main(String[] args) {
try {
System.out.println(new Date( ) + "\n");
Thread.sleep(1000*3); // 休眠3秒
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
运行结果:
Mon Apr 04 13:58:24 CST 2022
Mon Apr 04 13:58:27 CST 2022
6、Calendar类
Calender能够设置和获取日期数据的特定部分,比如说小时,日,或者分钟,同时我们可以通过Calender在日期的这些部分加上或者减去值。
(1)创建Calendar对象
//默认是当前日期 Calendar c = Calendar.getInstance();//创建一个代表2009年6月12日的Calendar对象 Calendar c1 = Calendar.getInstance(); c1.set(2009, 6 - 1, 12);
(2)Calendar类对象字段类型
常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,和上面的字段意义完全相同 |
Calendar.HOUR | 12小时制的小时 |
Calendar.HOUR_OF_DAY | 24小时制的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期几 |
(3)Calendar类对象信息设置
Set设置
set(int field,int value)说明:field表示Calendar类对象字段类型,value表示对应值
Add设置
add(int field,int value)
说明:field表示Calendar类对象字段类型,value表示对应值
Get设置
get(int field)
说明:field表示Calendar类对象字段类型,也可以对这些字段进行一些数学操作,如加几秒或者减几秒
七、Java方法
1、方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
- 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
- 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
- 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
- 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
- 方法体:方法体包含具体的语句,定义该方法的功能。
2、方法调用
- 当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。当方法返回一个值的时候,方法调用通常被当做一个值。
- 如果方法返回值是void,方法调用一定是一条语句。
public class TestMax {
/** 主方法 */
public static void main(String[] args) {
int i = 5;
int j = 2;
int k = max(i, j);
System.out.println( i + " 和 " + j + " 比较,最大值是:" + k);
}
/** 返回两个整数变量较大的值 */
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
}
3、方法重写与方法重载
方法重写
把握五点:三同,一大,一小
- 三同:参数列表必须完全与被重写方法相同、返回类型必须完全与重写方法的返回类型相同、方法名必须相同
- 一大:访问权限不能比被重写方法的反问权限低
- 一小:重写方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但重写方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
方法重载
- 被重载的方法必须改变参数列表(参数个数或类型或顶序不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
4、构造方法
构造规则
- 构造函数名必须与其类名称相同
- 构造函数必须没有显式返回类型
构造函数类型
- 默认构造函数(无参数构造函数)
- 参数化构造函数
class Test{
int id;
Test(int id){
this.id = id;
}
public static void main(String args[]) {
Test t = new Test(1);
}
5、finalize()方法
Java 允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用来清除回收对象。在 finalize() 方法里,你必须指定在对象销毁时候要执行的操作。
public class FinalizationDemo {
public static void main(String[] args) {
Cake c1 = new Cake(1);
Cake c2 = new Cake(2);
Cake c3 = new Cake(3);
c2 = c3 = null;
System.gc(); //调用Java垃圾收集器
}
}
static class Cake extends Object {
private int id;
public Cake(int id) {
this.id = id;
System.out.println("Cake Object " + id + "is created");
}
protected void finalize() throws java.lang.Throwable {
super.finalize();
System.out.println("Cake Object " + id + "is disposed");
}
}
输出结果
Cake Object 1is created
Cake Object 2is created
Cake Object 3is created
Cake Object 3is disposed
Cake Object 2is disposed