笔记(课8+课9)

一阶段:第8天:常用类和异常(8.2+8.3)

一.常用类

1.1 Date类

Date表示特定的瞬间,精确到毫秒。
Date类中的大部分方法都已经被Calendar类中的方法所取代。
成员方法:

  1. 判断两个日期对象的前后
        Date date1 = new Date();//获取当前系统时间
		Date date2 = new Date(10000);//获取从标准基准时间起10000毫秒的时间点
		boolean boo1 = date1.after(date2);//若date1在date2之后,则返回true,否则返回false
		boolean boo2 = date1.before(date2);//若date1在date2之前,则返回true,否则返回false
  1. 获取和修改时间
		Date date = new Date();
		long l = date.getTime();//获取时间
		Date date = new Date();
		date.setTime(1000);//修改时间

1.2 Calendar类

瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
Calendar类时抽象类不能创建对象,可以通过Calendar类中的静态getInstance方法获取对象(一个费非抽象子类对象)。
成员方法:

  1. 获取一个Calendar对象:
Calendar c = Calendar.getInstance();//getInstance方法是一个静态的方法,直接通过类名调用
  1. 获取某个日历对象的指定属性的值:
//get(int field)	参数就是指定的属性,可以使用静态常量属性名代替int值
System.out.println(c.get(Calendar.DATE));//获取c对象所表示日历的日期属性值
  1. 修改某个日历对象的指定属性值:
    set(int field, int value) 第一个参数表示属性,第二个参数表示修改的值
		c.set(Calendar.YEAR, 2017);
  1. 获取某个属性所表示的最大、最小值:
    getMaximum(int field) 获取属性的最大值
    getMinimum(int field) 获取属性的最小值
        int max = c.getMaximum(Calendar.DATE);//获取日期的最大值,无论c表示几月份,max的值都是31
		int min = c.getMinimum(Calendar.DATE);//获取日期的最小值,无论c表示几月份,min的值都是1
  1. 获取指定Calendar对象的指定属性的最大、最小值:
    getActualMaximum(int field) 获取指定日历的指定属性的最大值
    getActualMinimum(int field) 获取指定日历的指定属性的最小值
		int max = c.getActualMaximum(Calendar.DATE);//若c表示的1月,则max值为31;若c表示的4月,则max值为30;
		int min = c.getActualMimimum(Calendar.DATE);//无论c表示几月份,min值都是1

1.3 SimpleDateFormat类

SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。

它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
通过SimpleDateFormat类将字符串和日期相互转换时,需要使用一些时间模式字母,常用的时间模式字母:在这里插入图片描述

将date对象格式化成指定格式的日期字符串:format(Date date)

		String format = "yyyy-MM-dd a hh:mm:ss";
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Date date = new Date();
		String dateStr = sdf.format(date);

解析日期:parse(String str) 将str对象解析成一个日期对象

        String dateStr = "2017-12-01 上午 10:10:10";
		String format = "yyyy-MM-dd a hh:mm:ss";
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Date date = sdf.parse(dateStr);

1.4 Math类

Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
Math类中常用的成员方法:

  1. 绝对值
		int a = -5;
		System.out.println(Math.abs(a));//输出的结果是5
  1. 最大、最小值
		int a = 5;
		int b = 10;
		System.out.println(Math.max(a,b));//输出结果为10
		System.out.println(Math.min(a,b));//输出结果为5
  1. 幂运算
		int a = 3;
		int b = 4;
		System.out.println(Math.pow(a,b));//结果为3*3*3*3的结果
  1. 平方根、立方根
		int a = 8;
		System.out.println(Math.sqrt(a));//结果为8的正平方跟
		System.out.println(Math.cbrt(a));//结果为8的立方根
  1. 四舍五入
		double a = 3.6;
		System.out.println(Math.round(a));//结果为4
  1. 随机数
		//产生一个3~9之间的随机数
		int a = (int)(Math.random()*(9-3+1)+3);
  1. ceil(向上取整) floor(向下取整)
		System.out.println(Math.ceil(3.2)); //大于或等于这个数字的最小正数
		System.out.println(Math.floor(2.5));//小于或等于这个数字的最大正数

1.5 Random类

此类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式 (linear congruential form) 对其进行了修改所得。
如果用相同的种子创建两个Random实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列
若long种子确定,则在不同程序中,相同次数产生的随机数是相同的。

  1. 产生随机数
		Random random = new Random(10);//以10为种子,使用线性同余公式产生伪随机数
		int i1 = random.nextInt();//产生一个随机整数
		int i2 = random.nextInt(10);//产生一个10以内的随机整数,包含0不包含10
		double d = random.nextDouble();//产生一个随机double值
		boolean b = random.nextBoolean();//产生一个随机boolean值
  1. 修改种子
		Random random = new Random(10);
		random.setSeed(20);//将随机数种子设置为20

