Calendar类
Calendar是抽象类,由于语言的敏感性,Calendar类在创建时并非直接创建类,而是通过静态方法创建返回子类对象
使用默认时区和语言环境获得一个日历
Calendar calendar = Calendar.getInstance();
常用方法
- public int get(int field),返回给定日历字段的值
public class TestCalendar {
public static void main(String[] args) {
//创建calendar对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
//设置年
int year = calendar.get(Calendar.YEAR);
//设置月
int month = calendar.get(Calendar.MONTH)+1;
//设置日
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"年"+month+"月"+dayOfMonth+"日");
//2020年7月28日
}
}
- public void set(int field,int value)将给定的日历字段设定成给定的值
public class TestCalendar2 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH) ;
System.out.println(year+"年"+month+"月"+dayOfMonth+"日"); // 2020年7月28日
calendar.set(Calendar.YEAR, 2021);
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH) + 1;
dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH) ;
System.out.println("set之后");
System.out.println(year+"年"+month+"月"+dayOfMonth+"日"); // 2020年7月28日
}
}
- public abstract void add(int field,int amount)根据日历的规则为给定的日历字段添加或者减去指定的时间量
public class TestCalendar3 {
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"年"+month+"月"+dayOfMonth+"日");//2020年7月28日
calendar.add(Calendar.DAY_OF_MONTH,2);
calendar.add(Calendar.YEAR,-3);
year = calendar.get(Calendar.YEAR);
month= calendar.get(Calendar.MONTH)+1;
dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("add之后");
System.out.println(year+"年"+month+"月"+dayOfMonth+"日");
}
}
- public Date getTime()返回一个表示此Calendar时间值(从历元到现在的毫秒值偏移量)的Date对象
public class TestCalendar4 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(date); // Tue Jul 28 09:13:15 CST 2020
Date date1 = new Date();
System.out.println(date1); // Tue Jul 28 09:13:15 CST 2020
}
}
案例:获取当月最后一天
public class TestCalendar5 {
public static void main(String[] args) throws Exception {
// 编写一个方法, 根据给定字符串yyyy-MM获取当月的最后一天
// calendar.getActualMaximum();// 获取给定日历的最大可能值
String lastDayOfMonth = getLastDayOfMonth("2020-06");
System.out.println(lastDayOfMonth);
int lastDay = lastDay(2020, 07);
System.out.println(lastDay);
}
public static String getLastDayOfMonth(String yearmonth) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Date date = sdf.parse(yearmonth);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
return "" + lastDay;
}
public static int lastDay(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.clear(); // 清除所有日期数据
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
return lastDay;
}
}
System类
是java.lang包下的类,提供大量静态方法,可以获取与系统相关信息或者系统级操作,常用方法有,
- System.currentTimeMillis()获取当前系统时间与1970年1月1日00点00分00秒之间的毫秒值
public class TestSystem {
public static void main(String[] args) {
System.out.println(System.currentTimeMillis());
}
}
练习:打印1~9999所需时间
public class TestSystem1 {
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < 9999 ; i++) {
System.out.print(i);
}
System.out.println();
long end = System.currentTimeMillis();
System.out.println("耗时" + (end -start));
}
}
- ArrayCopy 将数组中指定的数据复制
public class TestSystem2 {
public static void main(String[] args) {
//将src中前三个元素复制到dest数组的前三个
int [] src=new int []{1,2,3,4,5};
int [] dest=new int []{6,7,8,9,10};
System.arraycopy(src,0,dest,0,3);
System.out.println(Arrays.toString(dest));
}
}
StringBuelder
由于String对象的不可变,字符串在拼接时,总会创建新的对象,字符串是常量,他的值在创建之后不可以修改,如果对字符串进行频繁的操作,每次都会创建新的String对象,既耗时又浪费空间,为了解决此问题可以使用StringBuelder
StringBuilder又称为可变字符序列,通过某些方法调用可以改变该序列的长度和内容。
构造方法:
- public StringBuilder()
- public StringBuilder(String str)
append方法
public class TestStringBuilder {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
StringBuilder builder1=builder.append("hello");
System.out.println(builder);
System.out.println(builder1);
System.out.println(builder==builder1);
//可以添加任何类型
builder.append("啥呀");
builder.append("world");
builder.append(true);
builder.append(1000);
//在我们开发中,会遇到调用一个方法后,返回一个对象的情况,然后使用返回的对象继续调用方法
//这种我们可以使用链式编程的方式
builder.append("haha").append("hahha").append(true).append(1000000);
System.out.println(builder);
}
}
toString方法
通过 toString方法,StringBuilder对象将会转换位不可变的String对象
三者区别
包装类
Java提供两种类型系统,基本类型和引用类型。使用基本类型在于效率,然而很多情况会创建对象使用,因为对象可以做更多的事,也就有了对应的包装类。
- 装箱和拆箱
基本类型和对应包装类来回转换的过程
装箱:基本到包装
拆箱:包装到基本
public class BaoZhuangDemo {
public static void main(String[] args) {
Integer i = new Integer(1);//基本==>包装
int i1=i.intValue();//包装变基本
}
}
- 自动装箱和自动拆箱
基本类型和包装类的装箱和拆箱可以自动完成
public class BaoZhuangDemo {
public static void main(String[] args) {
// Integer i = new Integer(1);//基本==>包装
// int i1=i.intValue();//包装变基本
Integer i=5;//自动装箱
i=i+5;//自动拆箱
}
}
基本类型与字符串之间的转换
public class Demo {
public static void main(String[] args) {
//"123" 123
//基本类型转换位String类型
int a=100;
String b=""+a;
System.out.println(b);
//String类转换为基本类型
//包装类都有parseXxx静态方法,可议将字符串参数转化为对应基本数据类型
int i=Integer.parseInt("120");
Integer integer=Integer.valueOf("120");
System.out.println(i);
System.out.println(integer);
}
}
collection集合
- 集合:集合是java中提供的一种容器,可以用来存储多个数据
与数组的区别: - 数组的长度是固定的,集合的长度是可变的
- 数组中存储的是同一类型的元素,集合存储的都是对象,而且对象的类型可以不一致,在开发中当对象多的时候,都使用集合进行存储。
集合分类
按照存储结构分为两大类
- 单列集合java.long.Collection
- 双列集合java.long.Map
Collection 单列集合的根接口,他有两重要的子接口
- java.long.List 特点:元素有序,元素可重复,
主要实现类:ArrayList,LinkedList -
java.util.Set 特点:无序,不重复,
HashSet,TreeSet
Collection常用功能
主要方法:
- public boolean add(E e) 把给定的元素e添加达到当前集合中
- public void clear(),清空集合中所有的元素
- public boolean Remove(E e),把给定的对象元素e从集合中删除
- public boolean contains(E e),判断集合中是否包含给定的元素
- public boolean isEmpty(E e),判断当前集合是否为空
- public int size(),返回集合中元素的个数
- public Object[] toArray();把集合重元素返回为Object类型数组
public class TestCollection {
public static void main(String[] args) {
//使用多态创建集合对象
Collection coll = new ArrayList<>();
coll.add("孙悟空");
coll.add("猪八戒");
coll.add("沙和尚");
// contains(E e),判断集合中是否包含给定的元素sout
System.out.println(coll.contains("孙悟空"));
System.out.println(coll.contains("唐僧"));
// Remove(E e),把给定的对象元素e从集合中删除
System.out.println(coll.remove("猪八戒"));
System.out.println("删除之后"+coll);
// isEmpty(E e),判断当前集合是否为空
System.out.println(coll.isEmpty());
//size(),返回集合中元素的个数
System.out.println(coll.size());
Object[] objects=coll.toArray();
for (int i = 0; i < objects.length; i++) {
System.out.println(objects[i]);
}
//clear(),清空集合中所有的元素
coll.clear();
System.out.println(coll);
}
}
Iterator接口
在程序开发中我们经常要遍历集合中所有元素,针对这种需求JDK提供java.util.Iterator接口,Iterator也是java集合的一员,它与Collection和Map不同,Collection和Map是存储元素的,Iterator是用于迭代访问Collection中的元素,又称之为迭代器。
案例:
public class TestIterator {
public static void main(String[] args) {
//使用多态创建集合对象
Collection coll = new ArrayList<>();
coll.add("孙悟空");
coll.add("猪八戒");
coll.add("沙和尚");
//遍历
Iteratoriterator=coll.iterator();
//iterator.hasNext()判断是否有迭代元素
while (iterator.hasNext()){
//获取迭代的元素
String s=iterator.next();
System.out.println(s);
}
}
}
Collection中:
Iterator常用方法:
- hashNext(),如果仍然有元素可以迭代,返回true
-
E next()返回下一个元素
增强for循环(forEach循环)
是JDK1.5以后出现的高级for循环,专门用来遍历数组和集合的,内部原理实际上是一个迭代器,不能对集合中的元素进行增删操作
格式:
for(元素的数据类型 变量:集合或数组){
//操作代码
}
举例
public class TestForEach {
public static void main(String[] args) {
int [] arr={1,2,3,4,5};
for (int a:arr) {
System.out.println(a);
}
Collection coll = new ArrayList<>();
coll.add("孙悟空");
coll.add("猪八戒");
coll.add("沙和尚");
for (String hero:coll){
System.out.println("当前英雄是"+hero);
}
}
}