- 获取系统当前时间:在java.util包下,有一个叫Date的类。因为不在lang包下,所以新建这个对象需要导入包(alt+回车)。然后调用Date类的无参构造函数,精确到毫秒。Date nowTime=new Date();然后输出nowTime会调用Date的toString方法。
- 将日期类型Date格式化,按照指定的格式进行转换。SimpleDateFormat类是Java.text包下的专门格式化日期的类。
- SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);yyyy代表年有四位数,MM月,dd日,HH时,mm分,ss秒,SSS毫秒有三位数。除了y,M,d,H,m,s,S不能随便写,剩下的可以随便写。
- Date nowTime=new Date();
- SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);
- String s=sdf.format(nowTime);
- System.out.println(s);
- 怎么把一个字符串转换成Date类型的,也是要用到SimpleDateFormat类型,新建一个和字符串一样的参数,然后调用这个类型中的parse方法,参数是一个字符串,然后就变成了一个Date类型,只不过调用这个方法需要抛出异常。
- 如果想要把字符串转换成Date类型的话,sdf类中的参数和想要变换的字符串类型不同的话,会出现ParseException异常。
- Date无参的话就是1970…。Date有参的话参数里面就是毫秒数。
System有一个静态方法叫做currentTimeMillis();它输出一个long类型的数,从1970年的1月1日到现在系统的时间总毫秒数。
long s=System.currentTimeMillis();
统计一个算法的耗时可以在方法开始前记录一个当前时间,结束后记录一个时间,然后再用两个时间相减就可以得到方法耗费的时长。
每次Java虚拟机调动的时间还是不一样的。
- System.out是System中的静态变量。
- println()不是System中的方法,因为System.out返回的是一个PrintStream类型,println()是PrintStream中的方法。
- System.gc();建议启动垃圾回收器。
- System.exit(0);退出JVM。
- System类在lang包下。
在java.text包下有一个DecimalFormat类,专门格式化数字。返回一个字符串
- DecimalFormat c=new DecimalForamt(##,###.##);代表保留两位小数。
- String a=c.format(1234.6279);
- System.out.println(a);
#号代表任意数字。0代表保留小数位,不够补0。
精度极高,属于引用数据类型,在java.math包下的类,专门用在财务软件当中。
BigDecimal a=new BigDecimal(100),参数可以是int,float,double。
BigDecimal b=new BigDecimal(200;
BigDecimal c=a.add(b);两个数的相加不能用+号,得调用方法。
java.util包下有一个Random类。
Random a=new Random();
int num=a.nextInt();
System.out.println(num);输出的是一个随机数,int类型取值范围内。
a.nextInt(101);里面的参数是边界,产生0~100之内的数字,不能产生101。
有可能遇到执行结果可能包括两种(用布尔),三种,或者四种等情况。但是每一个都是可以数清楚的,一枚一枚都是可以列举出来的,此时需要使用枚举类型。
枚举编译之后也是生成class文件,也是一种引用数据类型。枚举中的每一个值可以看做是一个常量。
public enum Result{ TRUE,FALSE}。此时TRUE就是enum中的一个常量。
然后调用的时候就是Result.TRUE。
IDEA中就可以创建枚举。
像颜色,星期,季节都可以创建成枚举。
提高了程序的健壮性。
异常在java中以类的形式存在,可以去new一个对象。
实际上在程序的某处,如果出现异常后,它会在那个地方new一个异常对象,并且JVM将new的异常对象抛出,打印输出到控制台。
异常继承的图像表示:
- object
- Throwable
- Error(不可处理,直接退出JVM)和Exception(可处理的)
- Exception下:Exception直接子类(编译时异常或受控异常)。RuntimeException(运行时异常或非受控异常或未受检异常)。
对异常的处理方式有两种(alt+回车)
- 在方法声明的位置上,使用throws关键字。抛给上一级。如果一直上抛,最终抛给了main方法,继续上抛给JVM,只能终止。
- 使用try…catch语句进行异常的捕捉。
只要是这个类中抛出异常了,那么调用这个类,或新建这个类就必须在方法声明的位置上抛出这个异常或者这个异常的父异常。也可以写多个异常,用逗号隔开。
如果有异常上报后,后续的代码是不执行的,所以一般建议main方法不要抛出异常,而是用捕捉。try…catch执行后,后面的代码还是可以进行的。
catch中的小括号中的参数的类型,可以是本具体的异常类型,也可以是父类型异常类型。
异常的分支也可以是多个,也就是可以有多个catch,每个不一样的异常中catch中的形参都是不一样的,也可以是共同的父类Exception。而且形参必须是从小到大,因为大写在前面就已经捕捉了。
可以采用或的关系来定义形参:catch(NullPointerException | ArithmeticException e){};
异常类型中有两个方法。
- String s=e.getMessage();是输出异常的信息。
- e.printStackTrace();采用了异步线程的方式。以后catch里面都要用这个方法来追踪异常信息。打印异常信息。
try,catch中的finally语句,finally语句中的代码是最后执行的,并且是一定会执行的,即使try,catch语句出现了异常。
使用了IO流去读文件,IO流必须得手动关闭,因为流是占用资源的。但是关闭流的操作一般写在finally子语句中,因为它是一定会执行的。
- try{ …}
- catch(IOException e){…}
- finally{…}
通常在finally语句块中完成资源的释放。
除非在try语句中执行推出虚拟机System.exit(0);,后面的finally语句才不会执行,否则try中有return语句,finally语句也会在return之前执行。
可以使用UML图描述一下继承结构。
UML是一种统一建模语言,一种图标语言,只要是面向对象的编程语言,都有UML,是软件架构师使用的。
UML图中可以描述类和类之间的关系,程序执行的流程,或者对象的状态。
final是一个关键字,表示不变的,最终的。
finally也是一个关键字,和try连用。
finalize()是Object类中的一个方法,作为方法名出现,所以它是一个标识符。
- 编写一个类继承Exception或者RunTimeException
- 提供两个构造方法,一个带有String参数的,一个无参数的。
异常可以自己使用,例如当初写的栈,当栈满了无法压栈,或者栈空了无法弹栈这都是异常,可以new一个自己写的异常类,然后将它抛出。
- MyStackOpretionException e=new MyStackOpertionException(“栈满”);
- throw e;
但是我们自己写的异常是继承Exception的,所以抛出去后总有人要接住,所以在引用这个类的方法要抛出这个异常。
方法的覆盖重写之后的方法不能比重写之前的方法抛出更多的异常,只能更少。
子类中重写的方法不能比父类抛出更多的异常,也就是范围不能更大。
throws是在方法声明的地方使用,表示上报异常。
throw是手动抛出异常。
引用等于null这个判断条件最好写在最前面,也可以写成null等于引用。



