目录
前言:
一、Object:toString+equals
二、StringBuilder
三、Math
四、System
五、BigDecimal
前言:
API的主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供API所定义的功能的软件称作此API的实现。API是一种接口,故而是一种抽象。
应用程序接口(英语:Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。
一、Object:toString+equals
①object常用的方法:
-
1、public String toString() :返回当前对象在堆内存中的地址
-
2、public Boolean equals(object o):与另一个对象比较,看两个对象是否相同,默认比较对象的地址!!
②toString存在的意义:
-
父类toString()方法存在的意义就是为了被子类重写,一边返回对象的内容信息,而不是地址信息!!
-
equals是为了被子类重写,以便子类来制定比较规则
③Object的toString方法的作用是什么?
默认是打印当前对象的地址;
让子类重写,以便返回子类对象的内容
④Object的equals方法的作用是什么?
默认是与另一个对象比较地址是否一样;
让子类重写,以便比较2个子类对象的内容是否相同。
⑤代码演示:
/**objects
*1、与object是继承关系
* 1、equals :objects的方法equals 比较结果是一样的,但更安全
* (比较两个对象,底层会先进行非空判断,从尔避免空指针异常,再equals比较)
* 2、isNull :判断变量是否为null,如果为null则返回true
*/
public class object {
public static void main(String[] args) {
String s1 = null;
String s2 = new String("itheima");
System.out.println(Objects.equals(s1,s2)); //更安全,结果更正确
}
}
⑥案例:
验证码比较
//String 类提供equals比较:只关心内容一样
/*
public boolean equals(Object anObject) :将此类字符与指定对象进行比较,只关心字符内容是否一致
public boolean equalsIgnoreCase(String anotherString) :将此类字符与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致
*/
public class StringEqalsDemo {
public static void main(String[] args) {
String okname = "itheima";
String okpassword = "123456";
//输入登录密码和名称
Scanner sc = new Scanner(System.in);
System.out.println("用户名:");
String name = sc.next();
System.out.println("用户密码:");
String password = sc.next();
//判断用户输入的名称和密码与正确的用户名和密码是否相等
if(okname.equals(name) && okpassword.equals(password)){
System.out.println("登陆成功!");
}else{
System.out.println("用户名或密码错误!");
}
//忽略大小写比较内容的API:一般用于验证验证码这样的业务逻辑
String Syscode = "23AdFh";
String code1 = "23aDfH";
System.out.println(Syscode.equals(code1));//false
System.out.println(Syscode.equalsIgnoreCase(code1));//true
}
}
⑦objects
1.objects与object的关系。
objects与object还是继承关系,objects类是从JDK1.7开始才有的。
官方在进行字符串比较时,没有对象自己的equals方法,而是选择了Objects的equals方法来比较两个对象。
2.equals :
objects的方法equals 比较结果是一样的,但更安全(比较两个对象,底层会先进行非空判断,从尔避免空指针异常,再equals比较);
3.isNull :
判断变量是否为null,如果为null则返回true。
二、StringBuilder
1.概述:
StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器
2.作用:
提高字符串的操作效率,如拼接和修改等
3.StringBuilder构造器
4.StringBuilder常用方法
5.代码演示:
/**
* StringBuilder
* 是一个可变的字符串类,我们可以把它看成是一个对象容器
* 作用:提高字符串的操作效率,如拼接和修改等
*/
public class Test {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");
sb.append("c");
System.out.println(sb);
//机制:链式编程
StringBuilder sb1 = new StringBuilder();
sb1.append("2").append("c").append("v");
System.out.println(sb1);
//反转
sb1.reverse().append("110");
System.out.println(sb1);
System.out.println(sb1.length());
//StringBuilder只是拼接字符串的手段,最终结果要恢复成String类型
StringBuilder sb2 = new StringBuilder();
sb2.append("3").append("5").append("7");
//恢复成String类型
String rs = sb2.toString();
check(rs);
//Test
int[] arr1 = null;
System.out.println(toString(arr1));
int[] arr2 = {10,22,44,32};
System.out.println(toString(arr2));
}
public static String toString(int[] arr) {
if (arr != null) {
StringBuilder sb3 = new StringBuilder("[");
for (int i = 0; i < arr.length; i++) {
sb3.append(arr[i]).append(i == arr.length-1 ? "" : ",");
}
sb3.append("]");
return sb3.toString();
}else {
return null;
}
}
public static void check(String date) {
System.out.println(date);
}
}
6.总结:
①为什么拼接、反转字符串建议使用StringBuilder?
String:内容是不可变的、拼接字符串性能差;
StringBuilder:内容是可变的、拼接字符串性能好、代码优雅。
定义字符串使用String;
拼接、反转字符串使用StringBuilder。
7.案例:打印整型数组内容
需求:
设计一个方法用于输出任意整型数组的内容,要求输出成如下格式:
"该数组内容为:[11,22,33,44,55]"
public class Test {
public static void main(String[] args) {
//Test
int[] arr1 = null;
System.out.println(toString(arr1));
int[] arr2 = {11,22,33,44,55};
System.out.println(toString(arr2));
}
/**
1.定义方法接收任意整型数组,返回数组内容格式
*/
public static String toString(int[] arr) {
if (arr != null) {
//开始拼接数组
StringBuilder sb3 = new StringBuilder("[");
for (int i = 0; i < arr.length; i++) {
sb3.append(arr[i]).append(i == arr.length-1 ? "" : ",");
}
sb3.append("]");
return sb3.toString();
}else {
return null;
}
}
}
三、Math
1.概述:
包含执行基本数字运算的方法,Math类没有提供公开的构造器。
2.Math的常用方法
3.代码演示:
/**Math类常用方法
* abs 获取参数绝对值
* ceil 向上取整
* floor 向下取整
* round 四舍五入
* max 获取两个int中的较大值
* pow(a ,b) 获取a 的b次幂
* random 返回随机值
*/
public class Math_Test {
public static void main(String[] args) {
//1.取绝对值:返回正数
System.out.println(Math.abs(-10.4));
//2.向上取整
System.out.println(Math.ceil(4.0001));
//3.向下取整
System.out.println(Math.floor(4.9999));
//4.指数次方
System.out.println(Math.pow(2,3));
//5.四舍五入
System.out.println(Math.round(4.990099));
//6.扩展 获取3~9之间的随机数 ==》 (0~6)+3
int data = (int)(Math.random()*7)+3;
System.out.println(data);
}
}
四、System
1.概述:
System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化。
2.System类的常用方法
3.代码演示:
import java.util.Arrays;
/**
* System 功能是通用的,都是用类名调用即可,所以System不能被实例化
* 常用方法:
* exit :终止当前运行的Java虚拟机
* currentTimeMillis 返回系统时间毫秒形式
* arraycopy 数组拷贝
*/
public class System_Test {
public static void main(String[] args) {
//1、
System.out.println("程序开始");
System.exit(0);
System.out.println("程序结束");
//2、计算机认为时间是有起源的 起始时间:1970年1月1日
long time =System.currentTimeMillis();
System.out.println(time);
long startTime =System.currentTimeMillis();
//进行时间计算,性能分析
for (int i = 0; i < 100000; i++) {
System.out.println("输出 :" +i);
}
long endTime =System.currentTimeMillis();
System.out.println((endTime-startTime)/1000+"s");
//3.数组拷贝
/**
* arraycopy(Object src, int srcPos,
* Object dest, int destPos,
* int length);
* 参数一:被拷贝的数组
* 参数二:从哪个索引开始拷贝
* 参数三:复制的目标数组
* 参数四:粘贴位置
* 参数五:拷贝元素的个数
*/
int[] arr1 = {10,20,30,40,50,60,70};
int[] arr2 = new int[6];//{0,0,0,0,0,0}==>[0,0,40,50,60,0]
System.arraycopy(arr1,3,arr2,2,3);
System.out.println(Arrays.toString(arr2));
}
}
五、BigDecimal
1.作用:
用于解决浮点型运算精度失真的问题。
2.使用步骤:
创建对象BigDecimal封装浮点型数据(最好的方式是调用方法):
3.BigDecimal常用API
4.代码演示:
import java.math.BigDecimal;
import java.math.RoundingMode;
/**BigDecimal
* 作用:用于解决浮点型运算精度是真问题
* add 加法
* subtract 减法
* multiply 乘法
* divide 除法
* 获取对象:BigDecimal b = BigDecimal.valueOf(0.2);
*/
public class Test {
public static void main(String[] args) {
double a = 0.1;
double b = 0.2;
double c = a+b;
System.out.println(c);
System.out.println("-------------");
BigDecimal a1 = BigDecimal.valueOf(a);
BigDecimal b1 = BigDecimal.valueOf(10.0);
BigDecimal c1 = a1.add(b1);
System.out.println(c1);
System.out.println("----------------");
/**
* 参数一:除数
* 参数二:保留小数点的位数
* 参数三: 舍入模式
*/
BigDecimal c11 = a1.divide(b1,2, RoundingMode.HALF_UP);
System.out.println(c11);
}
}