精华内容
下载资源
问答
  • JAVA,JDK 官方文档中文离线版,同网页版完全一样。
  • (给ImportNew加星标,提高Java技能)作者:程序猿石头/码农唐磊(本文来自作者投稿)背景分享一下之前踩的一个坑,背景是这样的...需要说明的是本地、测试环境、生产环境通过不同的域名访问该外部服务。生产程序调用不...

    (给ImportNew加星标,提高Java技能)

    作者:程序猿石头/码农唐磊(本文来自作者投稿)

    背景

    分享一下之前踩的一个坑,背景是这样的:

    我们的项目依赖于一个外部服务,该外部服务提供 REST 接口供我方调用,这是很常见的一个场景。本地和测试环境测试都没有问题,一切就绪。上了生产后,程序调用接口就总是网络不通。

    需要说明的是本地、测试环境、生产环境通过不同的域名访问该外部服务。生产程序调用不通,神奇的是在生产环境通过 curl 等命令却能够正常调用对方接口。

    490041424ca12fba871bd0a930ad64f0.gif

    这 TM 就神奇了,唯一不同的就是发起 HTTP 请求的客户端了,估计就是 HTTP 客户端有问题了?通过最后排查发现,居然发现了一枚 “JDK 的 bug”,然后石头就提交到了 JDK 的官网……

    045a0bec47ca65c1c398f29853cd6ce8.png

    下面我们就来重现一下这个问题。

    Server 端准备

    这里用 Nginx 模拟了一下 上文提到的 REST 服务,假设调用正常返回 "Hello, World\n",Nginx 配置如下:

    server {    listen    80;    server_name test_1.tanglei.name;    location /testurl {        add_header Content-Type 'text/plain; charset=utf-8';        return 200 "Hello, World\n";    }}

    不同的 Client 请求

    下面用不同的 HTTP Client (分别用命令行 curl、Python 的 requests 包和 Java 的 URL 等尝试)去请求。

    • curl 请求,正常。
    [root@VM_77_245_centos vhost]# curl -i "http://test_1.tanglei.name/testurl"HTTP/1.1 200 OKServer: nginxContent-Length: 13Connection: keep-aliveContent-Type: text/plain; charset=utf-8Hello, World[root@VM_77_245_centos vhost]#
    • Python requests 正常。

    >>> import requests>>> r = requests.get("http://test_1.tanglei.name/testurl")>>> r.textu'Hello, World\n'
    • Java 的 java.net.URLConnection 同样正常。

    static String getContent(java.net.URL url) throws Exception {    java.net.URLConnection conn = url.openConnection();    java.io.InputStreamReader in = new java.io.InputStreamReader(conn.getInputStream(), "utf-8");    java.io.BufferedReader reader = new java.io.BufferedReader(in);        StringBuilder sb = new StringBuilder();    int c = -1;    while ((c = reader.read()) != -1) {        sb.append((char)c);    }    reader.close();    in.close();    String response = sb.toString();    return response;}

    上面的这个方法 String getContent(java.net.URL url) 传入一个构造好的 java.net.URL 然后 get 请求,并以 String 方式返回 response。

    String srcUrl = "http://test_1.tanglei.name/testurl";java.net.URL url = new java.net.URL(srcUrl);System.out.println("\nurl result:\n" + getContent(url)); // OK

    上面的语句输出正常,结果如下:

    url result:Hello, World

    这就尼玛神奇了吧。看看我们程序中用的 httpclient 的实现,结果发现是有用 java.net.URI。心想,这不至于吧,用 URI 就不行了么。

    33de02e22644b214b5366858326d7c29.png

    换 java.net.URI 试试? (这里不展开讲URL和URI的区别联系了,可以简单的认为 URL 是 URI 的一个子集,详细的可参考 URI、URL 和 URN[1], wiki URI[2])

    直接通过 java.net.URI 构造,再调用 URI.toURL 得到 URL,调用同样正常。

    关键的来了,httpclient 源码中用的构造函数是另外一个:

    URI(String scheme, String host, String path, String fragment)Constructs a hierarchical URI from the given components.

    我用这个方法构造 URI,会构造失败:

    new java.net.URI(uri.getScheme(), uri.getHost(), uri.getPath(), null) error: protocol = http host = nullnew java.net.URI(url.getProtocol(), url.getHost(), url.getPath(), null) error: Illegal character in hostname at index 11: http://test_1.tanglei.name/testurl

    所以问题发现了,我们的项目中依赖的第三方 httpclient 包底层用到了 java.net.URI,恰好在  java.net.URI 中是不允许以下划线 (_) 作为 hostname 字段的。

    即 uri.getHost() 和 uri.toURL().getHost() 居然能不相等。

    这是 JDK 的 Bug 吧?

    有理由怀疑,这是 JDK 的 Bug 吧?

    949cd1bfdcea23947ff6938ea48ad7c2.png

    从官网上还真找到了关于包含下划线作为 hostname 的 bug 提交 issue。戳这里 JDK-8132508 : Bug JDK-8029354 reproduces with underscore in hostname[3],然后发现该 "bug" reporter 的情况貌似跟我的差不多,只不过引爆 bug 的点不一样。

    该 "bug" reviewer 最后以 "Not an Issue" 关闭,给出的理由是:

    RFC 952 disallows _ underscores in hostnames. So, this is not a bug.

    确实,rfc952[4] 明确明确说了域名只能由字母 (A-Z)、数字(0-9)、减号 (-) 和点 (.) 组成。

    那 OK 吧,既然明确规定了 hostname 不能包含下划线,为啥 java.net.URL 却允许呢?

    造成 java.net.URI 和 java.net.URL 在处理 hostname 时的标准不一致,且本身 java.net.URI 在构造的时候也带了 "有色"眼镜,同一个URL字符串 通过静态方法 java.net.URI.create(String) 或者通过带1个参数的构造方法 java.net.URI(String) 都能成功构造出 URI 的实例,但通过带4个参数的构造方法就不能构造了。

    要知道,在 coding 过程中,尽早反馈异常信息更有利于软件开发持续迭代的过程。我们在开发过程中也应该遵循这一点原则。

    于是我就去 JDK 官网提交了一个 bug,大意是说 java.net.URI 和 java.net.URL 在处理 hostname 的时候标准不一致,容易使开发人员埋藏一些潜在的 bug,同时也还把这个问题反馈到 stackoverflow[5] 了。

    I am wondering, if hostname with underscore is not valid, why the result is differrent between java.net.URI and java.net.URL? Is it a bug or a feature? Here is the example.

    java.net.URL url = new java.net.URL("http://test_1.tanglei.name"); 

    System.out.println(url.getHost()); //test_1.tanglei.name 

    java.net.URI uri = new java.net.URI("http://test_1.tanglei.name"); 

    System.out.println(uri.getHost()); //null

    这个 JDK bug issue 详细信息见 JDK-8170265 : underscore is allowed in java.net.URL while not in java.net.URI[6],openjdk JDK-8170265[7]。

    d9caea55f525000fe37f8483944e3c06.png

    经过初步 Review,被认为是一个 P4 的 Bug。说的是 java.net.URL 遵循的是 RFC 2396 规范,确实不允许含有下划线的 hostname。java.net.URI 做到了, 而 java.net.URL 没有做到。

    71b7f74bf20d7c1d3b3f176849f70c0c.png

    重点来了,然后,却被另外一个 Reviewer 直接给毙了。给出的原因是 java.net.URL 构造方法中,API 文档中说了本来也不会做验证即 No validation of the inputs is performed by this constructor.  在线 API Doc 戳这里[8] (可以点连接,进去搜索关键字 "No validation")。

    8588db032267f29b366e4dcdd81c8ab4.png

    65970ded03bd8dc4752863f1c0b9de08.png

    当初没有收到及时反馈,就没有来得及怼回去。

    其实就算 "No validation of the inputs is performed by this constructor." 是合理的,里面也只有3个构造函数有这样的说明,按照这样的逻辑是不是说另外的构造函数有验证呢……(示例中的默认的构造函数都没有说呀)。

    这里有 java.net.URL 的源码[9],感兴趣的同学可以看看。

    恩,以上就是结论了。

    不过,反正我自己感觉目前 Java API 关于这里的设计不太合理,欢迎大家讨论。

    我在SO提问的这个回答[10]比较有意思,哈哈。

    The review is somewhat terse, but the reviewer's point is the URL constructor is behaving in accordance with its specification. Since the specification explicitly states that no validation is performed, this is not a bug in the code. This is indisputable.

    What he didn't spell out is that fixing this inconsistency (by changing the URL class specification) would break lots of peoples' 20+ year old code Java code. That would be a really bad idea. It can't happen.

    So ... this inconsistency is a "feature".

    附本文链接

    [1] URI、URL 和 URN: https://www.ibm.com/developerworks/cn/xml/x-urlni.html

    [2]wiki URI: https://en.wikipedia.org/wiki/Uniform_Resource_Identifier

    [3]JDK-8132508 : Bug JDK-8029354 reproduces with underscore in hostname: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8132508

    [4]rfc952: https://tools.ietf.org/html/rfc952

    [5]stackoverflow: https://stackoverflow.com/questions/44226003/conflicts-between-java-net-url-and-java-net-uri-when-dealing-with-hostname-conta

    [6]JDK-8170265 : underscore is allowed in java.net.URL while not in java.net.URI: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8170265

    [7]openjdk JDK-8170265: https://bugs.openjdk.java.net/browse/JDK-8170265

    [8]线 api doc 戳这里: https://docs.oracle.com/javase/8/docs/api/java/net/URL.html

    [9]这里有java.net.URL 的源码: http://www.docjar.com/html/api/java/net/URL.java.html

    [10]我在SO提问的这个回答: https://stackoverflow.com/questions/44226003/conflicts-between-java-net-url-and-java-net-uri-when-dealing-with-hostname-conta?answertab=active#tab-to

    推荐阅读  点击标题可跳转

    JDK 的 3 个 bug

    Java NIO:Buffer、Channel 和 Selector

    我的程序跑了60多小时,就是为了让你看一眼JDK的BUG导致的内存泄漏

    看完本文有收获?请转发分享给更多人

    关注「ImportNew」,提升Java技能

    873c225c2226d8c4d81ff16ce0809882.png

    好文章,我在看❤️

    展开全文
  • 作者 |码农唐磊来源 |程序猿石头(ID:tangleithu)背景分享一下之前踩的一个坑,背景是这样的:...需要说明的是本地、测试环境、生产环境通过不同的域名访问该外部服务。生产程序调用不通,神奇的是在生产环境通过 ...

    9f33075a64500b6e7f99121c7c446725.gif2276e0cb4db88dcf1da0282792450f7b.png

    作者 | 码农唐磊

    来源 | 程序猿石头(ID:tangleithu)

    197f61c7f59301017252321364bd0c17.png

    背景


    分享一下之前踩的一个坑,背景是这样的:
    我们的项目依赖于一个外部服务,该外部服务提供 REST 接口供我方调用,这是很常见的一个场景。本地和测试环境测试都没有问题,一切就绪上了生产后,程序调用接口就总是网络不通。需要说明的是本地、测试环境、生产环境通过不同的域名访问该外部服务。生产程序调用不通,神奇的是在生产环境通过 curl 等命令却能够正常调用对方接口。
    这就神奇了,唯一不同的就是发起 HTTP 请求的客户端了,估计就是 http客户端有问题了?通过最后排查发现,居然发现了一枚 “JDK 的 bug”,然后石头就提交到了 JDK 的官网……80b7b49dea8b3f5248c8aa393b4272b7.png下面我们就来重现一下这个问题。

    0954ebf96234f72f107a903d9d06abb3.png

    server 端准备


    这里用 Nginx 模拟了一下 上文提到的 REST 服务,假设调用正常返回 "Hello, World\n",Nginx 配置如下:
    server {    listen    80;    server_name test_1.tanglei.name;    location /testurl {        add_header Content-Type 'text/plain; charset=utf-8';        return 200 "Hello, World\n";    }}

    76fab7c4f46964a70647be75c49a5e6b.png

    不同的 client 请求


    下面用不同的 Http client (分别用命令行curl,python的 requests包,和 Java 的 URL 等尝试)去请求。
    • curl 请求,正常。
    [root@VM_77_245_centos vhost]# curl -i "http://test_1.tanglei.name/testurl"HTTP/1.1 200 OKServer: nginxContent-Length: 13Connection: keep-aliveContent-Type: text/plain; charset=utf-8Hello, World[root@VM_77_245_centos vhost]#
    • python requests 正常。
    >>> import requests>>> r = requests.get("http://test_1.tanglei.name/testurl")>>> r.textu'Hello, World\n'
    • Java 的 java.net.URLConnection 同样正常。
    static String getContent(java.net.URL url) throws Exception {    java.net.URLConnection conn = url.openConnection();    java.io.InputStreamReader in = new java.io.InputStreamReader(conn.getInputStream(), "utf-8");    java.io.BufferedReader reader = new java.io.BufferedReader(in);        StringBuilder sb = new StringBuilder();    int c = -1;    while ((c = reader.read()) != -1) {        sb.append((char)c);    }    reader.close();    in.close();    String response = sb.toString();    return response;}
    上面的这个方法 String getContent(java.net.URL url) 传入一个构造好的 java.net.URL 然后 get 请求,并以 String 方式返回 response。
    String srcUrl = "http://test_1.tanglei.name/testurl";java.net.URL url = new java.net.URL(srcUrl);System.out.println("\nurl result:\n" + getContent(url)); // OK
    上面的语句输出正常,结果如下:
    url result:Hello, World
    这就神奇了吧。看看我们程序中用的 httpclient 的实现,结果发现是有用 java.net.URI,心想,这不至于吧,用 URI 就不行了么。换 java.net.URI 试试? (这里不展开讲URL和URI的区别联系了,可以简单的认为URL是URI的一个子集,详细的可参考 URI、URL 和 URN[1], wiki URI[2])直接通过java.net.URI构造,再调用 URI.toURL 得到 URL,调用同样正常。关键的来了,httpclient 源码中用的构造函数是另外一个:
    URI(String scheme, String host, String path, String fragment)Constructs a hierarchical URI from the given components.
    我用这个方法构造URI,会构造失败:
    new java.net.URI(uri.getScheme(), uri.getHost(), uri.getPath(), null) error: protocol = http host = nullnew java.net.URI(url.getProtocol(), url.getHost(), url.getPath(), null) error: Illegal character in hostname at index 11: http://test_1.tanglei.name/testurl
    所以问题发现了,我们的项目中依赖的第三方 httpclient包底层用到了 java.net.URI,恰好在 java.net.URI 中是不允许以下划线(_)作为 hostname 字段的。即 uri.getHost() 和 uri.toURL().getHost() 居然能不相等。

    c8f354e861faf92a3672a13b8a247909.png

    这是 JDK 的 Bug 吧?


    有理由怀疑,这是 JDK 的 Bug 吧?
    从官网上还真找到了关于包含下划线作为hostname的bug提交issue,戳这里 JDK-8132508 : Bug JDK-8029354 reproduces with underscore in hostname[3],然后发现该 "bug" reporter 的情况貌似跟我的差不多,只不过引爆bug的点不一样。该 "bug" reviewer 最后以 "Not an Issue" 关闭,给出的理由是:
    RFC 952 disallows _ underscores in hostnames. So, this is not a bug.
    确实,rfc952[4] 明确明确说了域名只能由 字母 (A-Z)、 数字(0-9)、 减号 (-) 和 点 (.) 组成。那 OK 吧,既然明确规定了 hostname 不能包含下划线,为啥 java.net.URL 确允许呢?造成 java.net.URI 和 java.net.URL 在处理 hostname 时的标准不一致,且本身 java.net.URI 在构造的时候也带了 "有色"眼镜,同一个url字符串 通过静态方法 java.net.URI.create(String) 或者通过带1个参数的构造方法 java.net.URI(String) 都能成功构造出 URI 的实例,但通过带4个参数的构造方法就不能构造了。要知道,在 coding 过程中,尽早反馈异常信息更有利于软件开发持续迭代的过程。我们在开发过程中也应该遵循这一点原则。于是我就去 JDK 官网提交了一个 bug,大意是说 java.net.URI 和 java.net.URL 在处理hostname的时候标准不一致,容易使开发人员埋藏一些潜在的bug,同时也还把这个问题反馈到 stackoverflow[5] 了:
    I am wondering, if hostname with underscore is not valid, why the result is differrent between java.net.URI and java.net.URL? Is it a bug or a feature? Here is the example.java.net.URL url = new java.net.URL("http://test_1.tanglei.name"); System.out.println(url.getHost()); //test_1.tanglei.name java.net.URI uri = new java.net.URI("http://test_1.tanglei.name"); System.out.println(uri.getHost()); //null
    这个 JDK bug issue 详细信息见 JDK-8170265 : underscore is allowed in java.net.URL while not in java.net.URI[6],openjdk JDK-8170265[7]80b7b49dea8b3f5248c8aa393b4272b7.png经过初步 Review,被认为是一个 P4 的 Bug,说的是 java.net.URL 遵循的是 RFC 2396 规范,确实不允许含有下划线的 hostname,java.net.URI 做到了, 而 java.net.URL 没有做到。13591df6d1ee5b5e47f0db50dfd4ef31.png重点来了,然后,却被另外一个 Reviewer 直接个毙了。给出的原因是 java.net.URL 构造方法中,API 文档中说了本来也不会做验证即 No validation of the inputs is performed by this constructor.  在线 api doc 戳这里[8] (可以点连接,进去搜索关键字 "No validation"):e610ad596b59d482aeeeda88023537d3.png当初没有收到及时反馈,就没有来得及怼回去。其实就算 "No validation of the inputs is performed by this constructor." 是合理的,里面也只有3个构造函数有这样的说明,按照这样的逻辑是不是说另外的构造函数有验证呢..... (示例中的默认的构造函数都没有说呀)这里有java.net.URL 的源码[9],看兴趣的同学可以看看。恩,以上就是结论了。不过,反正我自己感觉目前 Java API 关于这里的设计不太合理,欢迎大家讨论。我在SO提问的这个回答[10]比较有意思,哈哈。
    The review is somewhat terse, but the reviewer's point is the URL constructor is behaving in accordance with its specification. Since the specification explicitly states that no validation is performed, this is not a bug in the code. This is indisputable.What he didn't spell out is that fixing this inconsistency (by changing the URL class specification) would break lots of peoples' 20+ year old code Java code. That would be a really bad idea. It can't happen.So ... this inconsistency is a "feature".
    附本文链接:[1] URI、URL 和 URN: https://www.ibm.com/developerworks/cn/xml/x-urlni.html[2]wiki URI: https://en.wikipedia.org/wiki/Uniform_Resource_Identifier[3]JDK-8132508 : Bug JDK-8029354 reproduces with underscore in hostname: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8132508[4]rfc952: https://tools.ietf.org/html/rfc952[5]stackoverflow: https://stackoverflow.com/questions/44226003/conflicts-between-java-net-url-and-java-net-uri-when-dealing-with-hostname-conta[6]JDK-8170265 : underscore is allowed in java.net.URL while not in java.net.URI: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8170265[7]openjdk JDK-8170265: https://bugs.openjdk.java.net/browse/JDK-8170265[8]在线 api doc 戳这里: https://docs.oracle.com/javase/8/docs/api/java/net/URL.html[9]这里有java.net.URL 的源码: http://www.docjar.com/html/api/java/net/URL.java.html[10]我在SO提问的这个回答: https://stackoverflow.com/questions/44226003/conflicts-between-java-net-url-and-java-net-uri-when-dealing-with-hostname-conta?answertab=active#tab-to

    997e8c470da223c100811caebea902cd.png

    e20b66649bbd159f114b670a90ccabe7.png

    更多精彩推荐

    从小护士到微软中国总经理,逆风飞扬的“打工皇后”吴士宏的传奇人生

    论一个程序员的“摸鱼”修养 | 每日趣闻

    荣耀与美团合作推出 “共享笔记本”;传腾讯建议推出美国版微信,已被否;Debian 10.6 稳定版发布|极客头条

    秋天的第一杯奶茶该买哪家?Python 爬取美团网红奶茶店告诉你

    还不懂Redis?看完这个故事就明白了!

    区块链+生鲜:杜绝“偷梁换柱”和“以次充好”
    点分享点点赞点在看
    展开全文
  • jdk安装文档说明(记录)
  • jdk说明帮助小文档

    2019-03-25 18:36:14
    JDK10 API文档CHM,全新权威文档jdk10API,错过再等一年,JDK 10.0.1 和 8u171/8u172 已发布,下面分别简单介绍对应的更新说明。需要的朋友可下载试试!
  • win环境下配置jdk说明文档 一、首先下载JDK的最新版本。可以去http://java.sun.com/javase/downloads/index.jsp下载最新版本JDK1.6。一切下载后选择安装路径,例如我选择安装在"c:\Program Files\Java\jdk1.6.0_02...
  • jdk5.0文档说明

    2012-03-08 17:43:52
    帮助更好的了解java 以及java框架 语法 很好的资源 不要错过啊
  • JDK环境变量配置说明文档,全部在压缩包里面,请下载查看
  • jdk帮助文档

    2018-03-14 17:39:55
    这个是java开发的说明文档,里面有可以调用的方法。如果感兴趣。
  • JDK8.0中文版和英文版和JDK6.0中文文档, 带完整的索引和目录,方便查询。
  • 数组工具类 ArrayDemo.java和ArrayTool.java放于同一个文件夹下。 //ArrayDemo.java /* ... 如何制作一个说明书? A:写一个工具类 B;对这个类加入文档注释,如: /** *这是个什么方法 ...

    数组工具类

    ArrayDemo.java和ArrayTool.java放于同一个文件夹下。

    //ArrayDemo.java
    /*
        想要对数组进行操作
    
        如何制作一个说明书?
            A:写一个工具类
            B;对这个类加入文档注释,如:
                    /**
                    *这是个什么方法
                    *@param 参数1 解释参数
                    *@param 参数2 解释..
                    *return 解释
                    */
    /*      C: 用工具解析文档注释
                    javadoc工具
            D: 格式
                    javadoc -d 目录 -author -version ArrayTool.java
                    目录:为输出目录。如命名为doc,且为当前路径下。没有的话,会自己创建
    
            帮助文档报错1:找不到可以文档化的公共或受保护的类:告诉我们类的权限不够
                            解决:加个public: public class ArrayTool{}
                    报错2:java.lang.IllegalArgumentException
                            解决:把classpath相对路径设置成绝对路径,不出现%JAVA_HOME%
    
    */
    
    
    //测试类
    class ArrayDemo{
        public static void main(String[] args){
    
            int[] arr={22,33,44,55,66};
    
            ArrayTool.printArray1(arr);
    
            int max=ArrayTool.getMax(arr);
            System.out.println("max is "+max);
    
            int index=ArrayTool.getIndex(arr, 33);
            System.out.println("Value is number"+(index+1));
    
        }
    }
    
    //ArrayTool.java 写数组工具类ArrayTool,加了文档注释
    
    /**
    *这是针对数组进行操作的工具类
    *@author 元气满满晨
    *@version V1.0
    */
    
    public class ArrayTool{
    
        /**
        *这是私有构造
        */
        private ArrayTool(){}
    
        /**
        *这是遍历数组的方法。遍历后的格式是:元素1-元素2-元素3...
        *@param arr 这是要被遍历的数组
        */
        public static void printArray1(int[] arr){
            for(int i=0; i<arr.length; ++i){
                if(i==arr.length-1){
                    System.out.println(arr[i]);
                }
                else
                    System.out.print(arr[i]+"-");
            }
        }
    
        /**
        *这是获取数组中最大元素的方法。
        *@param arr 这是要获取最大值得数组
        *@return 返回数组中的最大值
        */
        public static int getMax(int[] arr){
            int max= arr[0];
            for(int i=1; i<arr.length; ++i){
                if(arr[i]>max){
                    max=arr[i];
                }
            }
            return max;
        }
    
        /**
        *获取指定元素在数组中第一次出现的方法。若数组中不存在该元素,返回-1
        *@param arr 被搜索的数组
        *@param value 要找的元素
        *@return 返回元素在数组中的索引。若数组中不存在该元素,返回-1
        */
        public static int getIndex(int[] arr, int value){
            int index=-1;
            for(int i=0; i<arr.length; ++i){
                if(arr[i]==value){
                    index=i;
                    break;
                }
            }
            return index;
        }
    }
    

    用javadoc工具解析文档注释

    格式:javadoc -d 目录 -author -version ArrayTool.java
    目录表示输出目录。如命名为doc,且为当前路径下。没有的话,会自己创建


    使用文档说明书

    人家只提供给你class文件(ArrayTool.class),不给你源码。
    那么怎么用?
    我们可以:
    根据说明书里index.html文件使用ArrayTool工具类。

    使用jdk帮助文档

    1:看包
    java.lang包下的类不需要导入,其他的全部需要导入。
            如,Scanner类要导入:java.util.Scanner
                Math类在java.lang包下不需要导
    2:再简单的看看类的解释和说明,别忘了看看该类的版本
    3:看类的结构
        成员变量    字段摘要    
        构造方法    构造方法摘要 
        成员方法    方法摘要
    4:学习构造方法    
        A:有构造方法 就创建对象
        B:没有构造方法    成员可能都是静态的
    5:看成员方法
        A:左边
            是否静态:如果静态,可以通过类名调用
            返回值类型:人家返回什么,你就用什么接收。
        B:右边
            看方法名:方法名称不要写错
            参数列表:人家要什么,你就给什么;人家要几个,你就给几个
    
    展开全文
  • Linux下安装java的jar包的运行环境,jdk的安装包与说明文档,运行命令 nohup java -jar xxx.jar &
  • jdk1.7 说明帮助文档, 不是主程序

    热门讨论 2011-10-17 09:52:31
    jdk1.7 说明帮助文档, 不是主程序
  • 该资源包括 jdk1.8经典版本 windows平台安装包 纯绿色 和 jdk1.8 中文说明书 高清版本
  • Java 多版本环境(Nginx Tomcat JDK MySql)说明文档
  • jdk+tomcat+mysql配置说明文档
  • CPU占用过高问题排查,java应用某台机器cpu比较高的情况,而且重启后基本上都会恢复正常。
  • Java JDK 5-JDK12文档导航【持续更新】

    千次阅读 2019-04-02 14:59:23
    笔记1:这里说明了为什么在JDK6-JDK8中 JVM配置里面是以-server 或-client开头的来区分客户端和服务端,而之后的版本去掉了虚拟机的区分配置。 https://docs.oracle.com/en/java/javase/index.html 目录 JDK12 ...

    最近总觉得去查询JDK各个版本之前的差异和JVM配置上的异同不是很方便,特整理贴于此处。

    笔记1:这里说明了为什么在JDK6-JDK8中 JVM配置里面是以-server 或-client开头的来区分客户端和服务端,而之后的版本去掉了虚拟机的区分配置。

    https://docs.oracle.com/en/java/javase/index.html

    目录

    JDK12

    Overview

    Tools

    Language and Libraries

    Specifications

    Security

    HotSpot Virtual Machine

    Manage and Troubleshoot

    Client Technologies

    JDK11

    Overview

    Tools

    Language and Libraries

    Specifications

    Security

    HotSpot Virtual Machine

    Manage and Troubleshoot

    Client Technologies

    JDK10

    Overview

    Tools

    Language and Libraries

    Specifications

    Security

    HotSpot Virtual Machine

    Manage and Troubleshoot

    Deploy

    Client Technologies

    JDK9

    Get Started

    Tools

    Language

    Specifications

    Core Libraries

    Security

    HotSpot Virtual Machine

    Manage and Troubleshoot

    Deploy

    Client Technologies

    JDK8

    About Java SE 8

    Download and Install

    Write Your First Application

    Learn the Language

    Monitor and Troubleshoot

    HotSpot Virtual Machine

    Deploy

    Reference

    Release Notes

    JDK7

    JDK6

    JDK5


    JDK12

    本章介绍Java虚拟机(JVM)的实现以及Java HotSpot技术的主要功能:

    •     自适应编译器:标准解释器用于启动应用程序。应用程序运行时,将分析代码以检测性能瓶颈或热点。 Java HotSpot VM编译代码的性能关键部分以提高性能,但不编译很少使用的代码(大多数应用程序)。 Java HotSpot VM使用自适应编译器来决定如何使用内联等技术优化编译代码。
    •     快速内存分配和垃圾收集:Java HotSpot技术为对象和快速,高效,最先进的垃圾收集器提供快速内存分配。
    •     线程同步:Java HotSpot技术提供了一种线程处理功能,旨在扩展以用于大型共享内存多处理器服务器。


    在Oracle Java Runtime Environment(JRE)8及更早版本中,JVM的不同实现(客户端VM,服务器VM和最小VM)支持常用作客户端,服务器和嵌入式系统的配置。由于大多数系统现在可以利用服务器VM,因此Oracle Java运行时环境(JRE)9仅提供该VM实现。

    Overview

    Tools

    Language and Libraries

    Specifications

    Security

    HotSpot Virtual Machine

    Manage and Troubleshoot

    Client Technologies

    JDK11

    本章介绍Java虚拟机(JVM)的实现以及Java HotSpot技术的主要功能:

    •     自适应编译器:标准解释器用于启动应用程序。应用程序运行时,将分析代码以检测性能瓶颈或热点。 Java HotSpot VM编译代码的性能关键部分以提高性能,但不编译很少使用的代码(大多数应用程序)。 Java HotSpot VM使用自适应编译器来决定如何使用内联等技术优化编译代码。
    •     快速内存分配和垃圾收集:Java HotSpot技术为对象和快速,高效,最先进的垃圾收集器提供快速内存分配。
    •     线程同步:Java HotSpot技术提供了一种线程处理功能,旨在扩展以用于大型共享内存多处理器服务器。


    在Oracle Java Runtime Environment(JRE)8及更早版本中,JVM的不同实现(客户端VM,服务器VM和最小VM)支持常用作客户端,服务器和嵌入式系统的配置。由于大多数系统现在可以利用服务器VM,因此Oracle Java运行时环境(JRE)9仅提供该VM实现。

    Overview

    Tools

    Language and Libraries

    Specifications

    Security

    HotSpot Virtual Machine

    Manage and Troubleshoot

    Client Technologies

    JDK10

    本章介绍Java虚拟机(JVM)的实现以及Java HotSpot技术的主要功能:

    •     自适应编译器:标准解释器用于启动应用程序。应用程序运行时,将分析代码以检测性能瓶颈或热点。 Java HotSpot VM编译代码的性能关键部分以提高性能,但不编译很少使用的代码(大多数应用程序)。 Java HotSpot VM使用自适应编译器来决定如何使用内联等技术优化编译代码。
    •     快速内存分配和垃圾收集:Java HotSpot技术为对象和快速,高效,最先进的垃圾收集器提供快速内存分配。
    •     线程同步:Java HotSpot技术提供了一种线程处理功能,旨在扩展以用于大型共享内存多处理器服务器。


    在Oracle Java Runtime Environment(JRE)8及更早版本中,JVM的不同实现(客户端VM,服务器VM和最小VM)支持常用作客户端,服务器和嵌入式系统的配置。由于大多数系统现在可以利用服务器VM,因此Oracle Java运行时环境(JRE)9仅提供该VM实现。

    Overview

    Tools

    Language and Libraries

    Specifications

    Security

    HotSpot Virtual Machine

    Manage and Troubleshoot

    Deploy

    Client Technologies

    JDK9

    本章介绍Java虚拟机(JVM)的实现以及Java HotSpot技术的主要功能:

    •     自适应编译器:标准解释器用于启动应用程序。应用程序运行时,将分析代码以检测性能瓶颈或热点。 Java HotSpot VM编译代码的性能关键部分以提高性能,但不编译很少使用的代码(大多数应用程序)。 Java HotSpot VM使用自适应编译器来决定如何使用内联等技术优化编译代码。
    •     快速内存分配和垃圾收集:Java HotSpot技术为对象和快速,高效,最先进的垃圾收集器提供快速内存分配。
    •     线程同步:Java HotSpot技术提供了一种线程处理功能,旨在扩展以用于大型共享内存多处理器服务器。


    在Oracle Java Runtime Environment(JRE)8及更早版本中,JVM的不同实现(客户端VM,服务器VM和最小VM)支持常用作客户端,服务器和嵌入式系统的配置。由于大多数系统现在可以利用服务器VM,因此Oracle Java运行时环境(JRE)9仅提供该VM实现。

    Get Started

     

    Tools

    Language

    Specifications

    Core Libraries

    Security

    HotSpot Virtual Machine

    Manage and Troubleshoot

    Deploy

    Client Technologies

     

    JDK8

    JDK提供Java虚拟机(VM)的一个或多个实现:

    •     在通常用于客户端应用程序的平台上,JDK附带了一个名为Java HotSpot Client VM(客户端VM)的VM实现。调整客户端VM以减少启动时间和内存占用。启动应用程序时,可以使用-client命令行选项调用它。
    •     在所有平台上,JDK都附带了一个名为Java HotSpot Server VM(服务器VM)的Java虚拟机实现。服务器VM旨在实现最高的程序执行速度。启动应用程序时,可以使用-server命令行选项调用它。


    Java HotSpot技术的一些功能,对于两种VM实现都是通用的,如下所示。

    •     自适应编译器 - 使用标准解释器启动应用程序,但在运行时会对代码进行分析,以检测性能瓶颈或“热点”。 Java HotSpot VM编译代码中性能关键部分以提高性能,同时避免不必要的编译很少使用的代码(大多数程序)。 Java HotSpot VM还使用自适应编译器来动态决定如何使用内嵌等技术优化编译代码。编译器执行的运行时分析允许它消除猜测,确定哪些优化将产生最大的性能优势。
    •     快速内存分配和垃圾收集 - Java HotSpot技术为对象提供快速内存分配,并提供快速,高效,最先进的垃圾收集器选择。
    •     线程同步 - Java编程语言允许使用多个并发的程序执行路径(称为“线程”)。 Java HotSpot技术提供了一种线程处理功能,旨在轻松扩展以用于大型共享内存多处理器服务器。

    About Java SE 8

    Download and Install

    Write Your First Application

    Learn the Language

    Monitor and Troubleshoot

    HotSpot Virtual Machine

    Deploy

    Reference

    Release Notes

     

    JDK7

    JDK™提供Java™虚拟机(VM)的一个或多个实现:

    •     在通常用于客户端应用程序的平台上,JDK附带一个名为Java HotSpot™客户端VM(客户端VM)的VM实现。调整客户端VM以减少启动时间和内存占用。启动应用程序时,可以使用-client命令行选项调用它
    •     在所有平台上,JDK都附带了一个名为Java HotSpot Server VM(服务器VM)的Java虚拟机实现。服务器VM旨在实现最高的程序执行速度。启动应用程序时,可以使用-server命令行选项调用它

    Java HotSpot技术的一些功能,对于两种VM实现都是通用的,如下所示。

    •     自适应编译器 - 使用标准解释器启动应用程序,但在运行时会对代码进行分析,以检测性能瓶颈或“热点”。 Java HotSpot VM编译代码中性能关键部分以提高性能,同时避免不必要的编译很少使用的代码(大多数程序)。 Java HotSpot VM还使用自适应编译器来动态决定如何使用内嵌等技术优化编译代码。编译器执行的运行时分析允许它消除猜测,确定哪些优化将产生最大的性能优势。
    •     快速内存分配和垃圾收集 -  Java HotSpot技术为对象提供快速内存分配,并提供快速,高效,最先进的垃圾收集器选择。
    •     线程同步 -  Java编程语言允许使用多个并发的程序执行路径(称为“线程”)。 Java HotSpot技术提供了一种线程处理功能,旨在轻松扩展以用于大型共享内存多处理器服务器。

     

    JDK   Java Language
    Java Language
     
    Tools &
    Tool APIs
    java javac javadoc jar javap JPDA
    JConsole Java VisualVM JMC JFR Java DB Int'l JVM TI
    IDL Deploy Security Troubleshoot Scripting Web Services RMI
    JRE Deployment
    Java Web Start Applet / Java Plug-in
    User Interface
    Toolkits
    JavaFX
    Swing Java 2D AWT Accessibility
    Drag and Drop Input Methods Image I/O Print Service Sound
    Java SE
    API
    Integration
    Libraries
    IDL JDBC JNDI RMI RMI-IIOP Scripting
    Other Base
    Libraries
    Beans Int'l Support Input/Output JMX
    JNI Math Networking Override Mechanism
    Security Serialization Extension Mechanism XML JAXP
    lang and util
    Base Libraries
    lang and util Collections Concurrency Utilities JAR
    Logging Management Preferences API Ref Objects
    Reflection Regular Expressions Versioning Zip Instrumentation
    Java Virtual Machine
    Java HotSpot VM
     

    JDK6

    DKTM提供JavaTM虚拟机(VM)的一个或多个实现:

    •         在通常用于客户端应用程序的平台上,JDK附带一个名为Java HotSpotTM客户端VM(客户端VM)的VM实现。调整客户端VM以减少启动时间和内存占用。启动应用程序时,可以使用-client命令行选项调用它。
    •         在所有平台上,JDK都附带了一个名为Java HotSpot Server VM(服务器VM)的Java虚拟机实现。服务器VM旨在实现最高的程序执行速度。启动应用程序时,可以使用-server命令行选项调用它。


        Java HotSpot技术的一些功能,对于两种VM实现都是通用的,如下所示。

    •         自适应编译器 - 使用标准解释器启动应用程序,但在运行时会对代码进行分析,以检测性能瓶颈或“热点”。 Java HotSpot VM编译代码中性能关键部分以提高性能,同时避免不必要的编译很少使用的代码(大多数程序)。 Java HotSpot VM还使用自适应编译器来动态决定如何使用内嵌等技术优化编译代码。编译器执行的运行时分析允许它消除猜测,确定哪些优化将产生最大的性能优势。
    •         快速内存分配和垃圾收集 - Java HotSpot技术为对象提供快速内存分配,并提供快速,高效,最先进的垃圾收集器选择。
    •         线程同步 - Java编程语言允许使用多个并发的程序执行路径(称为“线程”)。 Java HotSpot技术提供了一种线程处理功能,旨在轻松扩展以用于大型共享内存多处理器服务器。
     
     
    JDK   Java Language
    Java Language
    ` Tools &
    Tool APIs
    java javac javadoc apt jar javap JPDA JConsole Java VisualVM Java DB
    Security Int'l RMI IDL Deploy Monitoring Troubleshoot Scripting JVM TI
    JRE RIAs
      Java Web Start Applet / Java Plug-in
    User Interface
    Toolkits
    AWT Swing Java 2D
    Accessibility Drag n Drop Input Methods Image I/O Print Service Sound
      Java SE
    API
    Integration
    Libraries
    IDL JDBC JNDI RMI RMI-IIOP Scripting
    Other Base
    Libraries
    Beans Intl Support Input/Output JMX JNI Math
    Networking Override Mechanism Security Serialization Extension Mechanism XML JAXP
    lang and util
    Base Libraries
    lang and util Collections Concurrency Utilities JAR Logging Management
    Preferences API Ref Objects Reflection Regular Expressions Versioning Zip Instrumentation
    Java Virtual
    Machine
    Java Hotspot Client and Server VM


    JDK5

     

    Search the Documentation Location    

     

    Search the online documentation website

    New to the Java Platform?

    See the New-to-JavaTM Programming Center. website

    General Information

    Readme, Overview, Changes
    README website
    New Features and Enhancements docs
    Release Notes website
    Version 5.0 or 1.5.0? docs
     
    Installation Instructions
    Installation Notes
    System Configurations
    website
     
    Compatibility
    Version Compatibility with Previous Releases website
     
    Bugs
    Fixed and Known Bugs website
    Submitting a Bug Report website
     
    Contacts
    Contacting Java Software docs
     
    Releases and Downloads
    JDK Download Page website
    Java Software Home Page website
     
    Legal Notices
    Documentation Redistribution Policy website
    Copyright and License Terms for Documentation docs

     

    API & Language Documentation

     

    Java 2 Platform API Specification   (NO FRAMES) docs
     
    Note About sun.* Packages website
     
    The Java Language Specification   (DOWNLOAD) website
     
    The Java Virtual Machine Specification   website


    Guide to Features - Java Platform
    Design specs, functional specs, user guides, tutorials and demos.
    You can Download PDF versions of some docs.

     

    J2SE Overview docs
    New Features and Enhancements docs

     

     

     

     

    Java Language
    Java Programming Language docs
    Virtual Machine
    Virtual Machine docs
    Base Libraries
    java.lang, java.util Packages
    Language and Utility Packages docs
    Monitoring and Management docs
    Package Version Identification docs
    Reference Objects docs
    Reflection docs
    Collections Framework docs
    Concurrency Utilities docs
    Java Archive (JAR) Files docs
    Zip Files docs
    Logging docs
    Regular Expressions docs
    Preferences docs
    Other packages
    Math docs
    New I/O docs
    I/O docs
    Object Serialization docs
    Networking docs
    Security docs
    Internationalization docs
    JavaBeansTM Component API docs
    Java Management Extensions (JMX) docs
    XML (JAXP) docs
    Java Native Interface (JNI) docs
    Extension Mechanism docs
    Endorsed Standards Override Mechanism docs
    Integration Libraries
    Java Database Connectivity (JDBCTM) docs
    Java IDL docs
    Java Naming and Directory InterfaceTM (JNDI) docs
    Remote Method Invocation (RMI) docs
    RMI-IIOP docs
    User Interface Libraries
    2D Graphics and Imaging docs
    Accessibility docs
    Abstract Window Toolkit (AWT) docs
    Drag-and-Drop Data Transfer docs
    Image I/O docs
    Input Method Framework docs
    Print Service docs
    Sound docs
    Project Swing Components docs
    Deployment
    General Deployment docs
    Java Plug-in docs
    Java Web Start docs
    Tool Specifications
    Annotation Processing Tool docs
    Javadoc Tool docs
    Java Platform Debugger Architecture (JPDA) docs
    Java Debug Interface (JDI) docs
    Java Debug Wire Protocol (JDWP) docs
    JVMTM Tool Interface (JVM TI) (replaces JVMPI and JVMDI) docs


    JDK Tools and Utilities
    Reference documentation for the JDK tools and utilities.

     

    JDK Tool and Utility Documentation
           Including Troubleshooting and Diagnostic Information
    docs
    J2SE 5.0 Trouble-Shooting and Diagnostic Guide
            Tools, options, and other items for use in analyzing problems
    web


    Demos, Samples, Tutorials, Training, and Reference
    Sample code for applets and applications, training, courses, and tutorials for the JDK.

     

    Demonstration Applets and Applications
            Included in JDK and on java.sun.com
    docs
     
    Java Web Start Samples
            Included in JDK
    docs
     
    Java Examples
            Java Developers Almanac
    website
     
    The Java Tutorial
            An example-filled guide to the Java programming language and core APIs.
    website
     
    Effective Java
            Best selling guide about best programming practices.
    website
     
    Training for the Java programming language
            Directory of various training resources.
    website
     
    On-Line Courses for the Java Programming Language
            Courses from the Java Developer ConnectionSM.
    website
     
    The Java Class Libraries
            Code examples for the Java 2 Platform API:
    1.2 Supplement
    1.1 Packages: java.lang, java.net, java.text, java.util, java.math
    1.1 Packages: java.applet, java.awt, java.beans
    website
     
    The Java FAQ
            Frequently asked questions about Java and the JDK.
    website
     
    Code Conventions for the Java Programming Language
            Standards and styles for coding Java programs.
    website
     
    Java Documentation in HTMLHelp and WinHelp Formats
            For Windows users.
    website
    展开全文
  • jdk+tomcat安装部署说明文档 1. 准备工作 1.1 下载JDK(Linux版)安装文件:jdk-7u21-linux-x64.tar.gz,拷贝到Linux Server目录:/opt 1.2 下载Tomcat(Linux版)安装文件:apache-tomcat-7.0.40.tar.gz,拷贝到...
  • WebLogic修改JDK及数据库驱动说明文档 Date:2017-12-06 一. 修改weblogic指向自定义的jdk版本 1. 安装jdk版本(如jdk 1.7),...
  • JDK帮助文档格式 ...在整个类前面添加的说明文档为 /** Title:类名 Description:类的相关功能描述 @author 张三 @version 1.0 */ 在每个构造方法和成员方法前添加的说明文档 /** 方法
  • 如何使用 jdk帮助文档

    2016-07-23 16:20:07
    1:打开帮助文档 2:点击显示,找到索引,看到输入框 3:知道你要找谁?以Scanner举例 4:在输入框里面输入Scanner,然后回车 5:看包 java.lang包下的类不需要导入,其他的全部需要导入。 要导入: java.util....
  • jdk1.8 中文文档

    2019-03-14 15:38:50
    jdk1.8中文版,如果文档被锁,请右键属性解锁,详细情况请看使用说明
  • jdk1.8api文档

    2018-09-04 14:09:51
    学习java辅助文档离线版,可以在没网的情况下查询java的类 接口 方法说明等 学习java必备文档神器
  • linux下jdk1.6,apache,tomcat7,mysql等常用软件的安装说明文档
  • Java jdk1.8帮助文档

    2019-01-03 14:00:38
    该资源对于jdk 1.8的API进行了详细说明,有助于开发人员迅速掌握jdk 1.8的AIP使用。
  • 文档说明仅供个人学习使用,切不可商用!! 本文档说明仅供个人学习使用,切不可商用!! 本文档说明仅供个人学习使用,切不可商用!! 提取码:scpv ...
  • JDK1.8 中文版文档

    2018-01-25 17:10:24
    最新版JDK1.8中文说明文档,里面详细翻译英文文档,不熟悉英文的同学可以参考看,希望能帮助大家!!
  • JDK9开发接口文档,并且有中文说明.很不错,分也不要多了,大家下载就行
  • JDK 1.8 中文API文档

    2018-02-23 15:50:26
    JDK 1.8 中文API文档 还有使用说明,对于初学者和中高级工程师都实用。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,348
精华内容 939
关键字:

jdk说明文档