Java基础—–常用API
——- android培训、java培训、期待与您交流! ———-
一.Calendar类
Calendar类的静态方法getInstance()可以初始化一个日历对象:Calendar now = Calendar.getInstance();
可以使用下面三个方法把日历定到任何一个时间:
set(int year ,int month,int date)
set(int year ,int month,int date,int hour,int minute)
set(int year ,int month,int date,int hour,int minute,int second)
如果想获得年份、月份、小时等信息可以使用:
Now.get(Calendar.Month);这样的方法 0表示一月,1表示二月
get(Calendar.DAY_OF_MONTH)获得这个月的第几天
get(Calendar.DAY_OF_WEEK)获得这个星期的第几天
get(Calendar.DAY_OF_YEAR)获得这个年的第几天
getTimeMillis()获得当前时间的毫秒表示
一些使用场景
1.计算某一月份的最大天数
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间。
2.Calendar和Date的转化
//Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
//Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
3.格式化输出日期时间
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(df.format(date));
4.计算相隔天数的方法
public int getDaysBetween (Calendar d1, Calendar d2){
if (d1.after(d2)){ // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2){
d1 = (Calendar) d1.clone();
do{
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
5.获取百天后的日期
/**
* 输出一百天的日期
*/
package com.itheima.demo.FileDemo;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class _2 {
public static void main(String[] args) {
SimpleDateFormat sfd = new SimpleDateFormat("yyyy年MM月dd日");//这 里M必须为大写
Date d = new Date();
Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, 100);
System.out.println(sfd.format(c.getTime()));
}
}
二.System类
System类是一个功能强大、非常有用的特殊类,它提供了标准输入输出、运行是的系统信息等重要工具。但不能创建System类的对象,它所有的属性和方法都是静态的,引用时应以System为前缀。
1 用System类获取标准输入输出
System类的属性有三个,分别是系统的标准输入,标准输出和标准错误输出。
public static PrintStream err;
public static PrintStream in;
public static PrintStream out;
通常标准输入指的是输入设备键盘,标准输出和标准错误输出指的是输出设备屏幕,如:
char c=System.in.read();//由键盘读入一个字节的数据送给字符变量C
System.out.println(“Hello! Guys,”);//由屏幕输出一个字符串。
2 用System类的方法获取系统信息,完成系统操作
System类提供用来与运行Java的系统进行交互操作的方法,利用这些方法可以获取解释器或硬件平台的系统参量信息,也可以直接向运行系统发出指令来完成系统操作。常用的System类方法如下:
public static long currentTimeMillis();//获取1970年1月1日零时到当前系统时刻的微秒数。
public static void exit(int status);//在程序的用户线程执行完以前,强制Java虚拟机退出运行状态,并把状态信息status返回运动虚拟机的操作系统。
public static void gc();//gc方法代表无用内存回收器。
3.应用示例代码
- System类中除了可以进行内容输出外,还可以通过方法取得一个操作的计算时间.
public class SystemDemo01{
public static void main(String args[]){
long startTime = System.currentTimeMillis() ; // 取得开始计算之前的时间
int sum = 0 ; // 声明变量
for(int i=0;i<30000000;i++){ // 执行累加操作
sum += i ;
}
long endTime = System.currentTimeMillis() ; // 取得计算之后的时间
// 结束时间减去开始时间
System.out.println("计算所花费的时间:" + (endTime-startTime) +"毫秒") ;
}
};
- 除了此功能之外,还可以列出本机的全部系统属性.
public class SystemDemo02{
public static void main(String args[]){
System.getProperties().list(System.out) ; // 列出系统的全部属性
}
};
- 调用系统部分属性
public class SystemDemo03{
public static void main(String args[]){
System.out.println("系统版本:" + System.getProperty("os.name")
+ System.getProperty("os.version")
+ System.getProperty("os.arch")) ;
System.out.println("系统用户:" + System.getProperty("user.name")) ;
System.out.println("当前用户目录:" + System.getProperty("user.home")) ;
System.out.println("当前用户工作目录:" + System.getProperty("user.dir")) ;
}
};
- 垃圾对象的回收
一个对象如果不使用,则肯定要等待进行垃圾收集,垃圾收集可以自动调用也可以手式调用,手式调用的时候就是调用System.gc()或Runtime.getRuntime().gc(). 但是,如果一个对象在回收之前需要做一些收尾工作,则就必须覆写Object类中的protected void finalize() throws Throwable在对象被回收之前进行调用,以处理对象回收前的若干操作,例如释放资源等等.
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age;
}
public String toString(){ // 覆写toString()方法
return "姓名:" + this.name + ",年龄:" + this.age ;
}
public void finalize() throws Throwable{ // 对象释放空间时默认调用此方法
System.out.println("对象被释放 --> " + this) ;
}
};
public class SystemDemo04{
public static void main(String args[]){
Person per = new Person("张三",30) ;
per = null ; // 断开引用
System.gc() ; // 强制性释放空间
}
};
注:只有强制性调用gc()的时候才可以发现对象被回收,当然,如果不调用,则系统也会在一定时间内自动进行回收。
三.Runtime类
1.概述
1、每个java应用程序都有一个Runtime类实例,使用应用程序能与其中运行的环境相连接,应用程序不能创建自己的Runtime类的实例,是由系统底层自己创建的。
2、该类中并没有提供构造函数。说明不可以new对象。那么会直接想到该类中的方法都是静态的。查阅API文档发现,该类中还有非静态方法。说明该类肯定会提供了方法获取本来对象。而且该方法是静态的,并返回值类型是本来类型。
3、由以上特点可以看出该类使用了单例设计模式完成。
2.方法
1、获取本类对象
static RuntimegetRuntime();
2、在单独的进程中执行指定字符串命令
Processexec(String command);
3、在Process中有一个杀掉子进程的方法,可将exec方法开启的进程结束
void destroy();
示例:
class RuntimeDemo
{
public static void main(String[] args)throws Exception
{
Runtime r=Runtime.getRuntime();//获取本类对象
Process p=r.exec("notepad.exe");//执行记事本程序
r.exec("notepad.exe RuntimeDemo.java");//用记事本打开指定文件
Thread.sleep(3000);//让线程等待3秒
p.destroy();//杀掉指定进程
}
}
四.Math类
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。该类全为静态方法。
常用方法
1、doubleceil(double d);//返回大于指定数据的最小整数
2、doublefloor(double d);//返回小于指定数据的最大整数
3、double pow(doublea,double b);//返回a的b次方
4、long round(doubleb);//返回b四舍五入的值
5、doublerandom();//返回正号的double值,是一个大于等于0.0且小于1.0的随机数
Random类
这是java.util中的一个单独的类,该类对象用于获取随机数。与Math中的random方法是一样的,不过这个类有自身的方法,可以将相应的随机数强转为指定基本数据类型。
如:intnextInt(int n);//返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。
常用操作举例
public class MathDemo {
public static void main(String args[]){
/**
* abs求绝对值
*/
System.out.println(Math.abs(-10.4)); //10.4
System.out.println(Math.abs(10.1)); //10.1
/**
* ceil天花板的意思,就是返回大的值,注意一些特殊值
*/
System.out.println(Math.ceil(-10.1)); //-10.0
System.out.println(Math.ceil(10.7)); //11.0
System.out.println(Math.ceil(-0.7)); //-0.0
System.out.println(Math.ceil(0.0)); //0.0
System.out.println(Math.ceil(-0.0)); //-0.0
/**
* floor地板的意思,就是返回小的值
*/
System.out.println(Math.floor(-10.1)); //-11.0
System.out.println(Math.floor(10.7)); //10.0
System.out.println(Math.floor(-0.7)); //-1.0
System.out.println(Math.floor(0.0)); //0.0
System.out.println(Math.floor(-0.0)); //-0.0
/**
* max 两个中返回大的值,min和它相反,就不举例了
*/
System.out.println(Math.max(-10.1, -10)); //-10.0
System.out.println(Math.max(10.7, 10)); //10.7
System.out.println(Math.max(0.0, -0.0)); //0.0
/**
* random 取得一个大于或者等于0.0小于不等于1.0的随机数
*/
System.out.println(Math.random()); //0.08417657924317234
System.out.println(Math.random()); //0.43527904004403717
/**
* rint 四舍五入,返回double值
* 注意.5的时候会取偶数
*/
System.out.println(Math.rint(10.1)); //10.0
System.out.println(Math.rint(10.7)); //11.0
System.out.println(Math.rint(11.5)); //12.0
System.out.println(Math.rint(10.5)); //10.0
System.out.println(Math.rint(10.51)); //11.0
System.out.println(Math.rint(-10.5)); //-10.0
System.out.println(Math.rint(-11.5)); //-12.0
System.out.println(Math.rint(-10.51)); //-11.0
System.out.println(Math.rint(-10.6)); //-11.0
System.out.println(Math.rint(-10.2)); //-10.0
/**
* round 四舍五入,float时返回int值,double时返回long值
*/
System.out.println(Math.round(10.1)); //10
System.out.println(Math.round(10.7)); //11
System.out.println(Math.round(10.5)); //11
System.out.println(Math.round(10.51)); //11
System.out.println(Math.round(-10.5)); //-10
System.out.println(Math.round(-10.51)); //-11
System.out.println(Math.round(-10.6)); //-11
System.out.println(Math.round(-10.2)); //-10
}
}