Java数组
数组用来存储固定大小的同类型的元素。
声明-创建-初始化:
声明
//两者均可,但是首选char[] ch;
char[] ch ;
char ch[] ;
创建数组
1、java使用new关键字创建数组。
ch = new Char[100];
上面一句包含了两步:1、new Char[100],创建了一个数组;2、ch = ,把刚刚创建的数组的引用赋值给ch。
2、
char[] ch = {"hello","TxL","!"};
访问
数组索引从0开始。
在不使用下标的情况下遍历数组(for-each循环或称加强型循环):
//接上面代码
for (char c : ch){
System.out.println(c);
}
多维数组
数组的数组,如二维数组就是要一个特殊的一位数组,每个元素为一个一维数组。
//1、
int [][] in = new int[3][4];
for (int i = 0; i < 3 ; i++){
for(int j = 0 ; j < 4 ; j++){
in[i][j] = i + j;
}
}
//2、
int[][] a = {{1,2,3},{4,5,6}};
//3、比较特别,第二维的长度可以动态申请
int[][] b = new int[3][];
for(int i = 0 ; i < b.length ; i++){
b[i] = new int[i + 1];
for(int j = 0 ; j < b[i].length ; j++){
b[i][j] = j;
}
}
Arrays 类
java.util.Arrays类可以方便的操作数组,而且提供的方法均是静态的。
常用的方法有:赋值(fill)、排序(sort)、比较(equals)、查找(binarySearch,对排序好的数组进行二分法查找)
方法 | 描述 |
---|---|
static int binarySearch(Object[] a,Object key) | 若找到则返回索引,若找不到的话,返回(-(插入点)-1) |
static boolean equals(long[] a, long[] a2) | 完全相等,返回true;元素数量相同且相应位置元素相等,则true |
static void fill(int[] a,int val) | 将val覆盖a中指定位置 |
static void sort(Object[] a) | 将a数组升序排序 |
static void copyOf(int[] a,newLength) | 扩充数组 |
日期时间
java.util包提供了Date类封装当前的日期和时间。Date类提供了2个构造函数来实例化Date对象,即无参和带参(参数为从1970年起的毫秒数)的构造函数。
方法 | 描述 |
---|---|
boolean after/before(Date date) | 指定日期之后/之前 |
Object clone() | 返回对象的副本 |
int compareTo(Date date) | 返回正、负、0 |
boolean equals(Object date) | 返回true/false |
long getTime() | 返回毫秒数 |
String toString() | Date对象转为 dow mon dd hh:mm:ss zzz yyyy(如:Mon May 04 09:09:34 CDT 2018) |
SimpleDateFormat类格式化日期
自定义日期时间格式
//1、格式类对象创建时输入格式字符串
//2、格式类对象调用format方法
public Class SdfDemo{
public static void main(String[] args){
Date d = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //HH是24小时制,hh是12小时制
System.out.println(sdf1.format(d));
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");
System.out.println(sdf2.format(d));
}
}
更为轻松的格式化方法:printf(摘自菜鸟教程)
以%t开头
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
//c的使用
System.out.printf("全部日期和时间信息:%tc%n",date);
//f的使用
System.out.printf("年-月-日格式:%tF%n",date);
//d的使用
System.out.printf("月/日/年格式:%tD%n",date);
//r的使用
System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
//t的使用
System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
//R的使用
System.out.printf("HH:MM格式(24时制):%tR",date);
}
}
输出结果
全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012
年-月-日格式:2012-09-10
月/日/年格式:09/10/12
HH:MM:SS PM格式(12时制):10:43:36 上午
HH:MM:SS格式(24时制):10:43:36
HH:MM格式(24时制):10:43
解析字符串为时间-parse-Date parse(String str),其中str为解析成的日期格式
按照给定的SimpleDateFormat对象格式化存储解析字符串。
字符串---->时间
//将日期转换为对应的格式容易,但是将字符串转换为对应格式的日期Date比之稍微麻烦
public class Test{
public static void main(String[] args){
String str1 = "20190327";
String str2 = "2019-03-27";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = sdf1.parse(str1);
Date d2 = sdf2.parse(str2);
System.out.println(d1);
System.out.println(d2);
//报错
//Date d3 = sdf1.parse(str2); //格式不匹配
}
}
sleep
使得当前线程进入停滞状态,阻塞当前线程,不让当前线程获取cpu资源。
Thread.sleep(1000*3); //休眠3秒
Calendar类-抽象类
设置、获取日期数据的特定部分。
getInstance():创建一个代表当前系统日期的对象。
//代表当前日期
Calendar cld1 = Calendar.getInstance();
//代表特定日期
cld1.set(2009,6-1,12);//年月日设为2009,6,12。Calendar的月份是从0开始的,日期和年份是从1开始
//设置某一属性的值
cld1.set(Calendar.YEAR,2008); //其余的数值会被重新计算。。。
//add
cld1.add(Calendar.Date,-10);//十天前的日期
//get
Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);