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时间对象。

  • 相关阅读:
    vim常用命令
    Leetcode686.Repeated String Match重复叠加字符串匹配
    Leetcode686.Repeated String Match重复叠加字符串匹配
    (转)Sql server中 如何用sql语句创建视图
    (转)Sql server中 如何用sql语句创建视图
    SQL Sever实验三 视图与数据更新
    SQL Sever实验三 视图与数据更新
    Leetcode653.Two Sum IV
    Leetcode653.Two Sum IV
    Leetcode661.Image Smoother图片平滑器
  • 原文地址:https://www.cnblogs.com/tomato190/p/12419468.html
Copyright © 2011-2022 走看看