1.6 System类

  1. 获取系统时间
		long time1 = System.currentTimeMillis();//获取当前时间,毫秒数
		long time2 = System.nanoTime();//获取当前时间,毫微秒
  1. 强制退出虚拟机
		System.exit();//强制退出当前正在执行的虚拟机0---正常退出  非0---非正常退出
  1. 垃圾回收处理机制:

​ gc(): 运行垃圾回收器。

1.7 Runtime类

每个 Java 应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过
getRuntime方法获取当前运行时。

1 exec(command) 在单独的进程中执行指定的字符串命令。

	//1创建Runtime对象
		Runtime runtime=Runtime.getRuntime();
		//2exec 启动一个进程 
		Process process=runtime.exec("notepad");
		//3关闭进程
		//程序休眠
		Thread.sleep(5000);
		process.destroy();

2 exit(int status) 退出jvm System.exit(); 内部调用runtime.exit();

Runtime runtime=Runtime.getRuntime();
runtime.exit(0);

3获取jvm的内存

返回类型方法名
longtotalMemory() 返回 Java 虚拟机中的内存总量。
longfreeMemory() 返回 Java 虚拟机中的空闲内存量
longmaxMemory() 返回 Java 虚拟机试图使用的最大内存量。
public static void runtime2() {
		Runtime runtime=Runtime.getRuntime();
		long totalMemory=runtime.totalMemory();
		long freememory=runtime.freeMemory();
		long maxmemory=runtime.maxMemory();
		System.out.println("totalMemory:"+(totalMemory/1024/1024));
		System.out.println("freememory:"+(freememory/1024/1024));
		System.out.println("maxmemory:"+(maxmemory/1024/1024));
}
修改jvm内存 
1 修改堆初始内存大小
	-Xms300m
2 修改堆最大内存大小
	-Xmx4000m
3 修改栈空间大小	
	-Xss2m   jdk1.5之前256k  jdk1.5之后1m  

Elipse修改 右击java程序 "Demo8.java" --->Run as--->Run Configurations---> Arguments --vm arguments
	
命令行 java -Xms500m -Xmx3000m com.qf.day14.Demo8	

扩展 : 修改程序运行参数:通过程序运行参数输入数据

Elipse修改 右击java程序 “Demo8.java” —>Run as—>Run Configurations—> Arguments – program arguments

aaa
bbb
ccc

命令行 java com.qf.day14.Demo9 aaa bbb cccc

案例1

public class Demo2 {
    public static void main (String[] args) throws Exception {
        //1.格式化日期
        Date date=new Date();
        System.out.println(date.toLocaleString());
        //创建SimpleDateFormat
        SimpleDateFormat sdf=new SimpleDateFormat("y--M-d h:m:s");
        //格式化
        String str=sdf.format(date);
        System.out.println(str);

        //2.解析日期
        String str2="2019-10-1";
        SimpleDateFormat sdf2=new SimpleDateFormat("y-M-d");
        Date date1=sdf2.parse(str2);
        System.out.println(date1);

        //BigDecimal--->不会发生double近似值问题
        System.out.println("-------BigDecimal------");
        BigDecimal bigDecimal=new BigDecimal("1.4");
        BigDecimal bigDecimal1=new BigDecimal("0.5");
        BigDecimal bigDecimal2=new BigDecimal("0.9");
        //调用方法
        double result=bigDecimal.subtract(bigDecimal1).divide(bigDecimal2).doubleValue();
        System.out.println(result);

        //四舍五入
        BigDecimal bigDecimal3=new BigDecimal("3.135");
        double v=bigDecimal3.setScale(2, RoundingMode.HALF_UP).doubleValue();
        System.out.println(v);
        
        BigInteger bigInteger=new BigInteger("2");
        BigInteger bigInteger1=new BigInteger("3");
        System.out.println(bigInteger.multiply(bigInteger1).toString());
        //四舍五入补充
        DecimalFormat decimalFormat=new DecimalFormat("#.##");//前面#表示整数部分,"."后面表示几位小数
        String v1=decimalFormat.format(3.145926);
        System.out.println(v1);
        //四舍五入  总结
        System.out.printf("%.2f",3.145);
        String.format("%.2f", 3.145);
        //BigDecimal;
        //DecimalFormat
    }
}

案例2

