Calender
- Calender类概述
Calender为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历提供了一些方法
Calender提供了一个类方法getInstance用于获取Calender对象,其日历字段已使用当前日期和时间初始化
Calender rightNow = Calender.getInstance();
package Demo20;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import sun.util.resources.cldr.aa.CalendarData_aa_ER;
import java.util.Calendar;
public class Deno20 {
public static void main(String[] args) {
//获取对象
Calendar c =Calendar.getInstance();
// System.out.println(c);
int year =c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int data = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+data+"日");
}
}
- Calendar常用方法
方法名 | 声明 |
---|---|
public int get(in field) | 返回给定日历字段的值 |
public abstract void add(int field,int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段 |
public final void set(int year,int month,int date) | 设置当前日历的年月日 |
package Demo20;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import sun.util.resources.cldr.aa.CalendarData_aa_ER;
import java.util.Calendar;
public class Deno20 {
public static void main(String[] args) {
//获取对象
Calendar c =Calendar.getInstance();
// System.out.println(c);
/* int year =c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int data = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+data+"日");
*/
//3年前的今天
//c.add(Calendar.YEAR,-3);
//10年前后的5天前
// c.add(Calendar.YEAR,+10);
// c.add(Calendar.DATE,-5);
// 设置当前年月日,public final set(int year,int month,int date)
c.set(2021,11,25);//2021年12月25日
int year =c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int data = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+data+"日");
}
}
- 获取二月最后一天
package Demo20;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import sun.util.resources.cldr.aa.CalendarData_aa_ER;
import java.util.Calendar;
import java.util.Scanner;
public class Deno20 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入年份");
int year = sc.nextInt();
//设置日历对象的年月日
Calendar c =Calendar.getInstance();
c.set(year,2,1);
//3月往前推一天,就是二月最后一天
c.add(Calendar.DATE,-1);
//获取这一天输出即可
int date =c.get(Calendar.DATE);
System.out.println(year+"年的2月份有"+date+"天");
}
}
异常
异常处理
如果程序出现问题,我们需要直接来处理,有两种方案
- try…catch…
- throws
格式:
try{
可能出现异常的代码;
}catch{(异常类名 变量名){
异常处理代码;
}
/*
执行流程
程序从try里面的代码开始运行
出现异常,会自动生成一个异常类对象,该异常对象将会被提交给java运行时系统
当java运行时系统接收到异常对象时,回到catch中去找匹配的异常类,找到后进行异常的处理
执行完毕后,程序还可以继续往下执行
*/
package Demo20;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import sun.util.resources.cldr.aa.CalendarData_aa_ER;
import java.util.Calendar;
import java.util.Scanner;
public class Deno20 {
public static void main(String[] args) {
System.out.println("开始");
method();
System.out.println("结束");
}public static void method(){
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
}catch(ArrayIndexOutOfBoundsException e){
// System.out.println("你访问的数组不存在");
e.printStackTrace();
}
}
}
Throwable的成员方法
- Throwable是所有异常和错误的祖宗类
方法名 | 说明 |
---|---|
public String getMessage() | 返回此throwable的详细消息字符串 |
public String toString() | 返回此可能抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |
package Demo20;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import sun.util.resources.cldr.aa.CalendarData_aa_ER;
import java.util.Calendar;
import java.util.Scanner;
public class Deno20 {
public static void main(String[] args) {
System.out.println("开始");
method();
System.out.println("结束");
}public static void method(){
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
}catch(ArrayIndexOutOfBoundsException e){
// System.out.println("你访问的数组不存在");
// e.printStackTrace();
// System.out.println(e.getMessage());//3
}
}
}
- 编译时异常和运行时异常的区别
java中的异常被分为两大类,编译时异常和运行时异常,也被称为受检异常或非受检异常
所有的RuntimeException类及其子类被称为运行时异常,其他的异常都是编译时异常
- 编译时异常:必须显示处理,否则程序就会发生错误,无法通过编译
- 运行时异常,无需显示处理,也可以和编译时异常一样处理
package Demo20;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import sun.util.resources.cldr.aa.CalendarData_aa_ER;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Deno20 {
public static void main(String[] args) {
method();
method2();
//编译时异常
} public static void method2(){
try{
String s = "2021-08-07";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
}
//运行时异常
public static void method(){
int[] arr = {1,2,3};
System.out.println(arr[3]);//.ArrayIndexOutOfBoundsException
}
}
-
异常处理–throws
-
虽然我们通过try-catch可以对异常进行处理,但是并不是所有情况我们都有权限进行异常的处理
-
所以----->throws
格式
throws 异常类名;
注意:这个格式是跟在方法的括号后面的
-
编译时异常必须要进行处理:两种处理方案:try-catch或者throws,如果采用throws,将来调用时进行处理
-
运行时异常可以不处理,出现问题后,需要我们回来修改代码
import java.util.Date;
import java.util.Scanner;
public class Deno20 {
public static void main(String[] args) {
method();
System.out.println("结束");
/*
method2();
//编译时异常
} public static void method2(){
try{
String s = "2021-08-07";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
}
*/
//运行时异常
} public static void method() throws ArrayIndexOutOfBoundsException{
int[] arr = {1,2,3};
System.out.println(arr[3]);//.ArrayIndexOutOfBoundsException
}
}
自定义异常
格式
public class 异常类名 extends Expection{
无参构造
带参构造
}
范例:
public class ScoreExpection extends Expection{
public ScoreExceotion(){}
public ScoreExceotion( String Message){
super(Message);
}
}
package Demo21;
public class Exception1 extends Exception {
public Exception1(){}
public Exception1(String Message){
super(Message);
}
}
package Demo21;
public class Demo20 {
public void checkScore(int score) throws Exception1{
if(score<0||score>120){
System.out.println("输入错误");
throw new Exception1();
}else{
System.out.println("分数正常");
}
}
}
package Demo21;
import Demo9.TeachMan;
import java.util.Scanner;
public class Application {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入分数");
int score = sc.nextInt();
Demo20 t = new Demo20();
try {
t.checkScore(score);
} catch (Exception1 exception1) {
exception1.printStackTrace();
}
}
}
throws 和throw的区别
throws | throw |
---|---|
用在方法声明后,跟的是异常类名 | 用在方法体内,跟的是异常对象名 |
表示抛出异常,有该方法调用者来处理 | 表示抛出异常,有方法体内的语句处理 |
表示出现异常的一种可能性,并不一定会发生这些异常 | 执行throw一定抛出了某种异常 |
集合体系结构
- Collection
- List
- Set
- 泛型
- Map
- Collections
- Collection
- 集合的特点:提供一种储存空间可变的储存模型,储存后的数据容量可发生改变
-
Collection的集合概述和使用
-
Collection集合概述
-
是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
-
JDK不提供此接口的任何实现,它提供更具体的子接口如(如Set和List)实现
-
创建Collection集合对象
-
多态的方式
-
具体实现类ArrayList
package Demo22;
import java.util.ArrayList;
import java.util.Collection;
public class Demo22 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
//添加元素
c.add("Hello");
c.add("World");
c.add("Pofenx");
System.out.println(c);
}
}
- Collection集合中的常用方法
方法名 | 声明 |
---|---|
boolean add(E e) | 添加元素 |
boolean remove(Object o) | 从集合中移除指定的元素 |
void clear() | 清空集合中的元素 |
boolean contains(Object o) | 判断集合中是否存在指定元素 |
boolean isEmpty() | 判断集合是否为空 |
int size | 集合的长度,也就是集合元素中的个数 |
package Demo22;
import java.util.ArrayList;
import java.util.Collection;
public class Demo22 {
public static void main(String[] args) {
//创建了集合对象
Collection<String> c = new ArrayList<String>();
//添加元素 boolean add(E e)
// System.out.println(c.add("hello"));
// System.out.println(c.add("world"));
// System.out.println(c.add("world"));
c.add("hello");
c.add("help");
c.add("world");
// System.out.println(c.remove("world"));
//System.out.println(c.remove("world1"));
// c.clear();
// System.out.println(c.contains("world"));
// System.out.println(c.contains("world1"));
// System.out.println(c.contains(c.isEmpty()));
System.out.println(c.size());
System.out.println(c);
}
}
- Collection集合遍历
Iterator:迭代器,集合的专用遍历方式
- Iteratoriterotor():返回此集合中元素的迭代器,通过集合iterator()方法得到
- 迭代器是通过集合的iterator()方法得到的,所我们说他是依赖于集合而存在
iterator的中常用方法
- E next():返回迭代器中的下一个元素
- boolean hasNext():如果迭代具有更多元素,则返回true
package Demo22;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo22 {
public static void main(String[] args) {
//创建了集合对象
Collection<String> c = new ArrayList<String>();
c.add("hello");
c.add("world");
c.add("java");
c.add("pofen");
c.add("666");
Iterator<String> it= c.iterator();
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
//System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());//NoSuchElementException,表示被请求的元素不存在
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
}
Collection集合储存学生对象并遍历
需求:创建一个储存学生对象的集合,储存3个对象,使用程序实现控制台遍历该集合
package Demo23;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Application {
public static void main(String[] args) {
//创建集合对象
Collection<Student> c = new ArrayList<Student>();
Student s1 = new Student("pofenx", 18);
Student s2 = new Student("pofenx1", 19);
Student s3 = new Student("pofenx2", 20);
//把学生添加到集合
c.add(s1);
c.add(s2);
c.add(s3);
//遍历集合(迭代器方式)
Iterator<Student> it = c.iterator();
while(it.hasNext()){
Student s = it.next();
System.out.println(s.getName()+","+s.getAge());
}
}
}