文章目录
常用类
包装类
基本介绍
包装类位于java.lang
包,用法类似;
基本数据类型与包装类的对应关系:
基本数据类型 | 包装类 |
---|---|
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
由于包装类的常用方法类似,此处拿Integer举例;
数字相关的包装类都继承了Number类;Byte,Short,Integer,Long,Float,Double等。
常用方法示例:
public class TestInteger {
public static void main(String[] args) {
//1.基本数据类型转成包装类对象
Integer a = new Integer(1);
Integer b = Integer.valueOf(2);
//2.包装类对象转成基本数据类型
int c = b.intValue();
double d = b.doubleValue();
//3.字符串转成包装类对象
Integer e = new Integer("8888");
//4.包装类对象转成字符串
String f = e.toString();
//5.包装类中的常量
System.out.println("Integer中最大值:"+Integer.MAX_VALUE);
System.out.println("Size:"+Integer.SIZE);
}
}
自动装箱和拆箱
// 自动装箱
Integer a = 2;//相当于 Integer a = Integer.valueOf(2);
// 自动拆箱
int b = a; //编译器自动转为:int b = a.intValue();
- 缓存问题:缓存[-128,127]之间的数字,系统初始化时创建的一个缓存数组;
Integer a = 124;
Integer b = 124;
System.out.println(a==b); //true
System.out.println(a.equals(b)); //true
Integer c = 128;
Integer d = 128;
System.out.println(c==d); //false
System.out.println(c.equals(d)); //true
String
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}
- String类是不可变字符序列;
- 判断String对象值是否相等使用equals()方法
常用方法
方法 | 解释说明 |
---|---|
char charAt(int index) | 返回字符串中索引为index的字符,索引范围(0,lenth()-1); |
boolean equals(Object anObject) | 如果字符串与anObject相等,返回true;否则返回false; |
boolean equalsIgnoreCase(String other) | 判断字符串是否相等(忽略大小写); |
int indexOf(String str) | 返回从头开始查找的第一个子字符串str在字符串中的索引位置。如果未找到子字符串str,则返回-1; |
int lastIndexOf() | 返回从末尾开始查找的第一个子字符串str在字符串中的索引位置。如果未找到子字符串str,则返回-1; |
int length() | 返回字符串的长度; |
String replace(char oldChar,char new Char) | 返回一个新串,它是通过用newChar替换此字符串中出现的所有oldChar而生成的; |
boolean startsWith(String prefix) | 如果字符串以prefix开始,则返回true; |
boolean endsWith(String prefix) | 如果字符串以prefix结尾,则返回true; |
String substring(int beginIndex) | 返回一个新字符串,该串包含从原始字符串beginIndex到串尾; |
String substring(int beginIndex, int endIndex) | 返回一个新字符串,该串包含从原始字符串beginIndex到串尾或endIndex-1的所有字符; |
String toLowerCase() | 返回一个新字符串,该串将原始字符串中的所有大写字母改成小写字母; |
String toUpperCase() | 返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母; |
String trim() | 返回一个新字符串,该串删除了原始字符串头部和尾部的空格 |
StringBuilder和StringBuffer
StringBuilder和StringBuffer共同的父类AbstractStringBuilder
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/**
* The value is used for character storage.
*/
char[] value;
}
- StringBuilder和StringBuffer是可变字符序列;
- StringBuffer JDK1.0版本提供的类,线程安全,做线程同步检查,效率较低;
- StringBuilder JDK1.5版本提供的类,线程不安全,不做线程同步检查,因此效率较高,常用;
常用方法
方法 | 解释说明 |
---|---|
public StringBuilder append(…) | 重载的方法,可以为StringBuilder对象添加字符序列,仍然返回自身对象; |
public StringBuilder delete(int start,int end) | 可以删除从start到end-1为止的一段字符串序列,仍然返回自身对象; |
public StringBuilder deleteCharAt(int index) | 移除此序列索引为index的字符,仍然返回自身对象; |
public StringBuilder insert(…) | 重载的方法,可以为StringBuilder对象在指定位置插入字符序列,仍然返回自身对象; |
public StringBuilder reverse() | 将字符串序列逆序,仍然返回自身对象; |
public String toString() | 返回此序列中数据的字符串表示形式; |
public void setCharAt(int index,char c) | 将c替换到原字符序列索引为index的位置; |
indexOf(),substring(),length(),charAt() | 类似String类中的方法; |
时间处理相关类
-
以1970年1月1日 00:00:00定为基准时间,度量单位为毫秒(千分之一秒)
-
用long类型的变量保存时间;
-
获得现在时刻的“时刻数值”,
long now = System.currentTimeMillis();
Date
public class Date
implements java.io.Serializable, Cloneable, Comparable<Date>
{
public Date() {
this(System.currentTimeMillis());
}
}
- Date的构造方法返回了当前时间的毫秒值,说明新创建的Date对象的时间为当前时间;
- Date带参构造,参数是一个毫秒数,表示从基准时间过了参数毫秒值的时间;
- boolean after(Date when) 判断此时间是否在指定时间之后;
- boolean before(Date when) 判断此时间是否在指定时间之前;
- boolean equals(Date when)判断两个日期的相等性;
- long getTime() 返回自基准时间到该Date对象时间所经过的毫秒数;
- String toString() 把Date对象转换成java源码中设定格式的字符串输出;
DateFormat
- 把时间对象转化成指定格式的字符串,反之,把指定格式的字符串转化成时间对象;
- DateFormat是一个抽象类,一般使用它的子类SimpleDateFormat类来实现
方法:
方法 | 解释说明 |
---|---|
public String format(Date date) | 返回将date转化为指定格式的字符串; |
public Date parse(String str) | 将指定格式的字符串转化为Date对象并返回; |
//把时间对象转成字符串
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
String str = df.format(date);
//把字符串装成时间对象
Date date = df.parse("2019-9-9 11:11:11"); //需要捕获异常
其他格式化字符:SimpleDateFormat
比如 D 表示当前时间是当前年份的第多少天
Calendar
- Calendar类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年月日时分秒的展示和计算;
- GregorianCalendar是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统;
- 注意:0-11表示对应的月份,0是1月,11代表12月;
- 1-7表示星期,1是星期日,7代表星期六
方法:
- get(param):根据传的参数,获得对应的日期属性;
- set(params):根据参数,给日期对象设置日期属性;
- add(params):根据参数,进行日期的计算;
- Date getTime():转化成一个时间类对象;
- Calender setTime(Date date):将时间类对象转化为日期类;
可视化日历程序
String str = "2020-2-29"; //平年天数超出不做判断
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str); // 有异常
Calendar c = new GregorianCalendar();
c.setTime(date);
int today = c.get(Calendar.DAY_OF_MONTH);// 保存当前日期为哪一天
System.out.println(" 日\t一\t二\t三\t四\t五\t六");
c.set(Calendar.DAY_OF_MONTH, 1); // 从当前月的第一天开始
// 计算出当前月的第一天是周几
for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) {
System.out.print("\t");
}
int days = c.getActualMaximum(Calendar.DATE); // 当前月一共有多少天
for (int i = 1; i <= days; i++) {
if (i == today) // 如果是今天,则在日期后面加上*
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "*\t");
else
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "\t");
// 周六换行
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println();
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
Math
- abs :绝对值
- sqrt :平方根
- pow(double a, double b) :a的b次幂
- max,min :最大最小值
- ceil(double a) :大于a的最小整数
- floor(double a) :小于a的最大整数
- random() :返回0.0到1.0的随机数
- long round(double a) :double类型的数据a转成long型(四舍五入)
Random
专门用于生成随机数的类;
Random rand = new Random();
// 随机生成[0,1)之间的double类型的数据
System.out.println(rand.nextDouble());
// 随机生成int类型允许范围之内的整型数据
System.out.println(rand.nextInt());
// 随机生成[0,1)之间的float类型的数据
System.out.println(rand.nextFloat());
// 随机生成false或者true
System.out.println(rand.nextBoolean());
// 随机生成[0,10)之间的int类型的数据
System.out.println(rand.nextInt(10));
// 随机生成[20,30)之间的int类型的数据
System.out.println(20 + rand.nextInt(10));
// 随机生成[20,30)之间的int类型的数据(此种方法计算较为复杂)
System.out.print(20 + (int) (rand.nextDouble() * 10));
File
- java.io.File类:代表文件和目录;
- 构造方法:传入一个目录地址;
File f = new File("d:\\a.txt");
//File f = new File("d:/a.txt");
常用方法:
方法 | 说明 |
---|---|
public boolean exists() | 判断File是否存在 |
public boolean isDirectory() | 判断File是否为目录 |
public boolean isFile() | 判断File是否为文件 |
public long lastMidified() | 返回File最后修改时间 |
public long length() | 返回File大小 |
public String getName() | 返回文件名 |
public String getPath() | 返回文件的目录路径 |
创建新目录:
File f = new File("d:/电影/华语/大陆");
boolean flag = f.mkdir(); // false 目录结构中有一个不存在,则不会创建整个目录树
boolean flag = f.mkdirs(); //创建整个目录树
递归遍历目录树结构:
public static void main(String[] args) {
File f = new File("D:\\2345\\Downloads");
printFile(f,0);
}
static void printFile(File file, int level){
//输出层数
for(int i=0;i<level;i++){
System.out.print("-");
}
System.out.println(file.getName());
if(file.isDirectory()){
File[] files = file.listFiles();
for(File temp: files){
printFile(temp,level+1);
}
}
}
枚举
-
JDK1.5引入了枚举类型,枚举类型的定义包括枚举声明和枚举体。
enum 枚举名{ 枚举体(常量列表) }
-
枚举体就是放置一些常量;
-
枚举类型隐性地继承自java.lang.Enum。
-
枚举实质上还是类,而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的,提议直接通过枚举类型名使用它们;
enum Season {
SPRING, SUMMER, AUTUMN, WINTER
}
public class TestEnum {
public static void main(String[] args) {
Season a = Season.AUTUMN;
switch(a){
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
}
}