public class Mianshi {
    public static void main(String[] args) {
        int a=getCount();
        System.out.println(a);
    }
    public static int getCount(){
        int i=10;
        try {
            return i+++i;//i=10;i++=11
        }catch (Exception e){
            return i++;
        }finally {
            i++;//i=11;i++=12
            System.out.println("释放资源"+i);//i=12
            //return i++;//i=12
        }
    }
}

案例3:日历

public class A1 {
    public static void main(String[] args) {
        //1.控制台输入年月日,分别用year month day 接受
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年:");
        int year = sc.nextInt();
        System.out.println("请输入月份:");
        int month = sc.nextInt();
        /*System.out.println("请输入日期:");
        int day = sc.nextInt();*/

        //2.回滚当月日期,确定当月一共有多少天
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month-1);
        //cal.set(Calendar.DATE, day);

        cal.set(Calendar.DATE, 1);
        //3.判断每个月第一天是星期几,确定好前面要输入的空格数int dayOfweek = cal.get(Calender.DAY_OF_WEEK)-1
        int dayOfweek = cal.get(Calendar.DAY_OF_WEEK)-1;
        cal.roll(Calendar.DATE, -1);
        /*System.out.println(Calendar.DATE);
        System.out.println(dayOfweek);*/
        int n = cal.get(Calendar.DATE);

        //4.for循环输出空格,在一个for循环输出日期(需要判断什么时候换行)
        for (int i = 0; i < dayOfweek; i++) {
            System.out.print("\t");
        }
        //5.打印结果
        for (int i = 1; i <= n; i++) {
           /* if(day == i) {
                System.out.print(i+"*\t");
            }else{
                System.out.print(i+"\t");
            }*///标记当天日期
            System.out.print(i+"\t");
            if((i+dayOfweek)%7==0) {
                System.out.println();
            }
        }
    }
}

二.异常

  1. 运行时异常(RuntimeException):在编译过程不会发现(没有语法错误),但是在执行程序过程中,由于重大的逻辑错误导致的程序中断。
    所有的RuntimeException的子类包括RuntimeException都属于运行时异常
    常见的运行时异常
NullPointerException		空指针异常(一个对象没有初始化调用方法)
ArrayIndexOutOfBoundsException	下标越界异常
ClassCastException			类型转换异常(对象类型转换时)
NumberFormatException		数字格式异常
ArithmeticException			算术异常
  1. 编译时异常
编译异常或检查异常,在程序设计过程中,编译时就会被发现,但是执行时可能发生也可能不发生的异常,为了程序不报错可以执行,那么这一类异常必须进行相应的处理。
Exception的子类包括Exception,除了RuntimeExcption之外都属于编译时异常。

Exception类:异常的父类。
Error类:错误,错误比较严重的问题,不属于异常,程序员无法处理。
​ StackOverflowError(栈溢出) 、OutOfMemoryError(堆内存溢出)

  1. 在try-catch块后加入finally块,finally块的主要作用释放资源。
  2. try…finally不能捕获异常 ,仅仅用来当发生异常时,用来释放资源。
    一般用在底层代码,只释放资源不做异常处理,把异常向上抛出。
  3. throws关键字:声明异常
    使用原则:底层代码向上声明或者抛出异常,最上层一定要处理异常,否则程序中断。
  4. throw关键字:抛出异常
  5. 自定义异常类:创建自定义异常,通常继承自Exception 或其子类,习惯上包装一下父类的构造方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
辽B代驾管理系统对代驾订单管理、用户咨询管理、代驾订单评价管理、代驾订单投诉管理、字典管理、论坛管理、公告管理、新闻信息管理、司机管理、用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行辽B代驾管理系统程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。辽B代驾管理系统的开发让用户查看代驾订单信息变得容易,让管理员高效管理代驾订单信息。 辽B代驾管理系统具有管理员角色,用户角色,这几个操作权限。 辽B代驾管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理代驾订单信息,管理公告信息等内容。 辽B代驾管理系统针对用户设置的功能有:查看并修改个人信息,查看代驾订单信息,查看公告信息等内容。 辽B代驾管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理代驾订单信息,管理公告信息等内容。 辽B代驾管理系统针对用户设置的功能有:查看并修改个人信息,查看代驾订单信息,查看公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看代驾订单,删除代驾订单操作,新增代驾订单操作,修改代驾订单操作。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。新闻管理页面,此页面提供给管理员的功能有:新增新闻,修改新闻,删除新闻。新闻类型管理页面,此页面提供给管理员的功能有:新增新闻类型,修改新闻类型,删除新闻类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值