JAVA小记4(第四周)

这一周因为要准备期末考试,时间不是特别充裕,所以Java学习的进度也不是很快,但也有一些收获。

目录

一、包装类

二、日期类和日历类

三、异常类


 

一、包装类

Java中,基本数据类型不能创建对象,所以和其他对象使用时不是特别方便,所以Java为了优化对基本数据的处理,提供了特殊类与之对应,我们把这些和基本数据类型的对应类称之为包装类。

Byte、Short、Integer、Long、Float、Double、Character、Boolean,这8个类分别对应8个基本数据类型byte、short、int、long、float、double、char、boolean。下面是我创建的一个Integer的对象:

int i=10;

Integer a=Integer.valueOf(i);

 这相当于用箱子把我们的基本数据类型用箱子包装成一个对象,由于这种方式用得比较多,所以Java虚拟机可以自动帮我们调用,因此代码可以写成以下形式:

int i=10

Integer a=i;

 这个过程(将基本数据类型转化成包装类)称为自动装箱,如果要将我们的包装类转化为基本数据类型,也可以进行以下操作:

int i=10;

Integer i1=i;

int i2=i1.intvalue();

 同样的,因为这个方式用得比较多,所以Java虚拟机也可以帮我们完成,我们可以写成以下形式:

int i=10;

Integer i1=i;

int i2=i1;

这个过程(将包装类转化成基本数据类型)成为自动拆箱。

二、日期类和日历类

在Java中,如果要获取当前系统时间,可以使用下面的语句:

System.out.println(System.currentTimeMillis());

这个代码的运行结果的是一段long型的整数,表示从1970年1月1日0时开始经历的毫秒数,我们称之为时间戳。这个结果很难看懂,所以Java中提供了操作时间的基本功能,在这里主要介绍操作时间的两个功能,即日期类和日期类。

(一)日期类

import java.util.Date;
public class DateClass {
    public static void main(String[] args){
        Date d=new Date();
        System.out.println(d);
    }
} 

这段代码的结果为:

Sat Jun 03 22:24:20 CST 2023

 以上结果还是不够直观,因此Java提供了一种特殊类,可以对时间进行格式化操作,SimpleDateFormat类

