Java高级用户指南-核心Java
来源:互联网 发布:ios编程基础 编辑:程序博客网 时间:2024/06/06 10:03
原文地址:https://dzone.com/refcardz/core-java
本文采用Google翻译,有些地方数据类型被翻译成了中文,建议中英文对照一起看。
第1节
关于Core Java
此Refcard概述了Java语言的关键方面以及核心库(格式化输出,集合,正则表达式,日志记录,属性)以及最常用的工具(javac,java,jar)上的备忘单。
Java关键字
1)交换机的默认子句
2)表示接口方法的默认实现
1)见开关
2)
public interface Collection <E> {
@覆盖
默认分离器<E> spliterator(){
return Spliterators.spliterator(this,0);
}}
}}
标准Java包
运算符优先级
基本类型
原始类型之间的法律转换
虚线箭头表示可能失去精度的转化。
Lambda表达式
功能接口
用一个抽象方法接口。 例:
@FunctionalInterface public interface Predicate<T> { boolean test(T t); }
此接口的实现可以作为lambda表达式在线提供:
- 功能接口的匿名实现
- 参数和主体由“箭头符号”(“ - >”)分隔
- 抽象方法的参数在箭头的左边
- 实现是在箭头的右边
lambda表达式的典型用法:
JButton button = new JButton("MyButton"); button.addActionListener(event -> doSomeImportantStuff(event));
方法参考
lambda表达式表示匿名函数。 您可以将它们作为方法参数传递或返回。使用方法引用的命名方法也可以做到这一点。
方法参考文献的典型用法:
无方法参考
使用方法引用
button.addActionListener(event - > doSomeImportantStuff(event));
button.addActionListener(this :: doSomeImportantStuff);
list.forEach(element - > System.out.println(element));
list.forEach(System。out :: println);
有四种方法引用:
种类的方法参考
例
静态方法
Collections :: emptyList
一个特定(命名)对象的实例方法
user :: getFirstName
给定类型的任意对象(稍后命名)的实例方法
User :: getFirstName
到构造函数
User :: new
集合和常见算法
常见任务
List <String> strs = new ArrayList <>();收集字符串strs.add(“Hello”); strs.add(“World!”);添加字符串for(String str:strs)System.out.println(str);对集合中的所有元素执行某些操作迭代器<String> iter = strs.iterator();while(iter.hasNext()){String str = iter.next(); if(someCondition(str))iter.remove(); }}删除与条件匹配的元素。 remove方法删除前面调用next所返回的元素strs.addAll(strColl);添加另一个字符串集合中的所有字符串strs.addAll(Arrays.asList(args))添加字符串数组中的所有字符串。 Arrays.asList是一个数组的List包装器strs.removeAll(coll);删除另一个集合的所有元素。 用于比较if(0 <= i && i <strs.size()){str = strs.get(i);strs.set(i,“Hello”); }}获取或设置指定索引处的元素strs.insert(i,“Hello”);str = strs.remove(i);在指定索引处插入或删除元素,移动索引值较高的元素String [] arr = new String [strs.size()];strs.toArray(arr);从集合转换到数组String [] arr = ...;List <String> lst = Arrays.asList(arr); lst = Arrays.asList(“foo”,“bar”,“baz”);从数组转换为列表。 使用varargs表单来创建一个小集合List <String> lst = ...;lst.sort(); lst.sort(new Comparator <String>(){public int compare(String a,String b){return a.length() - b.length();}}按照元素的自然顺序或使用自定义比较器对列表排序Map <String,Person> map = new LinkedHashMap <String,Person>();创建以插入顺序遍历的映射(需要针对密钥类型使用hashCode)。使用TreeMap以排序顺序遍历(要求键类型是可比较的)for(Map.Entry <String,Person> entry:map.entrySet()){String key = entry.getKey();Person value = entry.getValue(); ...}迭代地图的所有条目Person key = map.get(str);// null如果没有找到map.put(key,value);获取或设置给定键的值Stream API的批量操作
strs.forEach(System.out :: println);
对集合中的所有元素执行某些操作
List <String> filteredList = strs .stream().filter(this :: someCondition).collect(Collectors.toList());
过滤符合条件的元素
String concat = strs
.stream().collect(Collectors.joining(“,”));
连接流的元素
List <User> users = ...; 列表<String> firstNames = users
.stream().map(User :: getFirstName).collect(Collectors.toList());
创建一个映射到原始列表的新列表
列表<String> adminFirstNames = users .stream()
.filter(User :: isAdmin).map(User :: getFirstName).collect(Collectors.toList());
组合操作这不会导致列表元素的两次遍历
int sumOfAges = users .stream().mapToLong(User :: getAge).sum();
简单还原操作
Map <Role,List <User >> byRole = users .stream()
.collect(收藏家
.groupingBy(User :: getRole));
按特定属性对用户进行分组
int sumOfAges = users .parallelStream().mapToLong(User :: getAge).sum();
所有上述操作可以并行完成
字符转义序列
格式化输出使用printf
典型用法
System.out.printf("%4d %8.2f", quantity, price); String str = String.format("%4d %8.2f", quantity, price);
每个格式说明符具有以下格式。 请参阅表格中的标志和转换字符。
标志
旗描述例+打印正数和负数的符号+3333.33空间在正数之前添加一个空格| 3333.33 |0添加前导零003333.33- - 左对齐字段| 3333.33 |((括号中包含负数(3333.33),添加组分隔符3,333.33#(for f format)始终包括小数点3,333。#(对于x或o格式)添加0x或0前缀0xcafe$指定要格式化的参数的索引; 例如,%1 $ d%1 $ x以十进制和十六进制打印第一个参数159 9F<格式与以前的规格相同; 例如,%d%<x以十进制和十六进制打印相同的数字159 9F转换字符
带有MessageFormat的格式化输出
典型用途:
String msg = MessageFormat.format("On {1, date, long}, a {0} caused {2,number,currency} of damage.", "hurricane", new GregorianCalendar(2009, 0, 15). getTime(), 1.0E8);
产量"On January 1, 1999, a hurricane caused $100,000,000 of damage"
- 第n个项目由{n,format,subformat}表示,其格式和子格式如下所示
{0}
是第一个项目- 下表显示可用的格式
- 对引号使用单引号,例如对于文字左花括号使用“{”
- 使用''作为文字单引号
- 下界(使用 - \ u221E表示 - )
- 关系运算符:<for“less than”,#或\ u2264 for。
- 消息格式字符串
一个房子
5房子
正则表达式
常见任务
String [] words = str.split(“\\ s +”);沿着空格边界拆分字符串Pattern pattern = Pattern.compile(“[0-9] +”);Matcher matcher = pattern.matcher(str); String result = matcher.replaceAll(“#”);替换所有匹配项。 这里我们用#替换所有数字序列。Pattern pattern = Pattern.compile(“[0-9] +”);Matcher matcher = pattern.matcher(str); while(matcher.find()){process(str.substring(matcher.start(),matcher.end()));}}查找所有匹配项。Pattern pattern = Pattern.compile(“(1?[0-9]):([0-5] [0-9])[ap] m”);Matcher matcher = pattern.matcher(str); for(int i = 1; i <= matcher.groupCount(); i ++){process(matcher.group(i));}}查找所有组(由模式中的括号指示)。 这里我们找到一个日期的小时和分钟。正则表达式语法
预定义字符类名称
降低ASCII小写字母[az]上ASCII大写[AZ]ΑASCII字母[A-Za-z]数字ASCII数字[0-9]AlnumASCII字母或数字[A-Za-z0-9]XDigit十六进制数字[0-9A-Fa-f]打印或图形可打印的ASCII字符[\ x21- \ x7E]点ASCII非数字或数字[\ p {Print} && \ P {Alnum}]ASCII所有ASCII [\ x00- \ x7F]CntrlASCII控制字符[\ x00- \ x1F]空白空间或制表符[\ t]空间空白[\ t \ n \ r \ f \ 0x0B]javaLowerCase小写,由Character.isLowerCase()javaUpperCase大写,由Character.isUpperCase()javaWhitespace空白,由Character.isWhitespace()javaMirrored镜像,由Character.isMirrored()确定InBlock块是Unicode字符块的名称,删除空格,例如BasicLatin或Mongolian类别或类别类别是Unicode字符类别的名称,例如L(字母)或Sc(货币符号)匹配的标志
模式匹配可以使用标志进行调整,例如:
Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE + Pattern.UNICODE_CASE)
记录
常见任务
Logger logger = Logger.getLogger(“com.mycompany.myprog.mycategory”);获取类别的记录器logger.info(“Connection successful。”);记录级别FINE的消息。 可用级别为SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST,以及相应的严重,警告等方法logger.log(Level.SEVERE,“Unexpected exception”,Throwable);记录Throwable的堆栈跟踪logger.setLevel(Level.FINE);将日志记录级别设置为FINE。 默认情况下,日志记录级别为INFO,不记录不太严重的日志消息处理程序处理程序=新的FileHandler(“%h / myapp.log”,SIZE_LIMIT,LOG_ROTATION_COUNT);handler.setFormatter(new SimpleFormatter()); logger.addHandler(handler);添加用于将日志记录保存在文件中的文件处理程序。有关命名模式,请参见下表。 这个处理程序使用一个简单的格式化程序,而不是XML格式化程序,这是文件处理程序的默认值记录配置文件
日志配置可以通过日志配置文件配置,默认为jre/lib/logging.properties
。启动虚拟机时,可以使用系统属性java.util.logging.config.file
另一个文件。(注意LogManager
在main之前运行。)
java.util.logging.ConsoleHandler.level默认处理程序级别Level.ALL用于FileHandler,Level.INFO用于ConsoleHandlerjava.util.logging.FileHandler.filter
java.util.logging.ConsoleHandler.filter默认过滤器的类名没有java.util.logging.FileHandler.formatter
java.util.logging.ConsoleHandler.formatter默认格式化程序的类名formatter java.util.logging。XMLFormatter for FileHandler,java.util.logging。 SimpleFormatter for ConsoleHandlerjava.util.logging.FileHandler.encoding
java.util.logging.ConsoleHandler.encoding默认编码默认平台编码java.util.logging.FileHandler.limit旋转日志文件的默认限制(以字节为单位)0(无限制),但在jre / lib / logging.properties中设置为50000java.util.logging.FileHandler.count循环日志文件的默认数目1java.util.logging.FileHandler.pattern日志文件的默认命名模式。 创建文件时,将替换以下标记:
属性文件
- 包含名称/值对,用=,:或空格分隔
- 名称周围的空格或值开始之前的空格将被忽略
- n可以通过将\作为最后一个字符来继续行; 连续线上的前导空白被忽略
button1.tooltip = This is a long \ tooltip text.
- \ t \ n \ f \ r \\ \ uxxxx转义被识别(但不是\ b或八进制转义)
- 文件假设在ISO 8859-1中编码; 使用native2ascii将非ASCII字符编码为Unicode转义
- 空行和以#或!开头的行。 被忽略
典型用途:
Properties props = new Properties(); props.load(new FileInputStream("prog.properties")); String value = props.getProperty("button1.tooltip"); // null if not present
也用于资源包:
ResourceBundle bundle = ResourceBundle.getBundle("prog"); // Searches for prog_en_US.properties, // prog_en.properties, etc. String value = bundle.getString("button1.tooltip");
JAR文件
- 用于存储应用程序,代码库
- 默认情况下,类文件和其他资源以ZIP文件格式存储
- META-INF / MANIFEST.MF包含JAR元数据
- META-INF /服务可以包含服务提供程序配置
- 使用jar实用程序创建JAR文件
JAR实用程序选项
常见javac选项
-Xmxsize设置初始或最大堆大小。 大小是以字节为单位的值。 为千字节或兆字节添加后缀k或m,例如-Xmx10m
常用的java选项
选项
描述
-cp或-classpath
设置类路径,用于搜索类文件。 有关详细信息,请参阅上表。注意,如果当前目录在源路径上而不是类路径上,则java失败时,javac可以成功
-ea或-enableassertions
启用断言。 默认情况下,断言被禁用
-D property = value
设置可以检索的系统属性
System.getProperty(String)
-罐
运行包含在其清单具有Main-Class条目的JAR文件中的程序。 使用此选项时,将忽略类路径
-verbose
显示加载的类。 此选项可能有助于调试类加载问题
-Xms 大小 -Xmx 大小
设置初始或最大堆大小。 大小是以字节为单位的值。为千字节或兆字节添加后缀k或m,例如-Xmx10m
- Java高级用户指南-核心Java
- java高级特性和核心优化gc
- Java核心之类的高级属性
- java.util.concurrent 用户指南
- Java语音程序开发用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java并发工具包java.util.concurrent用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- Java 并发工具包 java.util.concurrent 用户指南
- 备忘录
- Apple ID双重认证是什么?双重认证与两步验证的区别
- DockerInAction-Limiting risk with isolation
- warmp启动图标黄色
- java 蓝桥杯 凑算式 ( 两种方法 暴力和dfs)
- Java高级用户指南-核心Java
- HDU5672 尺取
- java定时任务Timer和TimerTask使用
- iReport安装过程
- excel 单元格文本链接方法
- SparseArray与ArrayMap的使用条件
- Maven核心概念
- ThreadPool线程池
- 在树莓派中安装opencv