zoukankan      html  css  js  c++  java
  • java基础类库

    接收输入

    Scanner类。有scanner构造函数,可以选择标准输入system.in,也可以选择文件。

    scanner的hasnext方法返回Boolean,表示是否还有输入。next返回出输入。

    系统相关

    加载文件和动态链接库,针对native方法。如需完成操作系统底层硬件设备,需要借助c语言实现。

    1.声明native方法,类似于abstract方法,只有方法签名。使用带-h选项的javac命令,编译该程序。将生产一个.class和一个.h文件。

    2.写一个.cpp文件实现native方法,需要包含.h文件(这个文件中包含了jdk带的jni.h)

    3将cpp文件编译成动态链接库文件。

    4在java中用System类的loadLibrary..()方法或者Runtime类的loadLibrary()方法加载动态链接库,java程序就能够调用这个native方法了。

    java9以前,javac没有-h选项,jdk提供了javah命令。java10删除了javah,javac的-h选项代替了javah

    String类不可变类,StringBuffer代表可变字符串,提供了各种方法改变字符串,然后生成最终的String对象。用tostring

    StringBuilder是jkd1.5新增类,也是可变字符串。但是线程不安全。比StringBuffer块。

    java9以前,使用字符数组来保存字符串。I因此每个字符占2个字节。

    java9以后,采用byte数组再加一个encoding-flag字段来保存字符,因此每个字符只占1个字节。

    java8的日期、时间类

    java.util包下提供了Date类,这个类从jdk1.0就有,因此十分古老,不推荐使用。提供的六个构造器目前java只推荐两个。

    Date()生成代表当前的date对象。

    Date(long Date)使用指定的long生成date对象。

    import java.util.Date;
    import java.time.*;
    public class DataEx {
        public static void main(String[] args) {
            var dl=new Date();
          var d2=new Date(System.currentTimeMillis()+100);
            System.out.println(dl);
            System.out.println(d2);
            System.out.println(dl.compareTo(d2));
            System.out.println(dl.before(d2));
        }
    }
    
    Sat Mar 07 10:57:14 CST 2020
    Sat Mar 07 10:57:14 CST 2020
    -1
    true
    

      尽量少用Date类,对日期进行加减运算,获取指定时间的date,可以使用calendar类

    Calendar类

    Calendar类是抽象类,不能通过构造函数创建对象。可以通过getInstance获得一个实例。然后调用Calendar的实例方法。也可以使用它的子类,例如格里高利日历类(表示公历)当然也可以自定义日历类作为其子类。

    其中,表示年,月,日的类字段,其int值是从0开始,所以如果想赋值7月,则需赋值6.

    add(int field ,int amount)功能非常强大。会自动进位,并且字段会自动修正到变化最小的值。

      var cl= Calendar.getInstance();
            //返回一个Date类型对象。
            var data=cl.getTime();
            var c2=Calendar.getInstance();
            //使用Data对象,为Calendar对象赋值。
            c2.setTime(data);
            System.out.println(data);
    
            System.out.println(c2);
            var c3=Calendar.getInstance();
            //使用set方法为Calendar对象赋值,其中7位八月
            c3.set(2019,7,31,0,0,0);
            var data2=c3.getTime();
            System.out.println(data2);
            //加6月,add会自动修正到改变最小的
            c3.add(Calendar.MONTH,6);
            var data3=c3.getTime();
            System.out.println(data3);
    
    
    Sat Mar 07 11:32:11 CST 2020
    java.util.GregorianCalendar[time=1583551931473,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=2,WEEK_OF_YEAR=10,WEEK_OF_MONTH=1,DAY_OF_MONTH=7,DAY_OF_YEAR=67,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=32,SECOND=11,MILLISECOND=473,ZONE_OFFSET=28800000,DST_OFFSET=0]
    Sat Aug 31 00:00:00 CST 2019
    Sat Feb 29 00:00:00 CST 2020
    

      而使用roll时,则不会进位。

    可以设置,setLenient(fals )来取消容错性。这样当加13个月时,会出错,而不取消时,会自动加一年一个月。

    因为Calendar有两种模式,一种是lenient另一种是non-lenient模式,如果是前一种,则每个字段会接收超出他允许范围的值,自动修正。而设置false后,会报异常。

    set方法有延迟性

    例如7.31将set将月设置为9,程序不会立即计算,再设置天为4,如果在设置为9以后,就输出,因为没有9.31,所以会输出10.1,如果在设置4以后再输出,会输出9.4.这是因为,只有再调用gettime之类方法时,set才会计算。

    新的日期时间包

    java8新增了一个java.time包。

     包含以下类,分别有静态方法,方便对日期进行操作。

    java的日期类分别有 util包下的Date,Calendar(抽象类),Date类的子类,处于java.sql包下的sql.Date类。还有新增的java.time包下的各个类。

    正则表达式

    正则表达式就是一个用于匹配字符串的模板。

    可以使用Pattern和Matcher使用正则。

    Pattern对象时正则表达式编译后在内存中的表达形式,所以需要将正则表达式先编译成Pattern对象。

    Pattern p=Pattern.compile("a*b);

    然后再用Patern对象创建对应的Matcher对象。执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可以用一个Pattern对象。

    String类也有正则表达式方法。

    String类的matches,replaceFirst,replaceAll,split等方法。

    变量处理和方法处理

    MethodHandle是java增加了方法引用功能。类似于函数指针。

    使用MethodType类的静态方法methodType,返回一个函数类型。类似于得到一个委托。即规定了函数的返回值,参数类型。

    使用MethodHandles的lookup静态类,中的findStatic方法或者findVirtual方法,得到函数指针。

    使用invoke执行函数。

    java9增加的VarHandle

    同样是使用MethodHandles的lookup静态类。使用findVarHandle方法,得到实例变量,或者类变量。然后通过实例变量或者类变量来操作实例变量或类变量。类变量不用传入对象作为参数。

    他们都是动态机制。当获取成员变量时,需要字符串名称,而这个字符串名称也是可以为动态的。因此十分灵活。

    java11 改进的国际化与格式化

    国际化是指应用程序运行时,可以根据客户端请求来自的国际和地区,语言的不同而显示不同的界面。

    国际化的目的是为了提供自适应更友好的用户界面,并不需要改变程序逻辑功能。

    国际化的简称为I18N。

    国际化的程序,在不同的地方,可以很好实现本地化。L10N。

    java11国际化支持升级到了Unicode10.0字符集。对于不同国家不同语言的支持。具有了国际化和本地化的特征及API。

    java语言将程序中的标签,提示等信息放在资源文件中,资源文件是key-value对。。资源文件命名有固定的方法。读取对应的资源文件,来改变value。达到国际化。

    如果要获取java所支持的国家和语言,可以调用Locale类的方法。返回一个local数组。包含了所有支持的国家和语言。

     MessageFormat处理包含占位符的字符串

    对于输出动态内容的信息,使用占位符,使用MessageFormat的静态方法format可以输出站位符的东西,根据format的参数顺序。

    可以使用类文件代替资源文件

    类文件优先使用

    类名必须与属性文件名相同

    必须继承ListRoesourceBundle,并重写getContents方法。该方法返回objedt数组,其每一项都是key-value对。

    java9新增的日志API

    开发者可以将日志消息路由到各种主流的日志框架。SLF4J,Log4J等。否则使用util.logging。

    调用System类的getLOgger方法。获取logger对象。

    使用对象的log方法输出日志。

    可以给变日志基本。来实现是否输出日志。

     MessageFormat是抽象类Format的子类

     NumberFormat和DateFormat也是他的子类

    其中NumberFormat,也是抽象基类,无法通过构造函数来创建对象。提供了类方法创建对象。

    创建对象后,可以调用format和parse方法来格式化数值和将格式化的数值转换为数值。

    DateFormat也是抽象类,也是通过类方法构造对象。有日期,时间,日期时间格式器

    以上方法可以指定日期样式,时间样式参数。他们是DateFormat类的四个静态常量。这样可以将Date对象,转换为对应格式的日期,时间 

    获得了对象之后,还可以调用parse方法,将字符串解析成Date对象。但是还要注意字符串的类型。如果类型出错,将会抛出异常。

    SimpleDateFormat类是DateFormat的子类

    他可以通过构造器来构造对象,构造器接收一个日期模板字符串。调用对象的format方法将date对象转换为特定的字符串。至于日期模板,对应的API有介绍。

    java8新增了日期时间格式器

     DateTimeFormatter格式器类,相当于前面两个格式器的合体。也是可以字符串和日期互相转换。

    可以使用静态常量,不同风格的枚举值,还有日期模 板,来创建对象。

    然后data.format(对象)来,将date转换为字符串

    如果解析日期字符串。

    则需要先调用.ofPattern(日期模板)创建对象,然后使用locatime.parse(str,对象)来实现日期字符串转换为locatime时间对象。

  • 相关阅读:
    Spring MVC Ajax 嵌套表单数据的提交
    Spring MVC 过滤静态资源访问
    Spring MVC 页面跳转时传递参数
    IDEA Maven 三层架构 2、运行 springMVC
    IDEA Maven 三层架构 1、基本的Archetype 搭建
    EasyUI DataGrid 基于 Ajax 自定义取值(loadData)
    Spring MVC Ajax 复杂参数的批量传递
    Mybatis Sql片段的应用
    在 Tomcat 8 部署多端口项目
    自动升级的设计思路与实现
  • 原文地址:https://www.cnblogs.com/tomato190/p/12419468.html
Copyright © 2011-2022 走看看