API
API (Application ProgrammingInterface) :应用程序编程接口
常用API
Math
Math包含执行基本数字运算的方法
没有构造方法,如何使用类中的成员呢?
看类的成员是否都是静态的,如果是,通过类名就可以直接调用
方法名 | 说明 |
---|---|
public static int abs(int a) | 返回参数的绝对值 |
public static double ceil(double a) | 返回大于或等于参数的最小double值,等于一个整数 |
public static double floor(double a) | 返回小于或等于参数的最大double值,等于一个整数 |
public static int round(float a) | 按照四舍五入返回最接近参数的int |
public static int max(int a,int b) | 返回两个int值中的较大值 |
public static min(int a,int b) | 返回两个int值中较小的值 |
public static double pow(double a,double b) | 返回a的b次幂的值 |
public static double random() | 返回值为double的正值,[0.0,1.0) |
package com.dong.test05;
public class MathDemo {
public static void main(String[] args) {
//返回参数的绝对值
System.out.println(Math.abs(88));
System.out.println(Math.abs(-88));
System.out.println("----------");
//返回大于或等于参数的最小double值,等于一个整数
System.out.println(Math.ceil(12.66));
System.out.println(Math.ceil(13.36));
System.out.println("----------");
//返回小于或等于参数的最大double值,等于一个整数
System.out.println(Math.floor(12.66));
System.out.println(Math.floor(13.36));
System.out.println("----------");
//按照四舍五入返回最接近参数的int
System.out.println(Math.round(2.11));
System.out.println(Math.round(3.54));
System.out.println("----------");
//返回两个int值中的最大值
System.out.println(Math.max(2,3));
System.out.println(Math.max(50.0,36.2));
System.out.println("----------");
//返回两个int值中的最小值
System.out.println(Math.min(2,3));
System.out.println(Math.min(3.54,36.0));
System.out.println("----------");
//返回a的b次幂
System.out.println(Math.pow(2,3));
System.out.println("----------");
//返回值为double的正值
System.out.println(Math.random());
}
}
System
System包含几个有用的类字段和方法,它不能被实例化
方法名 | 说明 |
---|---|
public static void exit(int status) | 终止当前运行的java虚拟机,非零表示异常终止 |
public static long currentTimeMillis( ) | 返回当前时间(以毫秒为单位) |
package com.dong.test05;
public class SystemDemo {
public static void main(String[] args) {
System.out.println("开始");
System.out.println(System.currentTimeMillis()*1.0/1000/60/60/24/365+"年");
System.exit(0);
System.out.println("结束");
long start=System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
long end =System.currentTimeMillis();
System.out.println("共耗时:"+(end-start)+"毫秒");
}
}
Object
Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或者间接的继承自该类
构造方法: public Object( )
回想面向对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法?
因为它们的顶级父类只有无参构造方法
方法名 | 说明 |
---|---|
public String toString() | 返回对象的字符串表示形式,建议所有子类重写该方法,自动生成 |
public boolean equals(Object obj) | 比较对象是否相等。默认比较地址。重写可以比较内容,自动生成 |
toString方法
/*看方法的源码,选中方法,按下CtrL+B
建议所有子类重写此方法
如何重写呢?自动生成即可
*/
public class ObjectDemo {
public static void main(String[] args) {
Student s = ncw Student();
s.setName("林青霞");
s.setAge(30);
System.out.println(s); //com.itheima_01.Student@3f3ofe78
System.out.print1n(s.toString()); //com.itheima_01.Student@3f3ofe78
/*方法源码
public void println(Object x) { //x = s;
String s = String. value0f(x);
synchronized (this) {
print(s);
newline();
}
}
public static String valueOf(Object obj) { //obj = x;
return (obj = null) ? "null" : obj.toString();
}
public String toString() {
return getClass().getName() + "e" + Integer. toHexString(hashCode());
}
*/
equals方法
@Override
public boolean equals(Object o){
/*
this --- s1
o --- s2
*/
//比较地址是否相同,如果相同,直接返回true
if (this == o) return true;
//判断参数是否为null
//判断两个对象是否来自于同一个类
if (o == nu11|| getClass() != o.getClass()) return false;
//向下转型
Student student = (Student) o; //student = s2;
//比较年龄是否相同
if (age != student.age) return false;
//比较姓名内容是否相同
return name != nu1l ? name.equals(student .name) : student .name = nu11;
}
Arrays
见数组Arrays类
基本类型包装类
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据常用的操作之一:用于基本数据类型与字符串之间的转换
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
Integer
package com.dong.test05;
/*
构造方法:
public Integer(int value).. 根据int值创建Integer 对象(过时)
public Integer(String s): 根据String 值创建Integer 对象(过时)
静态方法获取对象。
public static Integer valueOf (int i): 返回表示指定的int值的Integer 实例
public static Integer value0f (String s):返回一个保存指定值的Integer 对象String
*/
public class IntegerDemo {
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("an");//NumberFormatException 不是数字的字符串
Integer i2 = new Integer("100");
System.out.println(i2);
//public static Integer valueOf (int i): 返回表示指定的int值的Integer 实例
Integer i3=Integer.valueOf(200);
System.out.println(i3);
//public static Integer value0f (String s):返回一一个保存指定值的Integer 对象String
Integer i4=new Integer("200");
//Integer i4=new Integer("2a00");//NumberFormatException 不是数字的字符串
System.out.println(i4);
}
}
int 与String相互转换
package com.dong.test05;
/*
int yu String相互转换
*/
public class IntegerDemo01 {
public static void main(String[] args) {
//int-->String
int num = 1;
//方式1
String s1 = "" + num;
System.out.println(s1);
//方法2
// public static String valueOf(int i)
String s2=String.valueOf(num);
System.out.println(s2);
System.out.println("--------------");
//String--->int
String s="100";
//方式一
Integer i=Integer.valueOf(s);
int x=i.intValue();
System.out.println(x);
//方式二
//public static int parseInt(String s)
int y=Integer.parseInt(s);
System.out.println(y);
}
}
字符串中数据排序
需求:有一个字符串: “91 27 46 38 50”,请写程序实现最终输出结果是: “27 38 46 50 91”
思路:
①定义一个字符串
②把字符串中的数字数据存储到一个int类型的数组中
●得到字符串中每一一个数字数据?
public String[] split(String regex)
●定义一个int数组,把StringO 数组中的每一个元素存储到 int数组中
public static int parselnt(String s)
③对int数组进行排序
④把排序后的int数组中的元索进行拼接得到一个字符串,这里拼接采用StringBuilder来实现
⑤输出结果
package com.dong.test05;
import java.lang.reflect.Array;
import java.util.Arrays;
public class IntegerTest {
public static void main(String[] args) {
//定义一个字符串
String s="91 27 46 38 50";
//把字符串中的数字数据存储到一个int类型的数组中
String[] strArray=s.split(" ");
//定义一个int数组,把String[]数组中的每个元素存储到int数组中
int[] arr=new int[strArray.length];
for (int i = 0; i < arr.length; i++) {
arr[i]=Integer.parseInt(strArray[i]);
}
//对int数组进行排序
Arrays.sort(arr);
//把排序后的int数组中的元素进行拼接得到一个字符串,这里采用StringBuilder来实现
StringBuilder sb=new StringBuilder();
for (int i=0;i<arr.length;i++){
if(i==arr.length-1){
sb.append(arr[i]);
}else {
sb.append(arr[i]+" ");
}
}
String string=sb.toString();
//输出结果
System.out.println(string);
}
}
自动装箱和拆箱
装箱:把基本数据类型转换为对应的包装类类型
拆箱:把包装类类型转换为对应的基本数据类型
注意:在使用包装类类型的时候,如果做操作,最好先判断是否为null
推荐的是,只要是对象,在使用前就必须进行不为null的判断
package com.dong.test05;
public class IntegerDemo03 {
public static void main(String[] args) {
//装箱,把基本数据类型转换为对应的包装类类型
Integer i=Integer.valueOf(100);//手动装箱
Integer i1=100;//Integer.valueOf(100);自动装箱
//拆箱,把包装类类型转换为对应的基本数据类型
i1=i1.intValue()+200;//手动拆箱
i1+=200;//自动拆箱
}
}
日期类
Date类
概述和构造方法
package com.dong.test05;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
//public Date():分配一个Date对象,并初始化,以便它代表它被分配的空间
Date d1=new Date();
System.out.println(d1);
//public Date(long date):分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
long date=1000*60*60;
Date d2=new Date(date);
System.out.println(d2);
}
}
常用方法
package com.dong.test05;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
//创建日期对象
Date d = new Date();
//public long getTime():获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
//public void setTime(long time):设置时间给的是毫秒值
// long time = 1000 * 60 * 60;
long time = System.currentTimeMillis();
d.setTime(time);
System.out.println(d);
}
}
SimpleDateFormat类
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。我们重点学习日期格式化和解析
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从’A’到Z’以及从’a到’z 引号的字母被解释为表示日期或时间字符串的组件的模式字母
常用的模式字母及对应关系如下:
-
y 年
-
M 月
-
d 日
-
H 时
-
m 分
-
s 秒
SimpleDateFormat格式化和解析日期
1.格式化(从Date到String )
public final String format(Date date):将日期格式化成日期/时间字符串
2.解析(从String到Date )
public Date parse(String source):从给定字符串的开始解析文本以生成日期
package com.dong.test05;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
构造方法:
public SimpleDateFormat ():构造一 个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat (String pattern):构造一 个simpleDateFormat使用给定的模式和默认的日期格式
格式化:从Date到String
public final String format(Date date): 将日期格式化成日期/时间字符串
解析。从String到Date
public Date parse (String source). 从给定字符串的开始解析文本以生成日期
*/
public class DateDemo {
public static void main(String[] args) throws ParseException {
//格式化:从Date到String
Date d=new Date();
//SimpleDateFormat sdf=new SimpleDateFormat();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s=sdf.format(d);
System.out.println(s);
System.out.println("---------------");
//从String到Date
String ss="2020-07-01 11:11:11";
SimpleDateFormat stf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式要一致
Date dd=stf2.parse(ss);
System.out.println(dd);
}
}
案例
需求:定义一个日期工具类(DateUtils),包含两个方法:把日期转换为指定格式的字符串;把字符串解析为指定格式的日期,然后定义一个测试类(DateDemo), 测试日期工具类的方法。
思路:
①定义日期工具类(DateUtils)
②定义一个方法dateToString, 用于把日期转换为指定格式的字符串
●返回值类型: String
●参数: Date date, String format
③定义一个方法stringToDate, 用于字符串解析为指定格式的日期
●返回值类型: Date
●参数: Strings, String format
④定义测试类DateDemo,调用日期工具类中的方法
package com.dong.test05;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
工具类
构造方法私有
成员方法静态
*/
public class DateUtils {
private DateUtils(){}
//把日期转换为指定格式的字符串
public static String dateToString(Date date,String format){
SimpleDateFormat sdf=new SimpleDateFormat(format);
String s=sdf.format(date);
return s;
}
//把字符串解析为指定格式的日期
public static Date stringToDate(String string,String format) throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat(format);
Date date=sdf.parse(string);
return date;
}
}
package com.dong.test05;
import java.text.ParseException;
import java.util.Date;
public class DateDemo01 {
public static void main(String[] args) throws ParseException {
Date d=new Date();
String s=DateUtils.dateToString(d,"yyyy年MM月dd日 HH:mm:ss");
System.out.println(s);
String ss="2020-07-01 11:11:11";
Date d1=DateUtils.stringToDate(ss,"yyyy-MM-dd HH:mm:ss");
System.out.println(d1);
}
}
Calendar类
package com.dong.test05;
/*
Calendar为某一时刻和一 组日历宇段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar提供了一个类方法getInstance 用于获取Calendar 对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar. getInstance();
*/
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
//获取对象
Calendar c = Calendar.getInstance();//多态的形式
//public int get (int field)
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;//月份从0开始
int date=c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
}
}
Calendar的常用方法
package com.dong.test05;
/*
Calendar为某一时刻和一 组日历宇段之间的转换提供了一些方法, 并为操作日历字段提供了一些方法
Calendar提供了一个类方法getInstance 用于获取Calendar 对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar. getInstance();
*/
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
//获取对象
Calendar c = Calendar.getInstance();//多态的形式
//public int get (int field)
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;//月份从0开始
int date=c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//public abstract void add (int field, int amount):根据日历的规则,将指定的时间量添加或减去给定的日历字段
//需求1三年前的今天
c.add(Calendar.YEAR,-3);
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;//月份从0开始
int date=c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//设置当前日历的年月日
c.set(2025,11,15);
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;//月份从0开始
int date=c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
}
}
案例
package com.dong.test05;
import java.util.Calendar;
import java.util.Scanner;
/*
需求:
获取任意一年的二月有多少天
思路。
1:键盘录入任意的年份
2:设置日历对象的年、月、日、年,来自于键盘录入
月:设置为3月,月份是从e开始的,所以设置的值是2
日:设置为1日.
3:3月1日往前推一天, 就是2月的最后-天
4:获取这一天输出即可
*/
public class CalendarTest {
public static void main(String[] args) {
//键盘录入数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
//设置对象日历的年月日
Calendar calendar = Calendar.getInstance();
calendar.set(year,2,1);
calendar.add(Calendar.DATE,-1);
int date=calendar.get(Calendar.DATE);
System.out.println(year+"年的2月份有"+date+"天");
}
}