import java.text.SimpleDateFormat;
import java.util.Date;
public class DateClass {
    public static void main(String[] args){
        Date d=new Date();
        System.out.println(d);
        //Java格式化日期格式:
        //y(Y)->y:正常年份->Y:一年有52周,如果大于52周算下一年
        //m(M)->m:分钟->M:月份
        //d(D)->d:一个月中的日期->D:一年中的日期
        //h(H)->h:12进制->H:24进制
        //s(S)->s:秒->S:毫秒
        //yyyy-MM-dd HH:mm:ss:SSS
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
        String dateFormatString=sdf.format(d);
        System.out.println(dateFormatString);
        //运行结果为:2023-06-03 22:41:48:295
    }

以上是将日期对象转化为String类型,下面是将String类型转化为日期对象,前提:String的格式要符合日期转化格式

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateClass {
    public static void main(String[] args){
        Date d=new Date();
        System.out.println(d);
        //Java格式化日期格式:
        //y(Y)->y:正常年份->Y:一年有52周,如果大于52周算下一年
        //m(M)->m:分钟->M:月份
        //d(D)->d:一个月中的日期->D:一年中的日期
        //h(H)->h:12进制->H:24进制
        //s(S)->s:秒->S:毫秒
        //yyyy-MM-dd HH:mm:ss:SSS
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String dateString="2022-06-01";
        try{
            Date parseDate=sdf.parse(dateString);
            System.out.println("转化的格式为:"+parseDate);
        }catch(ParseException e){
            e.printStackTrace();
        }
        //运行结果:转化的格式为:Wed Jun 01 00:00:00 CST 2022

    }
}

(二)日历类

日历类(Calendar)用于日历上的日期操作,因为日历类是抽象的,所以不能构建对象,要用静态方法获取。

import java.util.Calendar;
public class CalendarClass {
    public static void main(String[] args){
        Calendar calendar=Calendar.getInstance();
        System.out.println(calendar);
    }
}

下面是日历类常用的一些方法:

import java.util.Date;
import java.util.Calendar;
public class CalendarClass {
    public static void main(String[] args){
        Calendar calendar=Calendar.getInstance();
        System.out.println(calendar);

        System.out.println(calendar.get(Calendar.YEAR));//获取年份
        System.out.println(calendar.get(Calendar.MONTH));//获取月份,月份从0开始,0就是一月
        System.out.println(calendar.get(Calendar.DATE));//获取日期
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//一个月中的第几天
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//一周的第几天,周日为一周的第一天
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//一年的第几天
        calendar.set(Calendar.YEAR,1);//将年份设置为指定的那一年,月份,日期同理
        calendar.setTime(new Date());//将日期应用到日历中,可将日历指向那一天
        calendar.add(Calendar.YEAR,1);//MONTH、DATE也如此
        calendar.getMaximum(Calendar.DAY_OF_MONTH);//一个月最多可以有多少天,即31天
        calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//当前月份有多少天
    }
}

下面是一个打印日期的代码:

import java.util.Calendar;
//打印当前月份的日历
//getActualMaximum(Calendar.DAY_OF_MONTH)获取当前月份的最大天数
//getMaximum(Calendar.DAY_OF_MONTH)一个月最多能有多少天,不管设置几月,都是31
public class JavaPrintCalendar {
    public static void main(String[] args){
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        Calendar firstdate=Calendar.getInstance();
        int maxDay=firstdate.getActualMaximum(Calendar.DAY_OF_MONTH);
        firstdate.set(Calendar.DAY_OF_MONTH,1);
        for(int i=0;i<maxDay;i++){
            int weekx=firstdate.get(Calendar.DAY_OF_WEEK);
            int monthY=firstdate.get(Calendar.DAY_OF_MONTH);
            if(i==0){
                if(weekx==Calendar.SUNDAY){
                    for(int j=0;j<6;j++){
                        System.out.print(" \t");
                    }
                    System.out.println(monthY);
                }
                else{
                    for(int k=0;k<weekx-2;k++){
                        System.out.print(" \t");
                    }
                    System.out.print(monthY+"\t");
                }
            }
            else{
                if(weekx==Calendar.SUNDAY){
                    System.out.println(monthY);
                }
                else{
                    System.out.print(monthY+"\t");
                }
            }
            firstdate.add(Calendar.DATE,1);
        }
    }
}
    /*
    运行结果:
    一	二	三	四	五	六	日
     	 	 	1	2	3	4
    5	6	7	8	9	10	11
    12	13	14	15	16	17	18
    19	20	21	22	23	24	25
    26	27	28	29	30	
    */

三、异常类

异常是指在程序运行过程中发生的异常事件,例如,除0溢出、数组越界、找不到文件等,这些事件的发生将阻止程序的正常运行。为了加强程序的鲁棒性(即健壮性),设计程序时,必须考虑可能发生的异常事件并作出相应的处理。

语法:

try{

        可能抛出异常的代码

}catch(异常类1 异常类1对象){

        捕获异常类1有关的处理程序段;

}

catch(异常类2 异常类2对象){

        捕获异常类2有关的处理程序段;

}

...

finally{

        //最后必须执行的代码,无论是否捕获到异常

}

Java中异常分为两大类:

1、可以通过代码恢复正常逻辑执行的异常,称之为运行期异常:RuntimeException

2、不可以通过代码恢复正常逻辑执行的异常,称之为编译期异常:Exception

RuntimeException是Exception的子类

运行期异常在编译时不需要做处理,在运行时发生异常,根据异常提示进行处理即可。

编译器异常在编译时编译器会提示,需要进行处理,否则程序无法运行。

转换异常:

在方法调用时,要想事先告诉别人你调用的方法可能会出现异常,并在编译的时候提示你,就得将异常转换为编译期异常。

a5dea03a6f314e1f9443984ded768f42.png

 如上图,原来的除0异常只是算数异常,编译时不会提示,但将算数异常转换为编译期异常Exception后,在编译时就会得到提示,说明调用该方法可能会出现异常,提前做出处理。

自定义异常:

Java中定义的异常主要用来处理系统可以预见的、比较常见的运行错误。如果某个应用
程序有特殊的要求,则可能出现系统不能识别的运行错误,这时,用户就需要自己创建异常和异常类,使系统能够识别这种错误并进行处理。

例如:登录时,账号或密码不正确,就是我们可能会出现的异常,这时候系统不能识别出来,就需要我们自己去定义。

下面是一个自定义异常的程序:

//自定义异常
public class JavaCustomException {
    public static void main(String[] args){
        try{
            login("admin","admin");
        }catch(AccountException accountException){
            System.out.println("账号错误,请重新输入");
        }catch(PasswordException passwordException){
            System.out.println("密码错误,请重新输入");
        }catch(LoginException loginException){
            System.out.println("其他登录的相关错误,需要重新确认");
        }
    }
    public static void login(String account,String password) throws LoginException{
        if(!"admin".equals(account)){
            throw new AccountException("账号不正确");
        }
        if(!"admin".equals(password)){
            throw new PasswordException("密码不正确");
        }
        System.out.println("登录成功");
    }
}
class AccountException extends LoginException{
    public AccountException(String message){
        super(message);
    }
}
class PasswordException extends LoginException{
    public PasswordException(String message){
        super(message);
    }
}
class LoginException extends Exception{
    public LoginException(String message){
        super(message);
    }
}

在上面代码中,如果账号或密码不正确,会给出相应的提示,让使用者发现问题所在。

本周学习到此结束。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁢挽歌º

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值