<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java 语言基础 on ClearSec Wiki</title><link>https://www.clearsec.org/wikis/skills/languages/java/</link><description>Recent content in Java 语言基础 on ClearSec Wiki</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://www.clearsec.org/wikis/skills/languages/java/index.xml" rel="self" type="application/rss+xml"/><item><title>Introduction and Installation</title><link>https://www.clearsec.org/wikis/skills/languages/java/introduction-and-installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/languages/java/introduction-and-installation/</guid><description>&lt;h1 id="introduction--installation"&gt;Introduction &amp;amp; Installation&lt;/h1&gt;
&lt;h2 id="前置知识"&gt;前置知识&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;无。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introduction-to-java-platform"&gt;Introduction to Java Platform&lt;/h2&gt;
&lt;h3 id="what-is-java"&gt;What is Java&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Java 是一门&lt;em&gt;高层次&lt;/em&gt;，&lt;em&gt;强类型&lt;/em&gt;，&lt;em&gt;编译型&lt;/em&gt;，&lt;em&gt;基于类的面向对象&lt;/em&gt;的&lt;em&gt;通用&lt;/em&gt;编程语言。&lt;/li&gt;
&lt;li&gt;Java 保证&lt;em&gt;一次编写，到处运行 (write once, run anywhere)&lt;/em&gt;，即Java编译出的字节码文件可以保证在任何系统上的 Java 运行时环境运行。&lt;/li&gt;
&lt;li&gt;Java 保证向前兼容性。&lt;/li&gt;
&lt;li&gt;Java 是一门&lt;em&gt;类 C 语言&lt;/em&gt;。&lt;/li&gt;
&lt;li&gt;从 1995 年开始，历史悠久的 Java 平台积累了兼具广度和可靠性的生态系统和开发者社区。&lt;/li&gt;
&lt;li&gt;Java 至今仍然是最流行、最知名、使用最广的编程语言之一。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="history-of-java"&gt;History of Java&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;1991, &lt;em&gt;James Gosling&lt;/em&gt;, C++ and Oak&lt;/li&gt;
&lt;li&gt;1995, &lt;em&gt;Sun Microsystems&lt;/em&gt; and Java 1.0&lt;/li&gt;
&lt;li&gt;1996, Dynamic Web &amp;amp; Java Applets&lt;/li&gt;
&lt;li&gt;2006, Java EE, Java SE, Java ME&lt;/li&gt;
&lt;li&gt;2007, Java visual machine is opened under GPL&lt;/li&gt;
&lt;li&gt;2009, Sunset of the &lt;em&gt;Sun&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;2014, Java 8 reached General Availability&lt;/li&gt;
&lt;li&gt;2018, Java 10 started to adopt Time-Based Release Versioning&lt;/li&gt;
&lt;li&gt;Today, Java 17 is current LTS, Java 18 GA, Java 19 RDP 2&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="why-java"&gt;Why Java&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Easy!&lt;/li&gt;
&lt;li&gt;Cross-Platform&lt;/li&gt;
&lt;li&gt;Rich and Reliable Ecosystem&lt;/li&gt;
&lt;li&gt;Forward evolution with backwards compatibility&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="why-not--java"&gt;Why NOT Java&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Performance ?&lt;/li&gt;
&lt;li&gt;相对贫弱的语法特性削弱了对程序员的吸引力。&lt;/li&gt;
&lt;li&gt;JavaScript, Python 等语言的流行和其生态系统的逐步完善。&lt;/li&gt;
&lt;li&gt;Go, Rust 等新星语言的涌现。&lt;/li&gt;
&lt;li&gt;Kotlin, Scala, Clojure, Groovy 等 JVM 平台语言提供了利用 Java 生态系统的其他选项:
&lt;ul&gt;
&lt;li&gt;Kotlin 获得了 Google 的青睐和 Android 平台的优先支持。&lt;/li&gt;
&lt;li&gt;Scala 极为灵活的语法和强大的表达能力长期以来收到科学计算领域和分布式数据处理领域的欢迎。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="some-terms-of-java"&gt;Some Terms of Java&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;JDK, Java Develop Kit, Java 开发工具包&lt;/li&gt;
&lt;li&gt;JRE, Java Runtime Environment, Java 运行时环境&lt;/li&gt;
&lt;li&gt;JVM, Java Virtual Machine, Java 虚拟机&lt;/li&gt;
&lt;li&gt;OpenJDK, 开源 Java 平台实现的合作组织&lt;/li&gt;
&lt;li&gt;LTS，Long Term Support, 长期支持版本&lt;/li&gt;
&lt;li&gt;IDE, Integrated Development Environment, 集成开发环境&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="installation-of-jdk--intellij-idea"&gt;Installation of JDK &amp;amp; IntelliJ IDEA&lt;/h2&gt;
&lt;h3 id="eclipse-adoptium"&gt;Eclipse Adoptium&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://adoptium.net/"&gt;Eclipse Adoptium &lt;/a&gt; 是一个提供一大堆平台和一大堆不同版本的 JDK 的网站。&lt;/li&gt;
&lt;li&gt;OpenJDK 顾名思义，是开源的，因此很多公司和组织都提供了自己的构建版本。&lt;/li&gt;
&lt;li&gt;2017年启动的 AdoptOpenJDK 项目是第一个提供一大堆平台和一大堆不同版本的JDK的网站，同时也提供了多种平台的构建和测试平台。&lt;/li&gt;
&lt;li&gt;Eclipse Adoptium 是 AdoptOpenJDK 的继任者 。&lt;/li&gt;
&lt;li&gt;它们提供的 OpenJDK 分发版称为 Eclipse Temurin 。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="java-version"&gt;Java Version&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;作为最新的&lt;em&gt;长期支持版本 LTS&lt;/em&gt;，&lt;strong&gt;Java 17&lt;/strong&gt; 将成为本次课程的目标平台。Java 平台保证前向兼容，因此更新版本的 Java 支持本课程讲的绝大多数内容。&lt;/li&gt;
&lt;li&gt;Java 的语法特性和版本绑定，大版本的后续更新大多都是 bug 修复和性能增强。但是 Java7-9 的发布时间分别是 2011-2014-2017，以多年为跨度的更新使 Java 语法特性的进化严重落后于时代。&lt;/li&gt;
&lt;li&gt;因此，从 &lt;em&gt;[&lt;a href="https://openjdk.org/jeps/322"&gt;JEP 322&lt;/a&gt;, Java10]&lt;/em&gt; 开始，采用新的根据固定时间的新版本发布计划和命名方案。Java 将会&lt;em&gt;每六个月&lt;/em&gt;固定发布新版本，用于快速滚动开发、预览、发布新语法特性和修改。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="install-jdk-eclipse-temurin"&gt;Install JDK &lt;em&gt;(Eclipse Temurin)&lt;/em&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;所有系统通用: 进网站，点下载，双击安装包。&lt;/p&gt;</description></item><item><title>Basic Language Structure</title><link>https://www.clearsec.org/wikis/skills/languages/java/basic-language-structure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/languages/java/basic-language-structure/</guid><description>&lt;h1 id="basic-language-structure"&gt;Basic Language Structure&lt;/h1&gt;
&lt;h2 id="前置知识"&gt;前置知识&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;无。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="comments-注释"&gt;Comments 注释&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// This is a one-line comment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * This is a multi-line comment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * This is JavaDoc
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="variable-declare--assignment--data-types-变量声明赋值数据类型"&gt;Variable Declare &amp;amp; Assignment / Data types 变量声明、赋值、数据类型&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1L&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;E&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;E&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;java&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;java&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;错误&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;不兼容的类型&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;从double转换到float可能会有损失&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^-^&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;0f&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;jshell&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;整数类型: &lt;code&gt;byte&lt;/code&gt; &lt;code&gt;short&lt;/code&gt; &lt;code&gt;int&lt;/code&gt; &lt;code&gt;long&lt;/code&gt;分别为 1、2、4、8 字节&lt;em&gt;有符号&lt;/em&gt;整数。&lt;/p&gt;</description></item><item><title>Fundamental OOP</title><link>https://www.clearsec.org/wikis/skills/languages/java/fundamental-oop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/languages/java/fundamental-oop/</guid><description>&lt;h1 id="fundamental-oop"&gt;Fundamental OOP&lt;/h1&gt;
&lt;h2 id="前置知识"&gt;前置知识&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;基本的 Java 语法。&lt;/li&gt;
&lt;li&gt;（非必须）C++、Python 等语言的 OOP 语法。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="basic-terms-used-in-oop"&gt;Basic Terms used in OOP&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;OOP&lt;/em&gt; 面向对象编程。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;object&lt;/em&gt; 对象: 数据和行为的集合。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;class&lt;/em&gt; 类: 定义对象的模版。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="object-对象"&gt;Object 对象&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;object&lt;/em&gt;是数据和行为的集合。&lt;/li&gt;
&lt;li&gt;数据一般称为 &lt;em&gt;member variable&lt;/em&gt;, &lt;em&gt;field&lt;/em&gt;, &lt;em&gt;state&lt;/em&gt;, &lt;em&gt;data&lt;/em&gt; 等。&lt;/li&gt;
&lt;li&gt;行为一般称为 &lt;em&gt;method&lt;/em&gt;, &lt;em&gt;function&lt;/em&gt;, &lt;em&gt;interface&lt;/em&gt;, &lt;em&gt;protocol&lt;/em&gt; 等。&lt;/li&gt;
&lt;li&gt;面向对象编程原语是向&lt;em&gt;对象发送消息&lt;/em&gt;，而不是面向过程编程中的&lt;em&gt;指令跳转&lt;/em&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;发送消息&lt;/em&gt;就应当遵循一定的协议 &lt;em&gt;protocol&lt;/em&gt; ，比如发送消息的类型和消息的内容，这表现为方法的名字和参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="class-类"&gt;Class 类&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;class&lt;/em&gt; 是 &lt;em&gt;object&lt;/em&gt; 的模版，是 &lt;em&gt;object&lt;/em&gt; 的&lt;em&gt;类型&lt;/em&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;class&lt;/em&gt; 定义了 &lt;em&gt;object&lt;/em&gt; 所拥有的数据和行为，而 &lt;em&gt;object&lt;/em&gt; 包含了具体的数据值和对应行为的真正执行者 。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;class&lt;/em&gt; 本身可以拥有一些数据和行为。&lt;/li&gt;
&lt;li&gt;面向对象编程的基本流程为:
&lt;ol&gt;
&lt;li&gt;设计类 &lt;code&gt;class Car { /* ... */ }&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;创建/实例化对象 &lt;code&gt;var myCar = new Car()&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;向对象发送消息 &lt;code&gt;myCar.move()&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="oop-in-java"&gt;OOP in Java&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;基本上&lt;/em&gt; 万物皆对象。
&lt;ul&gt;
&lt;li&gt;基本数据类型除外。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Java 使用&lt;em&gt;引用&lt;/em&gt;来控制对象。
&lt;ul&gt;
&lt;li&gt;Java 只有按值传递。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Java 拥有自动内存管理机制。
&lt;ul&gt;
&lt;li&gt;你只需要关系如何&lt;code&gt;new&lt;/code&gt;，而无需担心对象是何时或如何被&lt;code&gt;delete&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;Java 拥有多种优秀的垃圾收集器GC实现。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="基础oop"&gt;基础OOP&lt;/h2&gt;
&lt;p&gt;???+ 关于package&lt;/p&gt;</description></item><item><title>Design Patterns</title><link>https://www.clearsec.org/wikis/skills/languages/java/design-patterns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/languages/java/design-patterns/</guid><description>&lt;h1 id="chapter-3-design-patterns"&gt;Chapter 3 Design Patterns&lt;/h1&gt;
&lt;h2 id="前置知识"&gt;前置知识&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;前两章中介绍的 Java 基本语法以及 OOP 相关语法以及概念。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;???+ 何为设计模式
- &lt;em&gt;设计模式 Design Patterns&lt;/em&gt; 是一套最佳实践，描述了软件开发人员在面临一些一般性问题时使用和总结出的解决方案。
- 1994年， Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides合著了&lt;em&gt;Design Patterns - Elements of Reusable Object-Oriented Software&lt;/em&gt;（《设计模式——可复用面向对象软件的基础》），首次提出了设计模式的概念，并对大多数常见的设计模式进行了分类组织和讨论。这四位作者也被称为&lt;em&gt;四人帮 GoF, Gang of Four&lt;/em&gt;。
- 合理的利用设计模式让代码组织真正的工程化，减少耦合、提升可维护性、提升复用度。
- 本章我会带大家认识一些常见的设计模式，并介绍 Java 标准库中相应的设计范例。&lt;/p&gt;
&lt;details open&gt;
&lt;summary&gt;OOP Principle&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;对接口编程而不是对实现编程。&lt;/li&gt;
&lt;li&gt;组合优先于继承。&lt;/li&gt;
&lt;li&gt;单一职责原则: 类的职责应当尽可能的少而清晰。&lt;/li&gt;
&lt;li&gt;合理使用设计模式，而不要滥用。&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
## Creational Patterns 创造型模式
&lt;p&gt;创造型模式描述了如何创建对象:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Builder&lt;/em&gt; 构建者模式。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Factory Method&lt;/em&gt; 工厂方法模式。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Abstract Factory&lt;/em&gt; 抽象工厂模式。&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Singleton&lt;/em&gt; 单例模式。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="builder-构建者模式"&gt;Builder 构建者模式&lt;/h3&gt;
&lt;p&gt;构建者（英语: Builder）模式通常由一个&lt;em&gt;指导者 Director&lt;/em&gt; 类、一个&lt;em&gt;构造者 Builder&lt;/em&gt; 接口/抽象类和若干个具体构建者实现类组成。
在我们的例子中，&lt;em&gt;Builder&lt;/em&gt; 提供构建其他格式文档所需要的接口:&lt;/p&gt;</description></item><item><title>Advanced Language Feature</title><link>https://www.clearsec.org/wikis/skills/languages/java/advanced-language-feature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.clearsec.org/wikis/skills/languages/java/advanced-language-feature/</guid><description>&lt;h1 id="advanced-language-feature"&gt;Advanced Language Feature&lt;/h1&gt;
&lt;h2 id="前置知识"&gt;前置知识&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;基本 Java 语法。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;???+ &amp;ldquo;关于JEP&amp;rdquo;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;目前，Java 的新特性、功能均需要先提出并起草 JEP（JDK Enhancement Proposals）*草案。在 OpenJDK 社区充分审核、修改、投票后成为正式的、带编号 *JEP* 提案。在开发 *JEP* 对应的功能分支，通过所有平台测试、代码审查后，择期并入下一个发行版本的主分支。本章提到的 *JEP* 都标注了并入的 Java 版本和提案原文连接，便于同学们学习参考。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="switch-expressions-jep361-java14"&gt;Switch Expressions [&lt;a href="https://openjdk.org/jeps/361"&gt;JEP361&lt;/a&gt;, Java14]&lt;/h2&gt;
&lt;p&gt;Switch Expressions [&lt;a href="https://openjdk.org/jeps/361"&gt;JEP361&lt;/a&gt;, Java14] 与传统的&lt;code&gt;switch&lt;/code&gt;不同，使用&lt;code&gt;-&amp;gt;&lt;/code&gt;连接&lt;code&gt;case&lt;/code&gt;子句和具体代码块，并且&lt;code&gt;case&lt;/code&gt;子句可以一次匹配多个，代码块也不需要&lt;code&gt;break&lt;/code&gt;来防止连续执行。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MONDAY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FRIDAY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SUNDAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TUESDAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;THURSDAY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SATURDAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;WEDNESDAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;switch&lt;/code&gt;表达式，顾名思义可以产生表达式的值:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;howMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;one&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;two&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;many&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果需要复杂代码块，使用&lt;code&gt;{}&lt;/code&gt;包围，并使用&lt;code&gt;yield&lt;/code&gt;关键字产生&lt;code&gt;case&lt;/code&gt;子句对应的值:&lt;/p&gt;</description></item></channel></rss>