- 一、Math类
Math类中包含了一组数学函数
- 截取:ceil、floor、round(四舍五入)
- 变量的:max、min、abs
- 三角函数:sin、cos、tan、asin、acos、atan、toDegrees和toRadians
- 对数指数:log和exp
- 其它:sqrt、pow、random(随机数)
- 常数:PI、E
两种方式产生随机数:Random类和random()方法
0到9的整数型随机数字::(int)(Math.random()*10)
随机的小写字符:(char)(‘a’+Math.random()*(‘z’-‘a’+1))
Math内的方法及变量都是静态的,即都用static修饰
public class TestMath{
public static void main(String[] args){
System.out.println(Math.round(-3.14));
//得到一个随机数
double d = Math.random();
System.out.println(d);
//计算半径为10的圆的周长
double p = 2*Math.PI*10;
System.out.println(p);
}
}
- 二、时间日期类
三个日期类
- java.util.Date:(保存到1970-01-01 00:00:00的毫秒数);
- java.text.DateFormat:对日期进行格式化;
- java.util.Calendar:日历;
【java.util.Date】
Date以毫秒数表示特定时间:
Date date = new Date();
System.out.println(date.getTime());
System.out.println(date);
默认构造方法:调用如下语句
System.currentTimeMillis();
java.sql.Date(只有日期部分[年月日],没有时间部分)是java.util.Date(包含有时区年月日小时分秒毫秒)的子类
只有与数据库相关才会使用java.sql.Date,否则都使用java.util.Date
public static void main(String[] args) {
Date d1 = new Date();
System.out.println(d1);
//Date类的getYear()方法被标记为过时,不建议我们使用
System.out.println(d1.getYear() + 1900);
System.out.println(d1.getTime());
System.out.println(System.currentTimeMillis());
}
【DateFormat类】
该类是一个抽象类,开发时应使用它的具体子类:SimpleDateFormat:
Date date = new Date();
SimpleDateFormat f = new SimpleDateFormat(“yyyy-MM-dd”);
System.out.println(f.format(date));
/*
* 自定义日期时间格式
* HH:表示24小时进制的时间
* hh:表示12小时进制的时间
*/
SimpleDateFormat f = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
System.out.println(f.format(date));
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");//到毫秒
public static void main(String[] args) {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d3 = null;
Date d4 = null;
try {
//将字符串格式的日期转换成Date类型
d3 = sdf1.parse("2011/11/14 08:56:22");
d4 = sdf2.parse("2011-11-14 08:56:22");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(d3);
System.out.println(d4);
}
SimpleDateFormat两个作用:1、将date对象日期格式化成字符串格式的日期 2、将字符串格式的日期转换成date对象
DateFormat 的静态方法: getDateTimeInstance(int dateStyle,int timeStyle);
【Calendar类】
Calendar代表系统的日历
//获取Calendar类的实例对象,只能调用该类的getInstance静态方法
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH,2);//0-11表示12个月
//加一个负整数,即代表减法操作
calendar.add(Calendar.DAY_OF_YEAR, -1);
calendar.get(java.util.Calendar.YEAR) ;
public static void main(String[] args) {
//获取Calendar类的对象,只能通过该类的getInstance()方法取得,该方法会根据当前的系统时间创建Calendar类型的对象,不能自己new,
Calendar c = Calendar.getInstance();
System.out.println(c);
//示例1:getTime()方法会根据当前Calenda类型的对象内部的时间,生成一个Date类型的对象,并返回生成的Date对象
System.out.println(c.getTime());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println(sdf.format(c.getTime()));
//示例2:
// int year = c.get(c.YEAR);
// //注:Calendar日历对象中表示月份是从0开始的,即0代表1月份,以此类推,11代表12月份,下面将月份加1是为了让用户看到实际显的当前月份,否则容易误解
// int month = c.get(c.MONTH) + 1;
// int day = c.get(c.DAY_OF_MONTH);
// int hour = c.get(c.HOUR_OF_DAY);
// System.out.println(year + "年" + month + "月" + day + "日" + " " + hour + "点");
//示例3:
//设置当前c对象代表的日历月份,不会影响到当前系统时间
// c.set(c.MONTH, 5);
// c.add(c.MONTH, 1);//将月份加1
// System.out.println(c.get(c.MONTH));
// System.out.println(c.get(c.DAY_OF_MONTH));
// //此时c2对象代表的日历仍然是当前系统时间,因此获取到的月份为10,即代表当前是11月份
// Calendar c2 = Calendar.getInstance();
// System.out.println("c2日历的当前月份为:" + c2.get(c2.MONTH));
//示例4:
//将天加上300天
// c.add(c.DAY_OF_MONTH, 300);
// System.out.println(c.get(c.MONTH));
// System.out.println(c.get(c.YEAR));
// System.out.println(c.get(c.DAY_OF_MONTH));
}
- 三、String类与StringBuffer类回顾
【String类】
String对象代表一组不可改变的Unicode字符序列
它的方法可用来创造新的字符串:concat、replace、substring、toLowerCase、toUpperCase和trim。
查找字符的方法:endWith、startWith、 indexOf、 lastIndexOf。
比较字符串的方法:equals、equalsIgnoreCase、compareTo。
其它:charAt、length()
String对象的创建
方法一: String s = new String("This is a string");
方法二: String s = "This is another string";
String s1 = "Test"; //line 1
String s2 = "Test"; //line 2
知识点:字符串池(共享池)
public static void main(String[] args) {
String name1 = "lucy";//去共享池中查看是否存在该内容的对象,若无则会创建并将创建的对象放入字符串共享池
String name2 = "lucy";//去共享池中查看已存在则不会再创建,指向同一对象
String name3 = new String("Lucy");//使用new关键字不会将创建的对象放入共享池
String name4 = new String("Lucy");
String name5 = "Lucy";
System.out.println("name1 == name2: " + (name1 == name2));//true
System.out.println("name3 == name4: " + (name3 == name4));//false
System.out.println("name3 == name5: " + (name3 == name5));//false
}
String只要内容发生变化就产生了新的字符串对象,原有的字符串对象内容不变
public static void main(String[] args) {
String name1 = "luuy6";
String name2 = name1.concat("-new");//把name1中的字符串与"-new"字会串合并,然后返回合并后的字符串,不会影响到原name1字符串中的内容
System.out.println("name1 = " + name1);
System.out.println("name2 = " + name2);
System.out.println("-----------------------");
String name3 = name1.replace('u', 'o');//把name1中的字符串中的u全部替换成o,并返回替换后的字符串,不会影响到原name1字符串中的内容
System.out.println("name1 = " + name1);
System.out.println("name3 = " + name3);
System.out.println("-----------------------");
//如果substring()方法只有一个参数时,表示从这个下标位置开始,一直截取到字符串的末尾,并把截取到的字符串返回,此时并不影响name1字符串
String name4 = name1.substring(1);
System.out.println("name1 = " + name1);
System.out.println("name4 = " + name4);
//从字符串的索引下标从0开始,即0代表字符串的第1个字符,下面的示例,表示从字符串下标索引1开始,截取5-1个长度的字符串,即从索引下标1开始,截取4个字符,然后形成新的字符串返回
String name5 = name1.substring(1,5);
System.out.println("name5 = " + name5);
}
【StringBuffer类】
StringBuffer对象代表一组可改变的Unicode字符序列
构造器:
- StringBuffer() 创建一个空的字符缓冲,长度为16个字符容量;
- StringBuffer(int capacity) 用指定的初始容量创建一个空的字符缓冲;
- StringBuffer(String initString) 创建包含initString的字符缓冲,并加上16个字符的备用空间。
public class StringBuffer_Demo {
public StringBuffer getStringBuffer(StringBuffer sb2){
sb2.append("11");
return sb2;
}
public static void main(String[] args) {
StringBuffer_Demo sd = new StringBuffer_Demo();
StringBuffer sbb = new StringBuffer("abc");
System.out.println(sbb.toString());//abc
sd.getStringBuffer(sbb);//虽然没有接收返回值,但改变了原有对象的内容
System.out.println(sbb.toString());//abc11
}
}
如果传递的参数是简单数据类型的,那么传的就是这个值;如果是引用类型就是地址
- 四、File类
磁盘内的文件是由操作系统管理的,程序要想操作磁盘中的文件要以对象的形式(File类)指向磁盘中的文件
File类无需释放
File只能获取文件的基本信息(文件名、大小、路径、重命名等),内容信息是获取不到的;内容信息只能通过IO流来操作
目录是一种特殊的文件,它是文件的集合(磁盘上存储的东西都被称为文件)
File对象能指向两类:1、普通文件 2、目录
【File对象常用方法】
1、和文件名相关
String getName()
String getPath()
String getAbsolutePath()
String getParent()
boolean renameTo(File newName)
2、文件检测
boolean exists()
boolean canWrite()
boolean canRead()
boolean isFile()
boolean isDirectory()
boolean isAbsolute()//基本不用
3、获取常规文件信息
long lastModified()//返回最后一次修改的时间,是一个长整型的数字
long length()//返回文件大小,单位字节B
boolean delete()//删除文件
4、目录操作
boolean mkdir()//若父目录不存在,则不会创建目录
boolean mkdirs()//若父目录不存在,会先创建父目录再创建所需目录,基本都用这个
String[] list()//列出某一个目录中文件的名字,存到一个数组中
示例一 :File对象指向目录/文件
import java.io.File;
import java.io.IOException;
public class File_Demo_1 {
public static void main(String[] args) {
//File对象既可以指向(代表)文件,也可以指向(代表)目录
//File对象指向目录示例
File dir = new File("c:/demo");
if(dir.isDirectory()){
System.out.println("dir是目录");
}
System.out.println("目录名:" + dir.getName());
System.out.println("绝对路径:" + dir.getAbsolutePath());
System.out.println("父路径:" + dir.getParent());
System.out.println("=====================");
//File对象指向文件示例
File file = new File("c:/优惠券.doc");
if(file.isFile()){
System.out.println("file是文件");
}
System.out.println("文件名:" + file.getName());
System.out.println("父路径:" + dir.getParent());
}
}
示例二:重命名
public static void main(String[] args) {
File file = new File("c:/优惠券.doc");
//文件重命名,如果重命名成功,则返回true,否则返回false
//注意:文件重命名,一定要指定路径,否则如果不指定文件路径,直接写新文件名,则原文件将会被删除,切记!!!
boolean a = file.renameTo(new File("c:/优惠券222.txt"));
System.out.println(a);
File file2 = new File("c:/demo/JAVA编码规范0.91.pdf");
System.out.println(file2.getParent());
file2.renameTo(new File(file2.getParent() + "/" + "JAVA编码规范0.91zzzzz.pdf"));
}
示例三:文件是否存在,如果不存在,则创建文件,如果指向的文件存在,则删除
public static void main(String[] args) {
//测试指向的文件是否存在,如果不存在,则创建文件,如果指向的文件存在,则删除
File file = new File("c:/abc.txt");
if(!file.exists()){
System.out.println("文件不存在,系统将创建文件。。。");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}else{
System.out.println("文件存在,系统将删除文件。。。");
file.delete();
}
}
示例四:删除指定目录中的所有文件
public static void main(String[] args) {
//删除指定目录中的所有文件
File file = new File("c:/demo");
File[] tempFile = file.listFiles();//返回指定目录中的所有文件
if(tempFile != null && tempFile.length >0){
for(int i = 0; i< tempFile.length; i++){
//判断当前的File对象指向的是否为文件,如果是则删除
if(tempFile[i].isFile()){
tempFile[i].delete();
}
}
}
//当指定目录中的文件全部删除完毕后,删除该目录,如果目录不为空,则目录删除不了
file.delete();
}
示例五:创建目录
public static void main(String[] args) {
//创建目录示例
File fd = new File("c:/a/b/c");
if(!fd.exists()){
System.out.println("make dirs...");
fd.mkdirs();//连同父目录a也一同创建,再创建目录b
//fd.mkdir();//不会创建目录b,因为父目录a不存在
}
}
示例六:采用递归(自己调用自己)方式遍历文件夹中的所有目录和文件
import java.io.File;
public class File_Demo_6 {
//采用递归方式遍历某一目录中的全部内容
public void getFileInfo(String dir){
File f = new File(dir);
File[] files = f.listFiles();
if(files != null && files.length > 0){
for(int i = 0; i < files.length; i++){
if(files[i].isDirectory()){
System.out.println("目录名:" + files[i].getName());
getFileInfo(files[i].getAbsolutePath());
}else{
System.out.println("文件名:" + files[i].getName());
}
}
}
}
public static void main(String[] args) {
String dir = "c:/demo";
File_Demo_6 fi = new File_Demo_6();
fi.getFileInfo(dir);
}
}
【文件过滤】
编写过滤器:编写一个类实现FilenameFilter接口并实现accept方法
import java.io.File;
import java.io.FilenameFilter;
public class FileFilterImpl implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
//FileFilterImpl类,还可以包括其它别的方法
public void aa(){
}
}
实际使用
public static void main(String[] args) {
File f = new File("c:/demo");
//在遍历目录中的文件时,传入了一个FilenameFilter类型的过滤器,这时如果不符合这个过滤器指定的扩展名的文件将不进行提取
//本例中我们自定义的FileFilterImpl过滤器指定返回.txt文件,如果文件的扩展名不是.txt则不进行提取
File[] files = f.listFiles(new FileFilterImpl());
if(files != null && files.length > 0){
for(int i= 0; i< files.length; i++){
System.out.println(files[i].getName());
}
}
}
- 通过在File中的list()方法中加入FileNameFilter参数,可以只将满足条件的文件列出来
- FilenameFilter是一个接口,只有一个accept()方法需要实现
- File[] files=new File("c:\\jdk14\\").listFiles(new FileFilter1());
- java.io.File类封装了文件对象
- 创建文件对象
- 在Java中,将文件路径也当作文件来处理
//创建文件对象
File myFile;
myFile = new File("myfile.txt");
myFile = new File("c:/dir", "myfile.txt");//第1个参数指明目录位置,第2个参数指明文件名称
- 五、Properties类
- Properties类实现了从名字(键)到值的映射。
- propertyNames()方法:返回一个包含所有属性名的Enumeration(迭代器)对象,Enumeration就是一个集合。
- getProperty(“propertyName”)方法:根据指定的属性名获取该属性名对应的属性值,该方法的返回值为String类型。
- 使用load()[读取]或store()[存储]方法:可以从文件读入属性集或将属性集写入文件。
- Properties类在java.util包中
注:store()方法无法直接保存中文信息,只能以unicode形式保存非ASCII字符。
系统属性示例
import java.util.Properties;
import java.util.Enumeration;
public class TestProperties {
public static void main(String[] args) {
Properties props = System.getProperties();
Enumeration prop_names = props.propertyNames();
while ( prop_names.hasMoreElements() ) {
String prop_name = (String) prop_names.nextElement();
String prop_value = props.getProperty(prop_name);
System.out.println("properties_name: " + prop_name);
System.out.println("properties_value: " + prop_value);
}
}
}
load()将读取磁盘中XX.properties文件的内容转化成键值对映射
Properties p = new Properties();
FileInputStream fis = new FileInputStream("c:/test.txt");
p.load(fis);
Enumeration prop_names = p.propertyNames();
//下面开始遍历
- 六、Deprecation(不推荐)
Deprecated关键字可用于标记类、属性和方法,表明这些类,属性或方法已过时、不再提倡使用
Deprecated标记的部分均存在相应的替代类、属性或方法,这些替代者可能采用了更标准化的命名惯例或功能更适用
如何使用 Deprecated?
public class Demo{
@Deprecated
public void sign(){ //此方法标记为过时的,不建议使用
…
}
public String getName(){
…
}
}