一、引言

Oracle为Java提供了丰富的基础类库,Java 8 提供了4000多个基础类库,熟练掌握这些基础类库可以提高我们的开发效率,当然,记住所有的API是不可能也没必要的,我们可以通过API文档或直接网上搜索来逐渐熟悉大部分类的功能和方法,下面我们来学习一些基础类库。

二、Scanner

Scanner类可以很方便的获取用户的键盘输入,是一个基于正则表达式的文本扫描器,可以从文件、输入流、字符串中解析出字符串和基本类型值,构造器也是以文件、输入流、字符串为数据源进行构造,主要有两种方法:

  • hasNextXxx():是否还有下一个Xxx类型输入项。

  • nextXxx():获取下一个Xxx输入项。
//键盘输入
Scanner scanner = new Scanner(System.in);
//回车作为分隔符
scanner.useDelimiter("\n");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}

默认使用空白(空格、tab空白、回车)来进行项之间的分隔符。我们也可以直接按照行来进行分隔,调用下面方法:

  • hasNextLine

  • nextLine

Scanner 还可以读取文件输入

try {
Scanner scannerfile=new Scanner(new File("123.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

三、系统相关

3.1 System

System类代表当前Java程序的运行平台,System不能被创建,可以获取环境变量,系统属性,还提供了加载文件和动态链接库的方法。

//键盘输入
Scanner scanner = new Scanner(System.in);
//回车作为分隔符
scanner.useDelimiter("\n");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
try {
Scanner scannerfile=new Scanner(new File("123.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

3.2 Runtime

Runtime类代表Java程序的运行环境,我们可以通过此类获取JVM信息,如处理器数量,内存信息。并可以使用gc进行垃圾回收。

Runtime runtime = Runtime.getRuntime();
System.out.println("处理器数量:" + runtime.availableProcessors());
System.out.println("可用最大内存数:"+runtime.maxMemory());
System.out.println("空闲内存:"+runtime.freeMemory());
System.out.println("总内存数:"+runtime.totalMemory());

四、常用类

4.1 Object

Object 是所有类、数组、枚举类的父类,任何类型都可以赋给Object,有以下常用的一些方法:

  • boolean equals(Object obj) 判断指定对象与该对象是否相等。

  • void finalize() 垃圾回收器调用此方法来清理对象资源。

  • Class<?> getClass() 返回该对象运行时类。

  • int hashCode() 返回该对象的hash值。

  • toString() 返回该对象字符串表示。

Object还有控制线程的几个方法,wait()、notify()、notifyAll()。

Java 7 之后新增了Objects方法,里面提供了工具方法来操作对象,这些工具方法大多是空指针安全的,使用更安全。

4.2 字符串类

字符串就是一连串字符序列,Java提供了String、StringBuffer、StringBuilder 三个类进行字符串封装和处理。其中StringBuffer、StringBuilder基本相似,只是StringBuffer线程安全而StringBuilder线程不安全。

String类是不可变类,一旦创建,就不可改变,直至被销毁。String类的不可变性,后面有机会再详解。

String类提供了很多构造器:

String也提供了大量的方法来操作字符串对象,我们学习一些常用的方法:

String s = new String("abcdefg");
//获取字符串中指定位置的字符
System.out.println(s.charAt(1));
//比较字符串的大小
System.out.println(s.compareTo("adasd"));
//将该字符串与str连接在一起
s.concat("higk");
System.out.println(s);
//与StringBuffer对象比较,值相等则返回true
System.out.println(s.contentEquals(new StringBuffer("abcd")));
//将字符数组连缀成字符串
System.out.println(String.copyValueOf(new char[]{'a', 'b'}));
//将字符数组的子数组连缀成字符串
System.out.println((String.copyValueOf(new char[]{'a', 'b', 'c', 'd', 'e'}, 2, 3)));
//将字符串与指定对象比较
System.out.println(s.equals("abcdefg"));
//忽略大小写字符串与指定对象比较
System.out.println(s.equalsIgnoreCase("ABcdefg"));
//将string对象转换成Byte数组
byte[] bytes = s.getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
char[] s1 = new char[]{'晚', '安', '!', '世', '界'};
String s2 = new String("。!?");
//将字符串从srcBegin开始,到srcEnd结束复制到字符串数组串中,dstBegin为字符串数组的初始位置
s2.getChars(0, 2, s1, 2);
for (int i = 0; i < s1.length; i++) {
System.out.println(s1[i]);
}
//查询字符在字符串中第一次出现的位置
System.out.println(s.indexOf('b'));
//查询字符在字符串中从fromIndex后第一次出现在的位置
System.out.println(s.indexOf('b', 2));
//查询子字符串在字符串中第一次出现的位置
System.out.println(s.indexOf("bc"));
//查询子字符在字符串中从fromIndex后第一次出现在的位置
System.out.println(s.indexOf("bc", 2));
//查询字符在字符串中最后一次出现的位置
System.out.println(s.lastIndexOf('b'));
//查询字符在字符串中从fromIndex后最后一次出现在的位置
System.out.println(s.lastIndexOf('b', 2));
//查询子字符串在字符串中最后一次出现的位置
System.out.println(s.lastIndexOf("bc"));
//查询子字符在字符串中从fromIndex后最后一次出现在的位置
System.out.println(s.lastIndexOf("bc", 2));
//字符串长度
System.out.println(s.length());
//替换字符串
s.replace('a', 'b');
System.out.println(s);
//对象是否以某字符串结尾
System.out.println(s.startsWith("ab"));
//String 对象是以某字串结尾
System.out.println(s.endsWith("fg"));
//获取从beginIndex位置开始到结束的子字符串
String substring = s.substring(4);
System.out.println(substring);
//获取从beginIndex位置开始到endIndex结束的子字符串
String substring1 = s.substring(4, 6);
System.out.println(substring1);
char[] chars = s.toCharArray();
//转换成char数组
for (int i = 0; i <chars.length ; i++) {
System.out.println(chars[i]);
}
//将字符串转换成小写
String lowerCase = s.toLowerCase();
System.out.println(lowerCase);
//将字符串转换成大写
String upperCase = s.toUpperCase();
System.out.println(upperCase);

由于String的不可变性,频繁操作String时会产生大量的临时变量,这时我们可以使用StringBuilder和StringBuffer,两个类的用户基本一致,在不需要线程安全时,建议使用StringBuilder。

StringBuilder sb=new StringBuilder();
//追加
sb.append("java");
System.out.println(sb);
//插入
sb.insert(0,"hello ");
System.out.println(sb);
//替换
sb.replace(5,6,",");
System.out.println(sb);
//反转
sb.reverse();
System.out.println(sb);
//长度与容量
System.out.println(sb.length()+ sb.capacity());

4.3 Math 类

Java 提供了Math来进行复杂的数学运算,我们记住一些常用的就行:

//返回小于目标数的最大整数
System.out.println(Math.floor(-1.57));
//返回大于目标数的最小整数
System.out.println(Math.ceil(1.57));
//四舍五入
System.out.println(Math.round(2.3));
//取绝对值
System.out.println(Math.abs(-4.6));
//取最大数
System.out.println(Math.max(1,3));

4.4 Random

Random类专门用于生产伪随机数,有两个构造器,一个已当前系统时间作为种子,一个已外部输入数字作为种子,常用的方法有:

Random random = new Random();
//生成一个int范围内的随机数
System.out.println(random.nextInt());
//生成0-30范围的随机数
System.out.println(random.nextInt(30));
//生成0.0-1.0 的随机数
System.out.println(random.nextDouble());

五、日期、时间类

ava提供了Date和Calendar来处理日期和时间,但Date不仅不支持国际化,而且不同属性也使用了前后矛盾的偏移量,Java 8 又提供了全新的日期时间库。

5.1 Date

Date 现在在用的有两个构造器:

  • Date() :生成一个代表当前日期时间的date对象

  • Date(long date):指定的long型整数来生成一个Date对象

Date 还在使用的方法也很少:

Date date = new Date();
Date date1 = new Date(System.currentTimeMillis()+100);
//测试该日期是否在指定日期之后
System.out.println(date.after(date1));
//比较日期大小
System.out.println(date.compareTo(date1));

Date类设计的并不好,对日期的操作推荐使用Calendar。

5.2 Calendar 类

Calendar 类是一个抽象类,是所有日历的模板,提供了静态getInstance()方法获取Calendar对象,这个方法是通过获取TimeZone和Locale 来创建Calendar。Calendar 和Date都是表示日期的类,他们可以互相转换。

Calendar calendar = Calendar.getInstance();
Date date2 = calendar.getTime();
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date2);

Calendar 类提供了大量访问、修改日期时间的方法,常用方法如下:

//给指定的字段增加或者减去时间量,如果指定量超过最大值,则进位
calendar.add(Calendar.YEAR,1);
//获取指定的字段值
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DATE));
//设置日期值
calendar.set(2003,10,2,10,50,10);
//给指定的字段增加或者减去时间量,如果指定量超过最大值,不进位
calendar.roll(Calendar.YEAR,13);

5.3 Java 8新增的时间日期包

Java 8 提供了java.time 包来处理日期和时间,常用的类:

  • Clock:获取指定时区的当前日期、时间。

  • Duration:代表持续时间,可以方便的获取一段时间。

  • Instant:代表具体时刻,可以精确到纳秒。

  • LocalDate:该类代表不带时区的日期。

  • LocalTime:该类代表不带时区的时间。

  • LocalDateTime:该类代表不带时区的日期、时间。

  • MonthDay:该类代表月日。

  • Year:代表年。

  • YearMonth:代表年月。

这些类的方法比较简单,需要使用时再通过API文档查找。

六、正则表达式

正则表达式是强大的字符串处理工具,可以对字符串进行查找、提取、分隔、替换等操作。

Java提供了Pattern和Matcher来使用正则表达式

//将字符串编译成Pattern对象
Pattern pattern = Pattern.compile("a*b");
//使用Pattern创建Matcher对象
Matcher matcher = pattern.matcher("aaaaab");
System.out.println(matcher.matches());
//只能使用一次,效率不高
Pattern.matches("a*b", "aaabbb");
String s = "XXX:13892329111,XXX:18922121231,XXX:13824322341";
Matcher matcher1 = Pattern.compile("1\\d{10}").matcher(s);
//返回目标字符串中是否包含匹配的字串
while (matcher1.find()) {
//返回上一次匹配的字串
System.out.println(matcher1.group());
}

七、日期、时间格式化器

对于日期的展示,我们一般的会格式化处理,Java提供了几个类来进行日期格式化处理。

7.1 SimpleDateFormat

SimpleDateFormat 既可以将日期按照固定格式转成字符串,也可以将特殊日期字符串转成日期

//将日期转换成固定格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
System.out.println(simpleDateFormat.format(date));
//日期字符串
String str = "14###三月##21";
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("y###MMM##d");
//将日期字符串解析成日期,主要格式要匹配的上,不然会报错
System.out.println(simpleDateFormat.format(simpleDateFormat1.parse(str)));

7.2  DateTimeFormatter

DateTimeFormatter 是Java 8提供的增强版的日期格式器类,功能很强大,DateTimeFormatter中包含了大量的静态化常量,这些静态化常量本身就是DateTimeFormatter实例

我们可以通过常量来创建格式化器,也可以使用不同风格的枚举值来创建

DateTimeFormatter[] formatters=new DateTimeFormatter[]{
//常量创建
DateTimeFormatter.ISO_DATE_TIME,
DateTimeFormatter.ISO_LOCAL_DATE,
DateTimeFormatter.ISO_DATE,
//枚举值创建
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL,FormatStyle.MEDIUM),
//模式字符串
DateTimeFormatter.ofPattern("Gyyyy%%MMM%%dd")
};
LocalDateTime localDate = LocalDateTime.now(); for (int i = 0; i <formatters.length ; i++) {
//两种方式格式化日期
System.out.println(formatters[i].format(localDate));
System.out.println(localDate.format(formatters[i]));
}

DateTimeFormatter 也可以将字符串直接转成日期,用法与SimpleDateFormat 相同。

Java核心技术梳理-基础类库的更多相关文章

  1. JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)

    一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...

  2. JAVA核心技术I---JAVA基础知识(static关键字)

    一:static特殊关键字用处 –变量 –方法 –类 –匿名方法 二:静态变量:类共有成员 –static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在. –所有的对象实例,对于静态变量都 ...

  3. 进阶Java编程(5)基础类库

    Java基础类库 1,StringBuffer类 String类是在所有项目开发之中一定会使用到的一个功能类,并且这个类拥有如下的特点: ①每一个字符串的常量都属于一个String类的匿名对象,并且不 ...

  4. Java核心技术卷一基础技术-第13章-集合-读书笔记

    第13章 集合 本章内容: * 集合接口 * 具体的集合 * 集合框架 * 算法 * 遗留的集合 13.1 集合接口 Enumeration接口提供了一种用于访问任意容器中各个元素的抽象机制. 13. ...

  5. JAVA核心技术I---JAVA基础知识(时间类)

    一:时间类库了解 java.util.Date(基本废弃,Deprecated) –getTime(),返回自1970..1以来的毫秒数 java.sql.Date(和数据库对应的时间类) //与数据 ...

  6. Java核心技术 卷Ⅰ 基础知识(1)

    第三章 Java的基本程序设计结构 Java对大小写敏感 命名规范为骆驼命名法,不能使用保留字 main方法必须声明为public 如果main方法正常退出,java应用程序的退出代码为0,表示成功运 ...

  7. [编织消息框架][JAVA核心技术]annotation基础

    应用动态代理技术要先掌握annotation技术 注解是JDK1.5之后才有的新特性,JDK1.5之后内部提供的三个注解 @Deprecated 意思是“废弃的,过时的” @Override 意思是“ ...

  8. Java核心技术卷一基础知识-第14章-多线程-读书笔记

    第 14 章 多线程 本章内容: * 什么是线程 * 中断线程 * 线程状态 * 线程属性 * 同步 * 阻塞队列 * 线程安全的集合 * Collable与Future * 执行器 * 同步器 * ...

  9. Java核心技术卷一基础知识-第11章-异常、断言、日志和调试-读书笔记

    第11章 异常.断言.日志和调试 本章内容: * 处理错误 * 捕获异常 * 使用异常机制的技巧 * 使用断言 * 日志 * 调试技巧 * GUI程序排错技巧 * 使用调试器 11.1 处理错误 如果 ...

随机推荐

  1. Ocelot中文文档-服务发现

    Ocelot允许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口.目前,这仅在GlobalConfiguration部分中受支持,这意味着所有ReRoute将使用 ...

  2. ws-trust、域、webservice接口的总结

    最近燃料公司门户做了一个待办的汇总,从三个数据源拿数据汇总到首页,这三个数据源分别是域认证的接口,域认证的webservices,证书加密的接口,下面就这些接口,做一下简单总结 1 pfx证书的探索过 ...

  3. spring boot:thymeleaf使用详解

    简单说, Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点: 1.Thymeleaf 在 ...

  4. Solr(三)向solr-5.5.4中添加数据

    Solr添加数据 一 首先在创建好的CORE中添加自己需要的Field(可以理解为表的字段) 1 切换到配置Field的文件目录,编辑配置Field的文件 managed-schema cd /usr ...

  5. (三)SpringBoot基础篇- 持久层,jdbcTemplate和JpaRespository

    一.介绍 SpringBoot框架为使用SQL数据库提供了广泛的支持,从使用JdbcTemplate的直接JDBC访问到完整的"对象关系映射"技术(如Hibernate).Spri ...

  6. CSS中的变形、过渡、动画效果

    一.变形 .过渡效果 1:元素平移 x方向 y方向 transform:translate(100px 100px); 2:过渡动画效果 a:什么属性参与过渡效果 b:过渡时间 c:过渡的效果 值包含 ...

  7. Asp.Net MVC 中JS通过ajaxfileupload上传图片获取身份证姓名、生日、家庭住址等详细信息

    客户要求用身份证图片上传获取身份证的详细信息就下来研究了一下(现在的客户真的懒 身份证信息都懒得输入了哈哈...),经过慢慢研究,果然皇天不负有心人搞出来了.这个借助的是腾讯的一个SKD  腾讯优图云 ...

  8. 【转】利用 three.js 开发微信小游戏的尝试

    前言 这是一次利用 three.js 开发微信小游戏的尝试,并不能算作是教程,只能算是一篇笔记吧. 微信 WeChat 6.6.1 开始引入了微信小游戏,初期上线了一批质量相当不错的小游戏.我在查阅各 ...

  9. Tomcat配置与优化(内存、并发、管理)与性能监控

    原文链接:http://blog.csdn.net/xyang81/article/details/51530979 一.JVM内存配置优化 在开发当中,当一个项目比较大时,依赖的jar包通常比较多, ...

  10. 盒子模型、IFC、BFC和Collapsing margins

    前言 盒子模型作为CSS基础中的基础,曾一度以为掌握了IE和W3C标准下的块级盒子模型即可,但近日在学习行级盒子模型时发现原来当初是如此幼稚可笑.本文尝试全面叙述块级.行级盒子模型的特性.作为近日学习 ...