<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>老猫的博客</title>
  
  
  <link href="https://dclef.icu/atom.xml" rel="self"/>
  
  <link href="https://dclef.icu/"/>
  <updated>2022-09-24T05:17:09.162Z</updated>
  <id>https://dclef.icu/</id>
  
  <author>
    <name>老猫</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>在butterfly主题中添加rss订阅</title>
    <link href="https://dclef.icu/2022/09/24/%E5%9C%A8butterfly%E4%B8%BB%E9%A2%98%E4%B8%AD%E6%B7%BB%E5%8A%A0rss%E8%AE%A2%E9%98%85/"/>
    <id>https://dclef.icu/2022/09/24/%E5%9C%A8butterfly%E4%B8%BB%E9%A2%98%E4%B8%AD%E6%B7%BB%E5%8A%A0rss%E8%AE%A2%E9%98%85/</id>
    <published>2022-09-24T04:48:08.009Z</published>
    <updated>2022-09-24T05:17:09.162Z</updated>
    
    <content type="html"><![CDATA[<h1 id="一、引言"><a href="#一、引言" class="headerlink" title="一、引言"></a>一、引言</h1><p>由于butterfly这个主题并没有明确的说明，但作为一个博主应该要知道如何去设置rss订阅，这里就简单的说明一下</p><h1 id="二、安装rss插件并在主题中设置"><a href="#二、安装rss插件并在主题中设置" class="headerlink" title="二、安装rss插件并在主题中设置"></a>二、安装rss插件并在主题中设置</h1><p>在butterfly的插件推荐中就说明了有hexo的rss插件，叫hexo-generator-feed</p><p>首先先添加插件，这里使用的是npm添加</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">npm</span> install hexo-generator-feed --save</span><br></pre></td></tr></table></figure><p>然后在_config.yml中添加如下配置</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">feed:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">atom</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">atom.xml</span></span><br><span class="line">  <span class="attr">limit:</span> <span class="number">20</span></span><br></pre></td></tr></table></figure><p>实际上官网还说明了一些其他东西，如</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">hub:</span><br><span class="line">content:</span><br><span class="line">content_limit: 140</span><br><span class="line">content_limit_delim: &#x27; &#x27;</span><br><span class="line">order_by: -<span class="attribute">date</span></span><br><span class="line">icon: icon.png</span><br><span class="line">autodiscovery: <span class="literal">true</span></span><br><span class="line">template:</span><br></pre></td></tr></table></figure><ul><li><code>enable</code>: 默认开启可以省略</li><li><code>type</code>: RSS的类型(atom&#x2F;rss2)</li><li><code>path</code>: 文件路径，默认是 atom.xml&#x2F;rss2.xml</li><li><code>limit</code>: 展示文章的数量,使用 0 或则 false 代表展示全部</li><li><code>hub</code>: 如果使用不到可以为空</li><li><code>content</code>: （可选）设置 <code>true</code> 可以在 RSS 文件中包含文章全部内容，默认：false</li><li><code>content_limit</code>: （可选）摘要中使用的帖子内容的默认长度。 仅在内容设置为false且未显示自定义帖子描述时才使用。</li><li><code>content_limit_delim </code>:（可选）如果<strong>content_limit</strong>用于缩短帖子内容，则仅在达到字符限制之前在此分隔符的最后一次出现处剪切。默认不使用。</li><li><code>icon</code>: (可选）自定义图标。默认为主配置中指定的电子邮件头像。</li><li><code>autodiscovery</code>: 添加提要自动发现，默认开启</li><li><code>template </code>: 自定义模板路径。该文件用于生成 xml 文件</li></ul><p>在主题的_config.yml中添加配置</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rss:</span> <span class="string">/atom.xml</span></span><br></pre></td></tr></table></figure><p>这样你后面在用hexo clean &amp;&amp; g生成的时候会在public中生成一个atom.xml文件</p><p>然后在主题中的social settings中添加如下配置</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">fas fa-rss:</span> <span class="string">https://dclef.icu/atom.xml</span></span><br></pre></td></tr></table></figure><p>因为butterfly主题中带有fas图标，所以直接可以使用</p><p>然后进行部署</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">hexo</span> g -d</span><br></pre></td></tr></table></figure><p>设置完成以后如下图</p><p><img src="https://cdn.jsdelivr.net/gh/dclef/CDN/go/day01/rss1.png"></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;一、引言&quot;&gt;&lt;a href=&quot;#一、引言&quot; class=&quot;headerlink&quot; title=&quot;一、引言&quot;&gt;&lt;/a&gt;一、引言&lt;/h1&gt;&lt;p&gt;由于butterfly这个主题并没有明确的说明，但作为一个博主应该要知道如何去设置rss订阅，这里就简单的说明一下&lt;/p&gt;
</summary>
      
    
    
    
    <category term="教程" scheme="https://dclef.icu/categories/%E6%95%99%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>从零开始学go（一）</title>
    <link href="https://dclef.icu/2022/09/22/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%AD%A6go(%E4%B8%80)/"/>
    <id>https://dclef.icu/2022/09/22/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%AD%A6go(%E4%B8%80)/</id>
    <published>2022-09-22T13:00:00.000Z</published>
    <updated>2022-09-22T16:30:35.234Z</updated>
    
    <content type="html"><![CDATA[<h1 id="一、go的简单介绍和安装"><a href="#一、go的简单介绍和安装" class="headerlink" title="一、go的简单介绍和安装"></a>一、go的简单介绍和安装</h1><p>​<mark class="hl-label red">首先本人重新开坑</mark> ，<span class="hide-inline"><button type="button" class="hide-button" style="background-color: #FF7242;color: #fff">查看  </button><span class="hide-content">介于这么久没有进行总结和学习也该问问自己了</span></span></p><h2 id="1-1-介绍"><a href="#1-1-介绍" class="headerlink" title="1.1 介绍"></a>1.1 介绍</h2><p>​go总体来讲就是将c和java的特性给结合和优化所诞生出来的，由Rob Pike（罗伯.派克），Ken Thompson（肯.汤普森）和Robert Griesemer（罗伯特.格利茨默）三位大佬所创造出来的，拥有比较简洁的语法和很好的性能，同时也是编译性语言，而go主要用于web或者游戏服务器，简单来说就是后台，也就是为什么越来越多的公司选择后端都会使用go，而不是繁琐的java。</p><h2 id="1-2-安装"><a href="#1-2-安装" class="headerlink" title="1.2 安装"></a>1.2 安装</h2><p>​安装的sdk实际上直接看官网即可，这里就将安装在windows上。</p><p><img src="https://cdn.jsdelivr.net/gh/dclef/CDN/go/day01/install-go.png"></p><p>Windows 下载的是 .msi 后缀，默认情况下 <strong>.msi</strong> 文件会安装在 <strong>c:\Go</strong> 目录下。你可以去自定义，但是要将go目录添加倒环境变量中，也就是系统变量中的Path路径。安装完成以后，在cmd中输入go version，如果有显示版本证明安装成功。</p><h2 id="1-3-使用vscode安装go插件"><a href="#1-3-使用vscode安装go插件" class="headerlink" title="1.3 使用vscode安装go插件"></a>1.3 使用vscode安装go插件</h2><p>如果你没有梯子的话安装go的扩展是会非常慢的，这点请注意。</p><p><img src="https://cdn.jsdelivr.net/gh/dclef/CDN/go/day01/go-bin.png"></p><h2 id="1-4-编写hello-world"><a href="#1-4-编写hello-world" class="headerlink" title="1.4 编写hello world"></a>1.4 编写hello world</h2><p>​安装完以后看默认文档中的bin是否有这些文件，有就没问题，然后在vscode中的工作文件夹中创建一个名为main.go的文件，写下hello world</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> main</span><br><span class="line"></span><br><span class="line"><span class="comment">//导入一个fmt包</span></span><br><span class="line"><span class="keyword">import</span> <span class="string">&quot;fmt&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//定义一个函数</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">main</span><span class="params">()</span></span> &#123;</span><br><span class="line">    <span class="comment">//打印</span></span><br><span class="line">    fmt.Println(<span class="string">&quot;hello world!&quot;</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然后在vscode的终端中输入go run .&#x2F;main.go</p><p>即可编译成功，如图</p><p><img src="https://cdn.jsdelivr.net/gh/dclef/CDN/go/day01/go-hellowrold.png"></p><h1 id="二、数据类型介绍"><a href="#二、数据类型介绍" class="headerlink" title="二、数据类型介绍"></a>二、数据类型介绍</h1><p>​跟很多语言的数据类型一样，都会int float string 等众多数据类型，如</p><p>int unint byte float32 float64 等等，其中int有负数，unint无负数</p><p>浮点数代码项目中的小数，零值是一个变量的默认值</p><h2 id="2-1-变量"><a href="#2-1-变量" class="headerlink" title="2.1 变量"></a>2.1 变量</h2><p>接下来，将用代码来解释数字类型</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//整数i int类型</span></span><br><span class="line"><span class="keyword">var</span> i <span class="type">int</span> = <span class="number">10</span></span><br><span class="line"><span class="comment">//自动推导变量类型</span></span><br><span class="line"><span class="keyword">var</span> a = <span class="number">10</span></span><br><span class="line"><span class="comment">//定义多个类型</span></span><br><span class="line"><span class="keyword">var</span> (</span><br><span class="line">b <span class="type">int</span> = <span class="number">1</span></span><br><span class="line">c <span class="type">int</span> = <span class="number">2</span></span><br><span class="line">)</span><br><span class="line"><span class="comment">//自动推导多个类型</span></span><br><span class="line"><span class="keyword">var</span> (</span><br><span class="line">j = <span class="number">1</span></span><br><span class="line">k = <span class="number">2</span></span><br><span class="line">)</span><br><span class="line"><span class="comment">//定义浮点类型</span></span><br><span class="line"><span class="keyword">var</span> (</span><br><span class="line">x <span class="type">float32</span> = <span class="number">1.1451491018</span> <span class="comment">//1.1451491</span></span><br><span class="line">y <span class="type">float64</span> = <span class="number">1.1451491018</span> <span class="comment">//1.1451491018</span></span><br><span class="line">)</span><br><span class="line"><span class="comment">//指向i的指针</span></span><br><span class="line">pi := &amp;i <span class="comment">//10</span></span><br></pre></td></tr></table></figure><p>类型实际上是有默认值，如</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> i <span class="type">int</span> <span class="comment">//i的值为0</span></span><br></pre></td></tr></table></figure><p>而如果我们要声明一个变量，实际上还可以进行简化</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">e := <span class="number">10</span> <span class="comment">//int</span></span><br><span class="line">f := <span class="literal">false</span> <span class="comment">//bool</span></span><br><span class="line">g := <span class="string">&quot;世界&quot;</span> <span class="comment">//string</span></span><br></pre></td></tr></table></figure><h2 id="2-2-常量"><a href="#2-2-常量" class="headerlink" title="2.2 常量"></a>2.2 常量</h2><p>​定义一个常量很简单，只需要关键词const即可,但常量一旦定义则不可修改</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//常量</span></span><br><span class="line"><span class="keyword">const</span> name = <span class="string">&quot;常量不可修改&quot;</span></span><br><span class="line">name1 := <span class="string">&quot;简化常量&quot;</span></span><br><span class="line"><span class="comment">//定义多个常量</span></span><br><span class="line"><span class="keyword">const</span> (</span><br><span class="line">one   = <span class="number">1</span></span><br><span class="line">two   = <span class="number">2</span></span><br><span class="line">three = <span class="number">3</span></span><br><span class="line">four  = <span class="number">4</span></span><br><span class="line">)</span><br><span class="line"><span class="comment">//定义多个规律常量</span></span><br><span class="line"><span class="keyword">const</span> (</span><br><span class="line"><span class="comment">//one=(0)+1</span></span><br><span class="line"><span class="comment">//two=(0+1)+1</span></span><br><span class="line"><span class="comment">//three=(0+1+1)+1 以此类推</span></span><br><span class="line">one1 = <span class="literal">iota</span> + <span class="number">1</span></span><br><span class="line">two1</span><br><span class="line">three1</span><br><span class="line">four1</span><br><span class="line">)</span><br></pre></td></tr></table></figure><h2 id="2-3-类型转换"><a href="#2-3-类型转换" class="headerlink" title="2.3 类型转换"></a>2.3 类型转换</h2><p>​类型转换实际上是用的strconv这个包，关于里面的api这里就不必多少了这里就简单的说明一些，代码所示</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//Itoa int类型转为string类型</span></span><br><span class="line">is := strconv.Itoa(i)</span><br><span class="line"><span class="comment">//Atoi string类型转为int类型</span></span><br><span class="line">is2, err := strconv.Atoi(is)</span><br><span class="line"><span class="comment">//简易类型转换</span></span><br><span class="line">i2f := <span class="type">float64</span>(i)</span><br><span class="line">f2i := <span class="type">int</span>(y)</span><br></pre></td></tr></table></figure><h2 id="2-4-strings包"><a href="#2-4-strings包" class="headerlink" title="2.4 strings包"></a>2.4 strings包</h2><p>​strings包也是go官方的api库，跟java中的string包也是类似，这里就写几个api，如下代码所示</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">s1 := <span class="string">&quot;abcdefgh&quot;</span></span><br><span class="line"><span class="comment">//判断s1前缀是否有H</span></span><br><span class="line">fmt.Println(strings.HasPrefix(s1, <span class="string">&quot;h&quot;</span>))</span><br><span class="line"><span class="comment">//在s1中查找字符串</span></span><br><span class="line">fmt.Println(strings.Index(s1, <span class="string">&quot;h&quot;</span>))</span><br><span class="line"><span class="comment">//将s1全部转为大写</span></span><br><span class="line">fmt.Println(strings.ToUpper(s1))</span><br><span class="line"><span class="comment">//判断s1是否有H字符串</span></span><br><span class="line">fmt.Println(strings.Contains(s1, <span class="string">&quot;i&quot;</span>))</span><br></pre></td></tr></table></figure><h1 id="三、条件语句"><a href="#三、条件语句" class="headerlink" title="三、条件语句"></a>三、条件语句</h1><h2 id="3-1-if条件语句"><a href="#3-1-if条件语句" class="headerlink" title="3.1 if条件语句"></a>3.1 if条件语句</h2><p>​首先要说明的是if后面的表达式不需要()，这跟很多语言不同，比如说java，每个条件分支大括号是必须的，if紧跟大括号，{不能占一行，else同理，在if…else条件语句中可以增加多个else if…else</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//if语句</span></span><br><span class="line">i := <span class="number">10</span></span><br><span class="line"><span class="keyword">if</span> i &gt; <span class="number">10</span> &#123; <span class="comment">//必须紧跟大括号</span></span><br><span class="line">fmt.Println(<span class="string">&quot;i&gt;10&quot;</span>)</span><br><span class="line">   &#125; <span class="keyword">else</span> &#123; <span class="comment">//&#123;不能占一行</span></span><br><span class="line">fmt.Println(<span class="string">&quot;i&lt;=10&quot;</span>)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">//else if语句</span></span><br><span class="line">j := <span class="number">7</span></span><br><span class="line"><span class="keyword">if</span> j &gt; <span class="number">10</span> &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;j&gt;=10&quot;</span>)</span><br><span class="line">&#125; <span class="keyword">else</span> <span class="keyword">if</span> j &gt; <span class="number">5</span> &amp;&amp; j &lt;= <span class="number">10</span> &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;5&lt;j&lt;=10&quot;</span>)</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;j&lt;=5&quot;</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>if语句也可以进行简化，将定义变量合并起来</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> i := <span class="number">6</span>; i &gt; <span class="number">10</span> &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;i&gt;=10&quot;</span>)</span><br><span class="line">&#125; <span class="keyword">else</span> <span class="keyword">if</span> i &gt; <span class="number">5</span> &amp;&amp; i &lt;= <span class="number">10</span> &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;5&lt;i&lt;=10&quot;</span>)</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;i&lt;=5&quot;</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="3-2-switch语句"><a href="#3-2-switch语句" class="headerlink" title="3.2 switch语句"></a>3.2 switch语句</h2><p>​当if条件过多时，就可以用switch语句来替代。switch的case从上到下逐一进行判断。</p><p>一旦满足条件，立即执行对应的分支并返回，其余分支不再做判断</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">switch</span> i := <span class="number">6</span>; &#123;</span><br><span class="line"><span class="keyword">case</span> i &gt; <span class="number">10</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;i&gt;=10&quot;</span>)</span><br><span class="line"><span class="keyword">case</span> i &gt; <span class="number">5</span> &amp;&amp; i &lt;= <span class="number">10</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;5&lt;i&lt;=10&quot;</span>)</span><br><span class="line"><span class="keyword">default</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;i&lt;=5&quot;</span>)</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//switch的变种 利用数字进行判断</span></span><br><span class="line"><span class="keyword">switch</span> j := <span class="number">1</span>; j &#123;</span><br><span class="line"><span class="keyword">case</span> <span class="number">1</span>:</span><br><span class="line"><span class="keyword">fallthrough</span></span><br><span class="line"><span class="keyword">case</span> <span class="number">2</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;1&quot;</span>)</span><br><span class="line"><span class="keyword">default</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;没有匹配&quot;</span>)</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//switch的变种 利用bool来进行判断</span></span><br><span class="line"><span class="keyword">switch</span> <span class="number">2</span> &gt; <span class="number">1</span> &#123;</span><br><span class="line"><span class="keyword">case</span> <span class="literal">true</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;2&gt;1&quot;</span>)</span><br><span class="line"><span class="keyword">case</span> <span class="literal">false</span>:</span><br><span class="line">fmt.Println(<span class="string">&quot;2&lt;=1&quot;</span>)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="3-3-for循环语句"><a href="#3-3-for循环语句" class="headerlink" title="3.3 for循环语句"></a>3.3 for循环语句</h2><p>​简单语句，一般用于for循环的初始化。for循环的条件，表示for循环什么时候结束。</p><p>更新语句，一般用于更新循环的变量</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">sum := <span class="number">0</span></span><br><span class="line"><span class="keyword">for</span> i := <span class="number">0</span>; i &lt;= <span class="number">100</span>; i++ &#123;</span><br><span class="line">sum += i</span><br><span class="line">&#125;</span><br><span class="line">fmt.Println(<span class="string">&quot;sum=&quot;</span>, sum)</span><br></pre></td></tr></table></figure><p>由于go没有while语句，所以只能用for来模仿一个</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">sum1 := <span class="number">0</span></span><br><span class="line">i1 := <span class="number">1</span></span><br><span class="line"><span class="keyword">for</span> i1 &lt;= <span class="number">100</span> &#123;</span><br><span class="line">sum1 += i1</span><br><span class="line">i1++</span><br><span class="line">&#125;</span><br><span class="line">fmt.Println(<span class="string">&quot;sum1=&quot;</span>, sum1)</span><br></pre></td></tr></table></figure><p>也跟其他语言一样，有着break和continue。continue可以跳出本次循环，继续执行下一个循环<br>break可以跳出整个for循环，哪怕for循环没有执行完，也会强制终止。</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//break</span></span><br><span class="line">sum2 := <span class="number">0</span></span><br><span class="line">i2 := <span class="number">1</span></span><br><span class="line"><span class="keyword">for</span> &#123;</span><br><span class="line">sum2 += i2</span><br><span class="line">i++</span><br><span class="line"><span class="keyword">if</span> i2 &gt; <span class="number">100</span> &#123;</span><br><span class="line"><span class="keyword">break</span></span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">fmt.Println(<span class="string">&quot;sum2=&quot;</span>, sum2)</span><br><span class="line"><span class="comment">//continue跳出</span></span><br><span class="line">sum3 := <span class="number">0</span></span><br><span class="line"><span class="keyword">for</span> i3 := <span class="number">1</span>; i3 &lt;= <span class="number">100</span>; i3++ &#123;</span><br><span class="line"><span class="keyword">if</span> i3&amp;<span class="number">2</span> != <span class="number">0</span> &#123;</span><br><span class="line"><span class="keyword">continue</span></span><br><span class="line">&#125;</span><br><span class="line">sum3 += i3</span><br><span class="line">&#125;</span><br><span class="line">fmt.Println(<span class="string">&quot;sum3=&quot;</span>, sum3)</span><br></pre></td></tr></table></figure><h1 id="四、数组"><a href="#四、数组" class="headerlink" title="四、数组"></a>四、数组</h1><p>​数组是具有相同唯一类型的一组已编号且长度固定的数据项序列，这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。</p><h2 id="4-1-数组的简单定义"><a href="#4-1-数组的简单定义" class="headerlink" title="4.1 数组的简单定义"></a>4.1 数组的简单定义</h2><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">array := [<span class="number">5</span>]<span class="type">string</span>&#123;<span class="string">&quot;a&quot;</span>, <span class="string">&quot;b&quot;</span>, <span class="string">&quot;c&quot;</span>, <span class="string">&quot;d&quot;</span>, <span class="string">&quot;e&quot;</span>&#125;</span><br></pre></td></tr></table></figure><p>也可以用…来省略</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">array1 := [...]<span class="type">string</span>&#123;<span class="string">&quot;a&quot;</span>, <span class="string">&quot;b&quot;</span>, <span class="string">&quot;c&quot;</span>, <span class="string">&quot;d&quot;</span>, <span class="string">&quot;e&quot;</span>&#125;</span><br></pre></td></tr></table></figure><p>如果要初始化索引则不可用…来进行省略</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">array2 := [<span class="number">5</span>]<span class="type">string</span>&#123;<span class="number">1</span>: <span class="string">&quot;b&quot;</span>, <span class="number">3</span>: <span class="string">&quot;d&quot;</span>&#125;</span><br></pre></td></tr></table></figure><p>数组也可以用for循环来进行表示</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> i := <span class="number">0</span>; i &lt; <span class="number">5</span>; i++ &#123;</span><br><span class="line">fmt.Printf(<span class="string">&quot;数组索引：%d,对应值：%s\n&quot;</span>, i, array[i])</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>但大部分情况下使用的是for range这种Go语言的新型循环</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> i, v := <span class="keyword">range</span> array &#123;</span><br><span class="line">fmt.Printf(<span class="string">&quot;数组索引：%d,对应值：%s\n&quot;</span>, i, v)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>如果不需要索引值，可以使用_将索引丢弃</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> _, v := <span class="keyword">range</span> array &#123;</span><br><span class="line">fmt.Printf(<span class="string">&quot;对应值：%s\n&quot;</span>, v)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="4-2-二维数组"><a href="#4-2-二维数组" class="headerlink" title="4.2 二维数组"></a>4.2 二维数组</h2><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">main</span><span class="params">()</span></span> &#123;</span><br><span class="line">aa := [<span class="number">2</span>][<span class="number">2</span>]<span class="type">int</span>&#123;&#125;</span><br><span class="line">aa[<span class="number">0</span>][<span class="number">0</span>] = <span class="number">1</span></span><br><span class="line">aa[<span class="number">0</span>][<span class="number">1</span>] = <span class="number">2</span></span><br><span class="line">aa[<span class="number">1</span>][<span class="number">0</span>] = <span class="number">4</span></span><br><span class="line">aa[<span class="number">1</span>][<span class="number">1</span>] = <span class="number">5</span></span><br><span class="line">fmt.Println(aa)</span><br><span class="line">&#125;<span class="comment">//其结果为[[1 2] [4 5]]</span></span><br></pre></td></tr></table></figure><h2 id="4-3-byte的一些使用"><a href="#4-3-byte的一些使用" class="headerlink" title="4.3 byte的一些使用"></a>4.3 byte的一些使用</h2><p>UTF8编码下，一个汉字对应三个字节，所以字符串s的长度其实是12</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">s1 := <span class="string">&quot;hello 世界&quot;</span></span><br><span class="line">bs := []<span class="type">byte</span>(s1)</span><br><span class="line">fmt.Println(bs)</span><br><span class="line">fmt.Println(s[<span class="number">0</span>], s1[<span class="number">1</span>], s1[<span class="number">11</span>])</span><br><span class="line">fmt.Println(<span class="built_in">len</span>(s1))</span><br></pre></td></tr></table></figure><h1 id="五、切片"><a href="#五、切片" class="headerlink" title="五、切片"></a>五、切片</h1><p>切片和数组类似，可以把它理解为动态数组，对数组任意分隔，就可以得到一个切片。基于数组生成切片，包含索引start，但是不包含索引end，切片和数组一样，也可以通过索引定位元素</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">array3 := [<span class="number">5</span>]<span class="type">string</span>&#123;<span class="string">&quot;a&quot;</span>, <span class="string">&quot;b&quot;</span>, <span class="string">&quot;c&quot;</span>, <span class="string">&quot;d&quot;</span>, <span class="string">&quot;e&quot;</span>&#125;</span><br><span class="line">s := array3[<span class="number">2</span>:<span class="number">5</span>]</span><br><span class="line">fmt.Println(s)<span class="comment">//结果为[c d e]</span></span><br></pre></td></tr></table></figure><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//修改切片</span></span><br><span class="line">slice := array[<span class="number">2</span>:<span class="number">5</span>]</span><br><span class="line">slice[<span class="number">1</span>] = <span class="string">&quot;f&quot;</span></span><br><span class="line">fmt.Println(array)<span class="comment">//结果为[a b c f e]</span></span><br></pre></td></tr></table></figure><p>这里的len函数是指slice的长度，而cap函数指的是整个数组的长度</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">slice1 := []<span class="type">string</span>&#123;<span class="string">&quot;a&quot;</span>, <span class="string">&quot;b&quot;</span>, <span class="string">&quot;c&quot;</span>, <span class="string">&quot;d&quot;</span>, <span class="string">&quot;e&quot;</span>&#125;</span><br><span class="line">fmt.Println(<span class="built_in">len</span>(slice1), <span class="built_in">cap</span>(slice1))</span><br></pre></td></tr></table></figure><p>append的简单使用</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//追加一个元素</span></span><br><span class="line">slice2 := <span class="built_in">append</span>(slice1, <span class="string">&quot;f&quot;</span>)</span><br><span class="line"><span class="comment">//多加多个元素</span></span><br><span class="line">slice3 := <span class="built_in">append</span>(slice1, <span class="string">&quot;f&quot;</span>, <span class="string">&quot;g&quot;</span>)</span><br><span class="line"><span class="comment">//追加一个切片</span></span><br><span class="line">slice4 := <span class="built_in">append</span>(slice1, slice...)</span><br></pre></td></tr></table></figure><h1 id="六、map结构"><a href="#六、map结构" class="headerlink" title="六、map结构"></a>六、map结构</h1><h2 id="6-1-声明map和使用"><a href="#6-1-声明map和使用" class="headerlink" title="6.1 声明map和使用"></a>6.1 声明map和使用</h2><p>map是一一个无序的K-V键值对集合，结构为map[K]V，其中K对应Key，V对应Value<br>map的门操作符可以返回两个值<br>1.第一个值是对应的Value<br>2.第二个值标记该Key是否存在，如果存在，它的值为true</p><p>添加键值对或者更新对应Key的Value<br>nameAgeMap[“世界”] &#x3D; 20<br>获取指定Key对应的Value<br>age :&#x3D; nameAgeMapr[“世界”]</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//声明</span></span><br><span class="line">nameAgeMap := <span class="built_in">make</span>(<span class="keyword">map</span>[<span class="type">string</span>]<span class="type">int</span>)</span><br><span class="line">nameAgeMap[<span class="string">&quot;世界&quot;</span>] = <span class="number">20</span></span><br><span class="line">age, ok := nameAgeMap[<span class="string">&quot;世界&quot;</span>]</span><br><span class="line"><span class="keyword">if</span> ok &#123;</span><br><span class="line">fmt.Println(age)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="6-2-遍历Map"><a href="#6-2-遍历Map" class="headerlink" title="6.2 遍历Map"></a>6.2 遍历Map</h2><p>对于map，for range返回两个值<br>    1.第一个是map的Key<br>    2.第二个是map的Value</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">nameAgeMap[<span class="string">&quot;世界&quot;</span>] = <span class="number">20</span></span><br><span class="line">nameAgeMap[<span class="string">&quot;世界1&quot;</span>] = <span class="number">21</span></span><br><span class="line">nameAgeMap[<span class="string">&quot;世界2&quot;</span>] = <span class="number">22</span></span><br><span class="line"><span class="keyword">for</span> k, v := <span class="keyword">range</span> nameAgeMap &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;key is&quot;</span>, k, <span class="string">&quot;Value is &quot;</span>, v)</span><br><span class="line">&#125;<span class="comment">//其结果为key is 世界2 Value is  22 key is 世界 Value is  20  key is 世界1 Value is  21</span></span><br></pre></td></tr></table></figure><h1 id="七、函数"><a href="#七、函数" class="headerlink" title="七、函数"></a>七、函数</h1><pre><code>通过函数，可以把开发任务分解成一个个小的单元，这些小单元可以被其他单元复用，进而提高开发效率、降低代码重合度任何一个函数的定义，都有一个func关键字main是函数的名字main函数名字后面的一对括号0是不能省略的括号里可以定义函数使用的参数</code></pre><p>函数的声明格式</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">funcName</span><span class="params">(params)</span></span> result &#123;</span><br><span class="line">body</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>关键字func<br>函数名字funcName<br>函数的参数params，用来定义形参的变量名和类型<br>result是返回的函数值，用于定义返回值的类型</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">sum</span><span class="params">(a, b <span class="type">int</span>)</span></span> <span class="type">int</span> &#123;</span><br><span class="line"><span class="keyword">return</span> a + b</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    <span class="comment">//变量名称在前，变量类型在后</span></span><br><span class="line"><span class="comment">//变量名称叫作参数名称，也就是函数的形参</span></span><br><span class="line">r := sum(<span class="number">1</span>, <span class="number">2</span>)</span><br><span class="line">fmt.Println(r) <span class="comment">//结果为3</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Go语言的函数可以返回多个值，也就是多值返回<br>第一个值返回函数的结果，第二个值返回函数出错的信息</p><p>不管是自定义的函数sum、sum1,还是我们使用到的函数Printin，都会从属于一个包也就是package,不同包的函数要被调用，那么函数的作用域必须是公有的,也就是函数名称的首字母要大写</p><p>函数名称首字母小写代表私有函数，只有在同一个包中才可以被调用<br>函数名称首字母大写代表公有函数，不同的包也可以调用<br>任何一个函数都会从属于一个包</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">sum1</span><span class="params">(a, b <span class="type">int</span>)</span></span> (<span class="type">int</span>, <span class="type">error</span>) &#123;</span><br><span class="line"><span class="keyword">if</span> a &lt; <span class="number">0</span> || b &lt; <span class="number">0</span> &#123;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>, errors.New(<span class="string">&quot;a或者b不能是负数&quot;</span>)</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> a + b, <span class="literal">nil</span></span><br><span class="line">&#125;</span><br><span class="line">r1, err := sum1(<span class="number">1</span>, <span class="number">-1</span>)</span><br><span class="line"><span class="keyword">if</span> err != <span class="literal">nil</span> &#123;</span><br><span class="line">fmt.Println(err)</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">fmt.Println(r1)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 函数的返回值也可以有变量名称</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">sum2</span><span class="params">(a, b <span class="type">int</span>)</span></span> (sum2 <span class="type">int</span>, err <span class="type">error</span>) &#123;</span><br><span class="line"><span class="keyword">if</span> a &lt; <span class="number">0</span> || b &lt; <span class="number">0</span> &#123;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>, errors.New(<span class="string">&quot;a或者b不能是负数&quot;</span>)</span><br><span class="line">&#125;</span><br><span class="line">sum2 = a + b</span><br><span class="line">err = <span class="literal">nil</span></span><br><span class="line"><span class="keyword">return</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//也可以不需要erro</span></span><br><span class="line">r2, _ := sum1(<span class="number">1</span>, <span class="number">-1</span>)</span><br><span class="line"><span class="keyword">if</span> err != <span class="literal">nil</span> &#123;</span><br><span class="line">fmt.Println(err)</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">fmt.Println(r2)</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//匿名函数就是没有名字的函数</span></span><br><span class="line">sum3 := <span class="function"><span class="keyword">func</span><span class="params">(a, b <span class="type">int</span>)</span></span> <span class="type">int</span> &#123;</span><br><span class="line"><span class="keyword">return</span> a + b</span><br><span class="line">&#125;</span><br><span class="line">fmt.Println(sum3(<span class="number">1</span>, <span class="number">2</span>))</span><br></pre></td></tr></table></figure><p>方法必须要有一个接收者，这个接收者是一个类型，这样方法就和这个类型绑定在一起，称为这个类型的方法，接收者的定义和普通变量、函数参数等一样<br>前面是变量名，后面是接收者类型</p><p>在函数中再定义函数（函数嵌套），定义的这个匿名函数，也可以称为内部函数更重要的是，在函数内定义的内部函数，可以使用外部函数的变量等，这种方式也称为闭包</p><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> Age <span class="type">uint</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="params">(age Age)</span></span> <span class="type">string</span>() &#123;</span><br><span class="line">fmt.Println(<span class="string">&quot;age is&quot;</span>, age)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 值类型接收者和指针类型接收者</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="params">(age *Age)</span></span> Modify() &#123;</span><br><span class="line">*age = Age(<span class="number">22</span>)</span><br><span class="line">&#125;</span><br><span class="line">age := Age(<span class="number">22</span>)</span><br><span class="line">age.<span class="type">string</span>()</span><br><span class="line"><span class="comment">//指针</span></span><br><span class="line">age.Modify()</span><br></pre></td></tr></table></figure><h1 id="八、总结"><a href="#八、总结" class="headerlink" title="八、总结"></a>八、总结</h1><p>本期我们讲了安装使用、数据类型、条件语句、数组、切片、Map和函数。如果有代码基础，实际上这些只需要一个小时即可掌握。</p><p>如果硬要难的话可能是函数中的闭包没有见过，这里需要着重看一下。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;一、go的简单介绍和安装&quot;&gt;&lt;a href=&quot;#一、go的简单介绍和安装&quot; class=&quot;headerlink&quot; title=&quot;一、go的简单介绍和安装&quot;&gt;&lt;/a&gt;一、go的简单介绍和安装&lt;/h1&gt;&lt;p&gt;​	&lt;mark class=&quot;hl-label red&quot;&gt;首</summary>
      
    
    
    
    <category term="go" scheme="https://dclef.icu/categories/go/"/>
    
    
  </entry>
  
  <entry>
    <title>Spring和SpringMVC的常用注解</title>
    <link href="https://dclef.icu/2022/01/21/Spring-SpringMVC/"/>
    <id>https://dclef.icu/2022/01/21/Spring-SpringMVC/</id>
    <published>2022-01-21T01:00:00.000Z</published>
    <updated>2022-09-22T15:31:08.721Z</updated>
    
    <content type="html"><![CDATA[<p>如果没学过spring或者springmvc不要紧，直接看以下注解即可。</p><h2 id="Spring部分"><a href="#Spring部分" class="headerlink" title="Spring部分"></a><strong>Spring部分</strong></h2><p><strong>1、声明Bean的注解</strong></p><table><thead><tr><th>注解</th><th>作用</th></tr></thead><tbody><tr><td>@Component</td><td>组件，没有明确的角色</td></tr><tr><td>@Service</td><td>在业务逻辑层使用（service层）</td></tr><tr><td>@Repository</td><td>在数据访问层使用（dao层）</td></tr><tr><td>@Controller</td><td>在展现层使用，控制器的声明 (Controller层)</td></tr></tbody></table><p><strong>2、注入bean的注解</strong></p><table><thead><tr><th>注解</th><th>作用</th></tr></thead><tbody><tr><td>@Autowired</td><td>减少或者消除属性或构造器参数的设置</td></tr><tr><td>@Inject</td><td>与@Autowired相同，但无request属性</td></tr><tr><td>@Resource</td><td>在根据名称进行自动装配的，会指定一个name属性</td></tr></tbody></table><p><strong>3、java配置类相关注解</strong></p><table><thead><tr><th>注解</th><th>作用</th></tr></thead><tbody><tr><td>@Configuration</td><td>声明当前类为配置类，相当于xml形式的Spring配置</td></tr><tr><td>@Bean</td><td>注解在方法上，声明当前方法的返回值为一个bean，替代xml中的方式</td></tr><tr><td>@Configuration</td><td>声明当前类为配置类，内部组合了@Component注解，表明这个类是一个bean</td></tr><tr><td>@ComponentScan</td><td>用于对Component进行扫描</td></tr><tr><td>@WishlyConfiguration</td><td>@Configuration与@ComponentScan的复合注解</td></tr></tbody></table><p><strong>4、切面(AOP)相关注解</strong></p><table><thead><tr><th>注解</th><th>作用</th></tr></thead><tbody><tr><td>@Aspect</td><td>声明一个切面</td></tr><tr><td>@After</td><td>在方法执行之后执行</td></tr><tr><td>@Before</td><td>在方法执行之前执行</td></tr><tr><td>@Around</td><td>在方法执行之前与之后执行</td></tr><tr><td>@PointCut</td><td>在声明切点</td></tr></tbody></table><p><strong>5、异步相关注解</strong></p><table><thead><tr><th>注解</th><th>作用</th></tr></thead><tbody><tr><td>@EnableAsync</td><td>配置类中，通过此注解开启对异步任务的支持</td></tr><tr><td>@Async</td><td>放到方法上，调用该方法的线程与此方法异步执行，需要配合@EnableAsync注解使用</td></tr></tbody></table><p><strong>6、定时任务相关注解</strong></p><table><thead><tr><th>注解</th><th>作用</th></tr></thead><tbody><tr><td>@EnableScheduling</td><td>在配置类上使用，开启计划任务的支持</td></tr><tr><td>@Scheduled</td><td>申明这是一个任务，有cron,zone,fixedDelay等8个参数</td></tr></tbody></table><p><strong>8、Enable相关注解</strong></p><table><thead><tr><th>注解</th><th>作用</th></tr></thead><tbody><tr><td>@EnableAspectJAutoProxy</td><td>开启对AspectJ自动代理的支持</td></tr><tr><td>@EnableAsync</td><td>开启异步方法的支持</td></tr><tr><td>@EnableScheduling</td><td>开启计划任务的支持</td></tr><tr><td>@EnableWebMvc</td><td>开启Web MVC的配置支持</td></tr><tr><td>@EnableConfigurationProperties</td><td>开启对@ConfigurationProperties注解配置Bean的支持</td></tr><tr><td>@EnableJpaRepositories</td><td>启对SpringData JPA Repository的支持</td></tr><tr><td>@EnableTransactionManagement</td><td>开启注解式事务的支持</td></tr><tr><td>@EnableTransactionManagement</td><td>开启注解式事务的支持</td></tr><tr><td>@EnableCaching</td><td>开启注解式的缓存支持</td></tr></tbody></table><p><strong>8、测试相关注解</strong></p><table><thead><tr><th>注解</th><th>作用</th></tr></thead><tbody><tr><td>@RunWith</td><td>运行器，Spring中通常用于对JUnit的支持</td></tr><tr><td>@ContextConfiguration</td><td>用来加载配置ApplicationContext，其中classes属性用来加载配置类</td></tr></tbody></table><h2 id="SpringMVC部分"><a href="#SpringMVC部分" class="headerlink" title="SpringMVC部分"></a>SpringMVC部分</h2><table><thead><tr><th>注解</th><th>作用</th></tr></thead><tbody><tr><td>@EnableWebMvc</td><td>在配置类中开启Web MVC的配置支持</td></tr><tr><td>@Controller</td><td>声明该类为SpringMVC中的Controller 作用修饰class,用来创建处理http请求的对象</td></tr><tr><td>@RequestMapping</td><td>配置url映射</td></tr><tr><td>@ResponseBody</td><td>支持将返回值放在response内，而不是一个页面，默认返回json数据</td></tr><tr><td>@RequestBody</td><td>允许request的参数在request体中，而不是在直接连接在地址后面</td></tr><tr><td>@PathVariable</td><td>用于接收路径参数</td></tr><tr><td>@RestController</td><td>复合注解，相当于@Controller和@ResponseBody的组合,默认返回json数据</td></tr><tr><td>@ControllerAdvice</td><td>通过该注解，我们可以将对于控制器的全局配置放置在同一个位置</td></tr><tr><td>@ExceptionHandler</td><td>用于全局处理控制器里的异常</td></tr><tr><td>@InitBinder</td><td>用来设置WebDataBinder，WebDataBinder用来自动绑定前台请求参数到Model中</td></tr><tr><td>@ModelAttribute</td><td>绑定键值对到Model里</td></tr></tbody></table><p>PS:markdown的表格有点反人类，差点就给我整不会了。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;如果没学过spring或者springmvc不要紧，直接看以下注解即可。&lt;/p&gt;
&lt;h2 id=&quot;Spring部分&quot;&gt;&lt;a href=&quot;#Spring部分&quot; class=&quot;headerlink&quot; title=&quot;Spring部分&quot;&gt;&lt;/a&gt;&lt;strong&gt;Spring部分&lt;/</summary>
      
    
    
    
    <category term="java" scheme="https://dclef.icu/categories/java/"/>
    
    
    <category term="springboot" scheme="https://dclef.icu/tags/springboot/"/>
    
  </entry>
  
  <entry>
    <title>OSI模型</title>
    <link href="https://dclef.icu/2021/12/11/OSI%E6%A8%A1%E5%9E%8B/"/>
    <id>https://dclef.icu/2021/12/11/OSI%E6%A8%A1%E5%9E%8B/</id>
    <published>2021-12-11T01:00:00.000Z</published>
    <updated>2022-09-22T16:03:38.921Z</updated>
    
    <content type="html"><![CDATA[<p>层次划分<br>OSI将计算机网络体系结构划分为以下七层，标有1～7，第1层在底部。</p><p><strong>第7层 应用层</strong><br>主条目：应用层<br>应用层（Application Layer）提供为应用软件而设计的接口，以设置与另一应用软件之间的通信。例如：HTTP、HTTPS、FTP、Telnet、SSH、SMTP、POP3等。</p><p><strong>第6层 表示层</strong><br>主条目：表示层<br>表示层（Presentation Layer）把数据转换为能与接收者的系统格式兼容并适合传输的格式。</p><p><strong>第5层 会话层</strong><br>主条目：会话层<br>会话层（Session Layer）负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。</p><p><strong>第4层 传输层</strong><br>主条目：传输层<br>传输层（Transport Layer）把传输表头（TH）加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议（TCP）等。</p><p><strong>第3层 网络层</strong><br>主条目：网络层<br>网络层（Network Layer）决定数据的路径选择和转寄，将网络表头（NH）加至数据包，以形成分组。网络表头包含了网络资料。例如:互联网协议（IP）等。</p><p><strong>第2层 数据链路层</strong><br>主条目：数据链路层<br>数据链路层（Data Link Layer）负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时，会形成信息框（Data Frame）。数据链表头（DLH）是包含了物理地址和错误侦测及改错的方法。数据链表尾（DLT）是一串指示数据包末端的字符串。例如以太网、无线局域网（Wi-Fi）和通用分组无线服务（GPRS）等。</p><p>分为两个子层：逻辑链路控制（logical link control，LLC）子层和介质访问控制（Media access control，MAC）子层。</p><p><strong>第1层 物理层</strong><br>主条目：物理层<br>物理层（Physical Layer）在局部局域网上发送数据帧（Data Frame），它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等。<br>下列以一张图来解释<br><img src="https://cdn.jsdelivr.net/gh/Dclef/CDN/img/2020419_Iso_Model.png" alt="iso模型"><br>这样便可以解释游戏加速器为什么能加速客户端游戏，至于会有延迟是因为你的客户端需要先传输到它的服务器通过它的服务器来返回传输的内容，这好比一个中转站承载着流量运输。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;层次划分&lt;br&gt;OSI将计算机网络体系结构划分为以下七层，标有1～7，第1层在底部。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第7层 应用层&lt;/strong&gt;&lt;br&gt;主条目：应用层&lt;br&gt;应用层（Application Layer）提供为应用软件而设计的接口，以设置与另一应用软件之间</summary>
      
    
    
    
    <category term="生活" scheme="https://dclef.icu/categories/%E7%94%9F%E6%B4%BB/"/>
    
    
  </entry>
  
  <entry>
    <title>从零开始学springboot（一）</title>
    <link href="https://dclef.icu/2021/12/11/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%AD%A6springboot(%E4%B8%80)/"/>
    <id>https://dclef.icu/2021/12/11/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%AD%A6springboot(%E4%B8%80)/</id>
    <published>2021-12-11T01:00:00.000Z</published>
    <updated>2022-09-22T15:30:42.157Z</updated>
    
    <content type="html"><![CDATA[<p><strong>1、什么是Spring-boot?</strong><br>讲原理的话就要要从spring框架开始说起，如果往深一点就是从微服务开始讲起，但为了更好的理解springboot，简单来讲就是它继承了Spring框架的优点并去除了spring最大的缺点：配置文件太多并复杂。极大的简化了Spring应用开发的框架，一站式解决J2EE的开发流程，换句话说就是一条龙服务到位。<br><strong>1.1、spring的概念</strong><br>Spring Boot是发展自Spring的基础上的，如果不明白Spring就介绍Spring Boot的话会觉得云里雾里。<br>所以你需要了解的Spring的核心概念：控制反转(IOC)和面向切面(AOP)<br><strong>1.2、IOC(控制反转)<br>1.2.1、什么是IOC？</strong><br>举一个例子，现有类 A 依赖于类 B，以前是在类 A 中手动通过new 关键字来 new一个B的对象出来。<br>用IOC方法实现：不通过 new 关键字来创建对象，而是通过 IOC 容器 来帮助我们实例化对象。我们需要哪个对象，直接从 IoC 容器里面过去即可。<br>如果还理解不明白再举一个简单的例子<br><strong>1.2.2、IOC代码实例</strong><br> 假设有一个场景：三个角色，喝水的人（用户），饮水机（业务层），水（持久化层）。<br>先写一个接口</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="title class_">water</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">get</span><span class="params">()</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>现在实现两种水的类，方便展示，把它们先写在一起</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// Hotwater.java</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">Hotwater</span> <span class="keyword">implements</span> <span class="title class_">water</span>&#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">get</span><span class="params">()</span> &#123;</span><br><span class="line">        System.out.println(<span class="string">&quot;get hotwater&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line">​</span><br><span class="line"><span class="comment">// Clodwater.java</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">Clodwater</span> <span class="keyword">implements</span> <span class="title class_">water</span>&#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">get</span><span class="params">()</span> &#123;</span><br><span class="line">        System.out.println(<span class="string">&quot;get clodwater&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>​<br>实现一个业务层，也就是从两种水中获取到热水</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// UserService.java</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">UserService</span> &#123;</span><br><span class="line">    <span class="keyword">private</span> <span class="type">Water</span> <span class="variable">water</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">Hotwater</span>();</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">getWater</span><span class="params">()</span> &#123;</span><br><span class="line">        water.get();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>实现一个用户类</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// User.java</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">User</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">main</span><span class="params">(String[] args)</span> &#123;</span><br><span class="line">        <span class="type">UserService</span> <span class="variable">user</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">UserService</span>();</span><br><span class="line">        user.getWater();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p> 以上是调用业务层UserService获取到热水，试想一下，如果现在我想喝冷水怎么办？这样便要修改业务层代码</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// UserService.java</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">UserService</span> &#123;</span><br><span class="line">    <span class="keyword">private</span> <span class="type">Water</span> <span class="variable">water</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">Clodwater</span>();</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">getWater</span><span class="params">()</span> &#123;</span><br><span class="line">        water.get();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>从上述不难发现每当用户需求发生改变时，我们的代码都要做出相应的修改，那么如果我们工程量大，修改的内容很多怎么办？或者说如果修改会对其他业务逻辑产生BUG怎么办？解决的思路应该是在不修改源代码的前提上，我们要考虑的是控制权应该在用户上和不是饮水机（业务层）。<br>所以需要修改业务层的代码实现控制权的转换</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">UserService</span> &#123;</span><br><span class="line">    <span class="keyword">private</span> Water water;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setWater</span><span class="params">(Water water)</span> &#123;</span><br><span class="line">        <span class="built_in">this</span>.water = water;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">getWater</span><span class="params">()</span> &#123;</span><br><span class="line">        <span class="built_in">this</span>.water.get();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p> 加入set方法，使用户层可以注入不同的对象，这样我们就可以在用户层传入哪个对象，就会获得哪个结果</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// Hotwater</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">User</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">main</span><span class="params">(String[] args)</span> &#123;</span><br><span class="line">        <span class="type">UserImpl</span> <span class="variable">user</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">UserImpl</span>();</span><br><span class="line">        user.setWater(<span class="keyword">new</span> <span class="title class_">HotWater</span>());    <span class="comment">//注入对象</span></span><br><span class="line">        user.getWater();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// Clodwater</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">User</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">main</span><span class="params">(String[] args)</span> &#123;</span><br><span class="line">        <span class="type">UserImpl</span> <span class="variable">user</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">UserImpl</span>();</span><br><span class="line">        user.setWater(<span class="keyword">new</span> <span class="title class_">ClodWater</span>());    <span class="comment">//注入对象</span></span><br><span class="line">        user.getWater();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p> 以前主动权在业务层，每次用户提出需求业务层就需要跟着做出改变，现在我们把主动权交给了用户，它传进什么值，就得到什么样的结果，这样业务代码就不用跟着改变了。试想一下，以前我们是要求饮水机给我们水，我们还要自己动。现在是拿着一个杯子，大喊一声：水来！饮水机便自动给你水杯中到热水或者冷水。<br>这便是IOC（控制反转）的核心思想。<br><strong>1.3、AOP(面向切面)</strong><br><strong>1.3.1、什么是AOP？</strong><br>要想了解AOP首先就要了解OOP（面向对象编程）比如照软件重构的思想，如果多个类中出现重复的代码，就应该考虑定义一个共同的抽象类，将这些共同的代码提取到抽象类中，比如Teacher,Student都有username，那么就可以把username及相关的get、set方法抽取到User中，这种情况，我们称为纵向抽取。<br>但有些功能并不适合定义横向的关系，如认证、日志、事物等，例如日志代码往往横向地散布在所有对象层次中，而与它对应的对象的核心功能毫无关系对于其他类型的代码，这种散布在各处的无关的代码被称为横切，在OOP设计中，它导致了大量代码的重复，而不利于各个模块的重用。<br>而AOP它利用一种称为”横切”的技术，剖解开封装的对象内部，并将那些影响了多个类的公共行为封装到一个可重用模块，并将其命名为”Aspect”，即切面。所谓”切面”，简单说就是那些与业务无关，却为业务模块所共同调用的逻辑或责任封装起来，便于减少系统的重复代码，降低模块之间的耦合度，并有利于未来的可操作性和可维护性。<br>举一个例子，双十一它有验证有效期，验证是否登录，如果要写业务逻辑验证有效期和验证登录要写两遍，有多少接口，就要多少次代码，所以提出一个公共方法，每个接口都来调用这个接口，同样有个问题，我虽然不用每次都写一遍代码了，但每个接口都要调用这个方法。于是将方法注入到接口调用的某个地方。这样接口只需要关心具体的业务，而不需要关注其他非该接口关注的逻辑。<br><strong>1.3.2、AOP概述</strong><br>连接点（Joinpoint) 程序执行的某个特定位置，如某个方法调用前，调用后，方法抛出异常后，这些代码中的特定点称为连接点。简单来说，就是在哪加入你的逻辑增强 连接点表示具体要拦截的方法，上面切点是定义一个范围，而连接点是具体到某个方法<br>切点（PointCut） 每个程序的连接点有多个，如何定位到某个感兴趣的连接点，就需要通过切点来定位。比如，连接点–数据库的记录，切点–查询条件 切点用于来限定Spring-AOP启动的范围，通常我们采用表达式的方式来设置，所以关键词是范围<br>增强（Advice） 增强是织入到目标类连接点上的一段程序代码。在Spring中，像BeforeAdvice等还带有方位信息 通知是直译过来的结果，我个人感觉叫做“业务增强”更合适 对照代码就是拦截器定义的相关方法，通知分为如下几种：<br>前置通知(before):在执行业务代码前做些操作，比如获取连接对象<br>后置通知(after):在执行业务代码后做些操作，无论是否发生异常，它都会执行，比如关闭连接对象<br>异常通知（afterThrowing): 在执行业务代码后出现异常，需要做的操作，比如回滚事务<br>返回通知(afterReturning):在执行业务代码后无异常，会执行的操作<br>环绕通知(around): 这个目前跟我们谈论的事务没有对应的操作，所以暂时不谈<br>目标对象(Target):需要被加强的业务对象<br>织入(Weaving):织入就是将增强添加到对目标类具体连接点上的过程。 织入是一个形象的说法，具体来说，就是生成代理对象并将切面内容融入到业务流程的过程。<br>代理类(Proxy): 一个类被AOP织入增强后，就产生了一个代理类。<br>切面(Aspect) 切面由切点和增强组成，它既包括了横切逻辑的定义，也包括了连接点的定义，SpringAOP就是将切面所定义的横切逻辑织入到切面所制定的连接点中。 比如上文讨论的数据库事务，这个数据库事务代码贯穿了我们的整个代码，我们就可以这个叫做切面。 SpringAOP将切面定义的内容织入到我们的代码中，从而实现前后的控制逻辑。 比如我们常写的拦截器Interceptor，这就是一个切面类。<br>举一个例子 ，以数据库的操作为例来说明：<br>获取连接对象对应前置通知<br>执行SQL(核心业务代码)对应连接点<br>如果有异常<br>回滚事务对应返回通知<br>无异常则提交事务对应异常通知<br>关闭连接对应后置通知<br>整个的执行过程便是切面<br>1.3.3、AOP代码实例<br>动态代理<br> 动态代理指的是动态创建一组指定的接口的实现对象<br>先写个接口</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="title class_">Begin</span> &#123;</span><br><span class="line">    <span class="comment">//运行方法</span></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">server</span><span class="params">()</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>给出该接口的实现类</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">ServerBegin</span> <span class="keyword">implements</span> <span class="title class_">Begin</span> &#123;</span><br><span class="line"></span><br><span class="line">    <span class="meta">@Override</span></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">server</span><span class="params">()</span> &#123;</span><br><span class="line">        System.out.println(<span class="string">&quot;运行中&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>添加一个前置增强接口</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 前置增强</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="title class_">BeforeAdvice</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">before</span><span class="params">()</span>;</span><br><span class="line">&#125;</span><br><span class="line">再添加一个后置增强接口</span><br><span class="line"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="title class_">AfterAdvice</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">after</span><span class="params">()</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>把产生代理对象的代码封装为一个类</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> com.sun.org.apache.regexp.internal.RE;</span><br><span class="line"><span class="keyword">import</span> org.junit.After;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.lang.reflect.InvocationHandler;</span><br><span class="line"><span class="keyword">import</span> java.lang.reflect.Method;</span><br><span class="line"><span class="keyword">import</span> java.lang.reflect.Proxy;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 1、创建代理工厂</span></span><br><span class="line"><span class="comment"> * 2、给工厂设置目标对象、前置增强、后置增强</span></span><br><span class="line"><span class="comment"> * 3、调用creatProxy()得到代理对象</span></span><br><span class="line"><span class="comment"> * 4、执行代理对象方法时，先执行前置增强，然后是目标方法，最后是后置增强</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">ProxyFactory</span> &#123;</span><br><span class="line">    <span class="keyword">private</span> Object targetObject;<span class="comment">//目标对象</span></span><br><span class="line">    <span class="keyword">private</span> BeforeAdvice beforeAdvice;<span class="comment">//前值增强</span></span><br><span class="line">    <span class="keyword">private</span> AfterAdvice afterAdvice;<span class="comment">//后置增强</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 用来生成代理对象</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span></span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="keyword">public</span> Object <span class="title function_">creatProxy</span><span class="params">()</span> &#123;</span><br><span class="line">        <span class="comment">/**</span></span><br><span class="line"><span class="comment">         * 给出三个参数</span></span><br><span class="line"><span class="comment">         */</span></span><br><span class="line">        <span class="type">ClassLoader</span> <span class="variable">classLoader</span> <span class="operator">=</span> <span class="built_in">this</span>.getClass().getClassLoader();</span><br><span class="line">        <span class="comment">//获取当前类型所实现的所有接口类型</span></span><br><span class="line">        Class[] interfaces = targetObject.getClass().getInterfaces();</span><br><span class="line"></span><br><span class="line">        <span class="type">InvocationHandler</span> <span class="variable">invocationHandler</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">InvocationHandler</span>() &#123;</span><br><span class="line">            <span class="meta">@Override</span></span><br><span class="line">            <span class="keyword">public</span> Object <span class="title function_">invoke</span><span class="params">(Object proxy, Method method, Object[] args)</span> <span class="keyword">throws</span> Throwable &#123;</span><br><span class="line">                <span class="comment">/**</span></span><br><span class="line"><span class="comment">                 * 在调用代理对象的方法时，会执行这里的内容</span></span><br><span class="line"><span class="comment">                 */</span></span><br><span class="line">                <span class="keyword">if</span>(beforeAdvice != <span class="literal">null</span>) &#123;</span><br><span class="line">                    beforeAdvice.before();</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="type">Object</span> <span class="variable">result</span> <span class="operator">=</span> method.invoke(targetObject, args);<span class="comment">//调用目标对象的目标方法</span></span><br><span class="line">                <span class="comment">//执行后续增强</span></span><br><span class="line">                afterAdvice.after();</span><br><span class="line"></span><br><span class="line">                <span class="comment">//返回目标对象的返回值</span></span><br><span class="line">                <span class="keyword">return</span> result;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;;</span><br><span class="line">        <span class="comment">/**</span></span><br><span class="line"><span class="comment">         * 2、得到代理对象</span></span><br><span class="line"><span class="comment">         */</span></span><br><span class="line">        <span class="type">Object</span> <span class="variable">proxyObject</span> <span class="operator">=</span> Proxy.newProxyInstance(classLoader, interfaces, invocationHandler);</span><br><span class="line">        <span class="keyword">return</span> proxyObject;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line"><span class="comment">//get和set方法略</span></span><br><span class="line">&#125;</span><br><span class="line"> 将相关的参数注入到ProxyFactory后就可以通过creatProxy()方法获取代理对象</span><br><span class="line"><span class="keyword">import</span> org.junit.Test;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">Demo</span> &#123;</span><br><span class="line">    <span class="meta">@Test</span></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">test</span><span class="params">()</span> &#123;</span><br><span class="line"></span><br><span class="line">        <span class="type">ProxyFactory</span> <span class="variable">proxyFactory</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">ProxyFactory</span>();<span class="comment">//创建工厂</span></span><br><span class="line">        proxyFactory.setTargetObject(<span class="keyword">new</span> <span class="title class_">ServerBegin</span>());<span class="comment">//设置目标对象</span></span><br><span class="line">        <span class="comment">//设置前置增强</span></span><br><span class="line">        proxyFactory.setBeforeAdvice(<span class="keyword">new</span> <span class="title class_">BeforeAdvice</span>() &#123;</span><br><span class="line">            <span class="meta">@Override</span></span><br><span class="line">            <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">before</span><span class="params">()</span> &#123;</span><br><span class="line">                System.out.println(<span class="string">&quot;你好&quot;</span>);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;);</span><br><span class="line">        <span class="comment">//设置后置增强</span></span><br><span class="line">        proxyFactory.setAfterAdvice(<span class="keyword">new</span> <span class="title class_">AfterAdvice</span>() &#123;</span><br><span class="line">            <span class="meta">@Override</span></span><br><span class="line">            <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">after</span><span class="params">()</span> &#123;</span><br><span class="line">                System.out.println(<span class="string">&quot;再见&quot;</span>);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;);</span><br><span class="line">        <span class="type">Begin</span> <span class="variable">begin</span> <span class="operator">=</span> (Begin) proxyFactory.creatProxy();</span><br><span class="line">        begin.server();</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>变可得到以下结果<br>运行中<br>你好<br>再见<br><strong>2、Spring-boot的核心功能</strong><br>独立运行的 Spring 项目<br>Spring Boot 可以以 jar 包的形式独立运行，运行一个 Spring Boot 项目只需通过 java–jar xx.jar 来运行。<br>内嵌 Servlet容器<br>Spring Boot 可选择内嵌 Tomcat、Jetty 或者 Undertow，这样我们无须以 war 包形式部署项目。<br>简化Maven配置<br>Spring 提供了一系列的 starter pom 来简化 Maven 的依赖加载，例如，当你使用了spring-boot-starter-web 时，会自动加入如图 1 所示的依赖包。<br>自动配置 Spring<br>Spring Boot 会根据在类路径中的 jar 包、类，为 jar 包里的类自动配置 Bean，这样会极大地减少我们要使用的配置。当然，Spring Boot 只是考虑了大多数的开发场景，并不是所有的场景，若在实际开发中我们需要自动配置 Bean，而 Spring Boot 没有提供支持，则可以自定义自动配置。<br>准生产的应用监控<br>Spring Boot 提供基于 http、ssh、telnet 对运行时的项目进行监控。<br>无代码生成和 xml 配置<br>Spring Boot 的神奇的不是借助于代码生成来实现的，而是通过条件注解来实现的，这是 Spring 4.x 提供的新特性。Spring 4.x 提倡使用 Java 配置和注解配置组合，而 Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。<br><strong>3、Spring Boot的优缺点<br>3.1、优点</strong><br>快速构建项目。<br>对主流开发框架的无配置集成。<br>项目可独立运行，无须外部依赖Servlet容器。<br>提供运行时的应用监控。<br>极大地提高了开发、部署效率。<br>与的天然集成。<br><strong>3.2、缺点</strong><br>版本更新速度很快，一些模块改动很大。<br>由于不用自己做配置，报错时很难定位。<br>网上现成的解决方案比较少。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;strong&gt;1、什么是Spring-boot?&lt;/strong&gt;&lt;br&gt;讲原理的话就要要从spring框架开始说起，如果往深一点就是从微服务开始讲起，但为了更好的理解springboot，简单来讲就是它继承了Spring框架的优点并去除了spring最大的缺点：配置文件</summary>
      
    
    
    
    <category term="java" scheme="https://dclef.icu/categories/java/"/>
    
    
    <category term="springboot" scheme="https://dclef.icu/tags/springboot/"/>
    
  </entry>
  
  <entry>
    <title>Mysql的一些常用方法</title>
    <link href="https://dclef.icu/2021/11/21/Mysql%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95/"/>
    <id>https://dclef.icu/2021/11/21/Mysql%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95/</id>
    <published>2021-11-21T01:00:00.000Z</published>
    <updated>2022-09-22T15:31:37.315Z</updated>
    
    <content type="html"><![CDATA[<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><span class="line">查看当前所有的数据库：    </span><br><span class="line"><span class="keyword">show</span>  databases；</span><br><span class="line"></span><br><span class="line">新建数据库：</span><br><span class="line"><span class="keyword">create</span>  database  数据库名；</span><br><span class="line"></span><br><span class="line">删除数据库：</span><br><span class="line"><span class="keyword">drop</span> database 数据库名；</span><br><span class="line"></span><br><span class="line">选择（进入） 数据库：</span><br><span class="line">use   数据库名；</span><br><span class="line"></span><br><span class="line">查看当前数据库所有的表：    </span><br><span class="line"><span class="keyword">show</span> tables；</span><br><span class="line"></span><br><span class="line">查看 某个表的字段结构 ：</span><br><span class="line"><span class="keyword">desc</span>  表名；</span><br><span class="line"></span><br><span class="line">查询表数据： </span><br><span class="line"><span class="keyword">select</span> <span class="operator">*</span> <span class="keyword">from</span>  表名；</span><br><span class="line"></span><br><span class="line">新建表：</span><br><span class="line"><span class="keyword">CREATE</span> <span class="keyword">TABLE</span> 表名 <span class="operator">&lt;</span></span><br><span class="line">    字段名字   数据类型  修饰,</span><br><span class="line">    ...</span><br><span class="line"> <span class="operator">&gt;</span>; </span><br><span class="line"> </span><br><span class="line">添加数据：</span><br><span class="line"><span class="keyword">insert</span> <span class="keyword">into</span> 表名 valuse（值，值）；</span><br><span class="line"></span><br><span class="line">修改数据表：</span><br><span class="line"><span class="keyword">alter</span> <span class="keyword">table</span> 表名 <span class="keyword">add</span> 字段名 类型 修饰【加的列在表的最后面】</span><br><span class="line"><span class="keyword">alter</span> <span class="keyword">table</span> 表名 <span class="keyword">add</span> 字段名  类型 修饰 after 某列【把新列加在某列后面】</span><br><span class="line"></span><br><span class="line">修改数据：</span><br><span class="line"><span class="keyword">update</span> <span class="keyword">user</span> <span class="keyword">set</span> name<span class="operator">=</span>新值 <span class="keyword">where</span> 表达式</span><br><span class="line"></span><br><span class="line">删除数据表：</span><br><span class="line"><span class="keyword">drop</span>  <span class="keyword">table</span>  表名;</span><br><span class="line"></span><br><span class="line">删除列：</span><br><span class="line"><span class="keyword">alter</span> <span class="keyword">table</span> 表名 <span class="keyword">drop</span> 列名称;</span><br><span class="line"></span><br><span class="line">删除数据：</span><br><span class="line"><span class="keyword">delete</span>  <span class="keyword">from</span>  表名 <span class="keyword">where</span> 表达式；</span><br><span class="line"></span><br><span class="line">查询所有行:  </span><br><span class="line">命令：<span class="keyword">select</span> 【字段，字段，…】 <span class="keyword">from</span> 表名  <span class="keyword">where</span> 表达式 </span><br><span class="line"></span><br><span class="line">查询前几行数据:</span><br><span class="line"><span class="keyword">select</span>  <span class="keyword">from</span> 表名 <span class="keyword">order</span> <span class="keyword">by</span> id limit 【开始行，最后行】 </span><br><span class="line"></span><br><span class="line">更新字段内容 :</span><br><span class="line"><span class="keyword">update</span> 表名 <span class="keyword">set</span> 字段名 <span class="operator">=</span> 新内容  </span><br><span class="line"><span class="keyword">update</span> 表名 <span class="keyword">set</span> 字段名 <span class="operator">=</span> replace(字段名,<span class="string">&#x27;旧内容&#x27;</span>,<span class="string">&#x27;新内容&#x27;</span>)  </span><br></pre></td></tr></table></figure><p>另外MySQL有三大类数据类型<br>分别为<strong>数字、时间、字符串</strong><br><strong><strong>整数: tinyint、smallint、mediumint、int、bigint<br>浮点数: float、double、real、decimal<br>时间: date、time、datetime、timestamp、year<br>字符串: char、varchar</strong></strong></p>]]></content>
    
    
      
      
    <summary type="html">&lt;figure class=&quot;highlight sql&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;</summary>
      
    
    
    
    <category term="教程" scheme="https://dclef.icu/categories/%E6%95%99%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>快速学完JAVA基础</title>
    <link href="https://dclef.icu/2021/11/01/%E5%BF%AB%E9%80%9F%E5%AD%A6%E5%AE%8CJAVA%E5%9F%BA%E7%A1%80/"/>
    <id>https://dclef.icu/2021/11/01/%E5%BF%AB%E9%80%9F%E5%AD%A6%E5%AE%8CJAVA%E5%9F%BA%E7%A1%80/</id>
    <published>2021-11-01T01:00:00.000Z</published>
    <updated>2022-06-20T03:02:20.614Z</updated>
    
    <content type="html"><![CDATA[<h2 id="一、注释"><a href="#一、注释" class="headerlink" title="一、注释"></a>一、注释</h2><p>​单行注释 &#x2F;&#x2F; 快捷键  ctrl+&#x2F;</p><p>​多行注释  多行注释不能嵌套</p><p>​文档注释 JavaDoc</p><h3 id="1-标识符定义"><a href="#1-标识符定义" class="headerlink" title="1.标识符定义"></a>1.标识符定义</h3><p>​大驼峰命名 (类名) 例如SelectById</p><p>​小驼峰 (方法名  变量) 例如 selectById</p><p>​一般全小写的命名是数据库的命名</p><h2 id="二、数据类型"><a href="#二、数据类型" class="headerlink" title="二、数据类型"></a>二、数据类型</h2><p>​对所有的数据进行分类（都有默认值）</p><h3 id="1-数字"><a href="#1-数字" class="headerlink" title="1.数字"></a>1.数字</h3><h4 id="1-1-整数"><a href="#1-1-整数" class="headerlink" title="1.1 整数"></a>1.1 整数</h4><p>byte[-128,127] short int long —–0</p><h4 id="1-2-小数"><a href="#1-2-小数" class="headerlink" title="1.2 小数"></a>1.2 小数</h4><p>float[单精度浮点数] double[双精度浮点数] —-0.0</p><h4 id="1-3-字符"><a href="#1-3-字符" class="headerlink" title="1.3 字符"></a>1.3 字符</h4><p>char 单子字符或汉字 —空</p><p>‘A’ ‘a’ ‘好’ ‘牛牛’ ‘鸀’</p><h4 id="1-4-布尔型"><a href="#1-4-布尔型" class="headerlink" title="1.4 布尔型"></a>1.4 布尔型</h4><p>boolean 只有两个取值 —–false</p><p>true false</p><h4 id="1-5-String-字符串"><a href="#1-5-String-字符串" class="headerlink" title="1.5 String(字符串)"></a>1.5 String(字符串)</h4><p>“sadasdasd撒大苏打飒飒大”</p><h3 id="2-引用数据类型"><a href="#2-引用数据类型" class="headerlink" title="2.引用数据类型:"></a>2.引用数据类型:</h3><p>默认值都是 null</p><p>常量: 一个固定不变的值</p><h4 id="2-1-变量"><a href="#2-1-变量" class="headerlink" title="2.1 变量"></a>2.1 变量</h4><p>语法一: 先定义 后赋值</p><p>语法二: 定义同时赋值</p><p>语法三: 同时定义多个变量</p><h3 id="3-变量的分类"><a href="#3-变量的分类" class="headerlink" title="3. 变量的分类"></a>3. 变量的分类</h3><h4 id="3-1-成员变量"><a href="#3-1-成员变量" class="headerlink" title="3.1 成员变量"></a>3.1 成员变量</h4><p>1.定义的位置类里面,方法的外面</p><p>2.全局都可以使用</p><p>3.不赋值也是可以使用的 有默认值</p><h4 id="3-2-局部变量"><a href="#3-2-局部变量" class="headerlink" title="3.2 局部变量"></a>3.2 局部变量</h4><p>1.定义在方法内部或者代码块里面</p><p>2.只能在当前的方法 或者代码块的内部使用</p><p>3.必须先赋值后使用</p><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><p>局部变量可以和成员重名，一般不推荐这么写。</p><p>在使用的时候 优先使用局部变量，其次才使用成员变量</p><h2 id="三、数据的类型转换"><a href="#三、数据的类型转换" class="headerlink" title="三、数据的类型转换"></a>三、数据的类型转换</h2><p>​数据类型直接的相互转换</p><h3 id="1-自动转换"><a href="#1-自动转换" class="headerlink" title="1.自动转换"></a>1.自动转换</h3><p>多个不同类型的数据 进行数学运算的时候 进行自动提升</p><h3 id="2-强制转换"><a href="#2-强制转换" class="headerlink" title="2.强制转换"></a>2.强制转换</h3><p>把大的数据类型 使用一个小的类型来接收</p><p>语法：小数据类型 变量名 &#x3D; (小数据类型)大类型值&#x2F;大类型变量名;</p><p>注意：使用float或者Double精度会缺失需要用到BigDecimal方法</p><h2 id="四、运算符"><a href="#四、运算符" class="headerlink" title="四、运算符"></a>四、运算符</h2><h3 id="1-数学运算"><a href="#1-数学运算" class="headerlink" title="1.数学运算"></a>1.数学运算</h3><h4 id="1-1-加减乘除"><a href="#1-1-加减乘除" class="headerlink" title="1.1 加减乘除"></a>1.1 加减乘除</h4><p>+的功能 除了数学运算，可以拼接字符串</p><p>自增 自减 对于一个变量的操作</p><p>++ 在前 :先自增 再使用值（使用的是自增以后的值）</p><p>++ 在后:先使用值 再自增（使用的是自增之前的值）</p><h4 id="1-2-赋值运算"><a href="#1-2-赋值运算" class="headerlink" title="1.2 赋值运算"></a>1.2 赋值运算</h4><p>+&#x3D;  -&#x3D; *&#x3D; &#x2F;&#x3D; %&#x3D;</p><p>使用的场景，把运算完成以后的结果赋值给本身</p><h4 id="1-3-比较运算"><a href="#1-3-比较运算" class="headerlink" title="1.3 比较运算"></a>1.3 比较运算</h4><p>&lt; &gt;&#x3D; &lt;&#x3D; &#x3D;&#x3D; !&#x3D;    instanceof</p><p>instanceof：判断一个对象，或者实例 常量是否属于一个类型</p><h4 id="1-4-三目运算"><a href="#1-4-三目运算" class="headerlink" title="1.4 三目运算"></a>1.4 三目运算</h4><p>语法： x ? y : z;&#x2F;&#x2F; 表示如果x为true，执行y，x为false则执行z。</p><p>x：比较运算的结果  boolean类型的变量</p><h2 id="五、位运算"><a href="#五、位运算" class="headerlink" title="五、位运算"></a>五、位运算</h2><p>开发很少用，效率高，可读性差</p><h3 id="1-逻辑运算"><a href="#1-逻辑运算" class="headerlink" title="1.逻辑运算"></a>1.逻辑运算</h3><p>概念，综合多个比较的结果得出一个统一的概念</p><p>&amp;——并且</p><p>|——或者</p><p>!——取反</p><p>具有短路效果,可能效率要高一些</p><p>&amp;&amp; 和  &amp;最终的结果是一致</p><p>|| 和 |最终的结果是一致</p><h2 id="六、选择结构"><a href="#六、选择结构" class="headerlink" title="六、选择结构"></a>六、选择结构</h2><p>改变代码的执行流程</p><h3 id="1-if-条件语句"><a href="#1-if-条件语句" class="headerlink" title="1.if 条件语句"></a>1.if 条件语句</h3><h4 id="1-1-语法一"><a href="#1-1-语法一" class="headerlink" title="1.1 语法一"></a>1.1 语法一</h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">if(①判断结构)&#123;</span><br><span class="line"></span><br><span class="line">②//功能语句</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>如果 ①最终结果为true 就去执行 ②的功能语句</p><p>如果 ①最终结果为false 就不执行 ②的功能语句</p><h4 id="1-2-语法二：互斥"><a href="#1-2-语法二：互斥" class="headerlink" title="1.2 语法二：互斥"></a>1.2 语法二：互斥</h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">if(①判断结构)&#123;</span><br><span class="line"></span><br><span class="line">②//功能语句</span><br><span class="line"></span><br><span class="line">&#125;else&#123;</span><br><span class="line"></span><br><span class="line">③//功能语句</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>如果 ①最终结果为true 就去执行 ②的功能语句，否则就去执行③功能语句</p><h4 id="1-3-语法三：多条件判断"><a href="#1-3-语法三：多条件判断" class="headerlink" title="1.3 语法三：多条件判断"></a>1.3 语法三：多条件判断</h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">if(①判断结构)&#123;</span><br><span class="line"></span><br><span class="line">②//功能语句</span><br><span class="line"></span><br><span class="line">&#125;else if(③判断结构)&#123;</span><br><span class="line"></span><br><span class="line">④//功能语句</span><br><span class="line"></span><br><span class="line">&#125;else if(⑤判断结构)&#123;</span><br><span class="line"></span><br><span class="line">⑥//功能语句</span><br><span class="line"></span><br><span class="line">&#125;else if(⑦判断结构)&#123;</span><br><span class="line"></span><br><span class="line">⑧//功能语句</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="2-switch-循环语句"><a href="#2-switch-循环语句" class="headerlink" title="2.switch 循环语句"></a>2.switch 循环语句</h3><p>使用场景：一般用于有几种固定的取值情况</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">switch(变量)&#123;</span><br><span class="line"></span><br><span class="line">case 值1:</span><br><span class="line"></span><br><span class="line">功能语句1</span><br><span class="line"></span><br><span class="line">功能语句2...</span><br><span class="line"></span><br><span class="line">break;</span><br><span class="line"></span><br><span class="line">case 值2:</span><br><span class="line"></span><br><span class="line">功能语句1</span><br><span class="line"></span><br><span class="line">功能语句2...</span><br><span class="line"></span><br><span class="line">break;</span><br><span class="line"></span><br><span class="line">case 值3:</span><br><span class="line"></span><br><span class="line">功能语句1</span><br><span class="line"></span><br><span class="line">功能语句2...</span><br><span class="line"></span><br><span class="line">break;</span><br><span class="line"></span><br><span class="line">default语句</span><br><span class="line"></span><br><span class="line">break;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="2-1-default"><a href="#2-1-default" class="headerlink" title="2.1 default"></a>2.1 default</h4><p>相当于条件语句中else，所有的case匹配不上执行</p><h4 id="2-2-break"><a href="#2-2-break" class="headerlink" title="2.2 break"></a>2.2 break</h4><p>特点结束当前的匹配功能语句。</p><h3 id="3-while循环语句"><a href="#3-while循环语句" class="headerlink" title="3.while循环语句"></a>3.while循环语句</h3><p>特点结束当前的匹配功能语句。</p><p>循环结构：重复的去执行一段代码</p><p>床–食堂–游戏</p><p>家–旅游–洗脚–公司</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">while(①判断语句)&#123;</span><br><span class="line"></span><br><span class="line">②//功能代码</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">①--true--②</span><br><span class="line"></span><br><span class="line">①--true--②</span><br><span class="line"></span><br><span class="line">①--true--②</span><br><span class="line"></span><br><span class="line">①--false 停止循环</span><br></pre></td></tr></table></figure><h3 id="4-dowhile循环语句"><a href="#4-dowhile循环语句" class="headerlink" title="4.dowhile循环语句"></a>4.dowhile循环语句</h3><p>基本语法</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">do &#123;</span><br><span class="line"></span><br><span class="line">3.循环体（重复干的事）</span><br><span class="line"></span><br><span class="line">4.循环控制（根据条件判断是否要写）</span><br><span class="line"></span><br><span class="line">&#125; while (2.条件判断);// 注意分号</span><br></pre></td></tr></table></figure><p>第1次：1. 初始化条件语句 &#x3D;&gt; 3. 循环体 &#x3D;&gt; 4. 循环控制语句</p><p>第2次：2.条件判断语句 &#x3D;&gt; 3. 循环体 &#x3D;&gt; 4. 循环控制语句</p><p>第3次：2.条件判断语句 &#x3D;&gt; 3. 循环体 &#x3D;&gt; 4. 循环控制语句</p><h3 id="5-For循环"><a href="#5-For循环" class="headerlink" title="5.For循环"></a>5.For循环</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">for(①初始化条件语句; ②条件判断语句; ③循环后语句) &#123;</span><br><span class="line"></span><br><span class="line">④循环体</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>第一次循环： ①—②–true–④—③</p><p>第二次循环： ②–true–④—③</p><p>第三次循环： ②–true–④—③</p><p>第四次循环： ②–true–④—③</p><p>…</p><p>第n次循环： ②–false  —终止循环</p><h3 id="6-循环控制语句"><a href="#6-循环控制语句" class="headerlink" title="6.循环控制语句"></a>6.循环控制语句</h3><p>break: 表示结束当前层循环</p><p>continue:跳过本次循环</p><p>return：结束当前方法</p><h2 id="七、学习数组的标准"><a href="#七、学习数组的标准" class="headerlink" title="七、学习数组的标准"></a>七、学习数组的标准</h2><h3 id="1-如何定义一个数组-语法"><a href="#1-如何定义一个数组-语法" class="headerlink" title="1.如何定义一个数组(语法)"></a>1.如何定义一个数组(语法)</h3><h4 id="1-1-语法一-1"><a href="#1-1-语法一-1" class="headerlink" title="1.1 语法一"></a>1.1 语法一</h4><p>定义一个空数组（动态创建）</p><p>数据类型[] 名字&#x3D;new 数据类型[长度];</p><p>定义一个指定长度的空数组</p><h4 id="1-2-语法二"><a href="#1-2-语法二" class="headerlink" title="1.2 语法二"></a>1.2 语法二</h4><p>定义一个数组并赋值（静态）</p><p>数据类型[] 名字&#x3D;{值1，值2，值3，值4….}</p><h3 id="2-数组的取值与赋值"><a href="#2-数组的取值与赋值" class="headerlink" title="2.数组的取值与赋值"></a>2.数组的取值与赋值</h3><h4 id="2-1-赋值的语法"><a href="#2-1-赋值的语法" class="headerlink" title="2.1 赋值的语法"></a>2.1 赋值的语法</h4><p>数组名[索引位置]&#x3D;值;</p><h4 id="2-2-取值的语法"><a href="#2-2-取值的语法" class="headerlink" title="2.2 取值的语法"></a>2.2 取值的语法</h4><p>数组名[索引位置]</p><h3 id="3-注意"><a href="#3-注意" class="headerlink" title="3.注意"></a>3.注意</h3><p>1.取值与赋值不能超出索引范围</p><p>2.数组一旦定义长度不能更改</p><p>3.数组的遍历(把数组里面的每一个数据读取出来)</p><h2 id="八、方法"><a href="#八、方法" class="headerlink" title="八、方法"></a>八、方法</h2><p>和主方法差不多 ,主方法main,有特殊性程序运行的唯一入口</p><p>其他的方法，普通方法</p><p>方法：就是功能的封装</p><h3 id="1-方法如何定义"><a href="#1-方法如何定义" class="headerlink" title="1.方法如何定义"></a>1.方法如何定义</h3><p>语法：</p><p>[修饰符] 返回值类型 方法名([形参1,形参2,..]){</p><p>&#x2F;&#x2F;方法体，这个方法的功能逻辑代码</p><p>}</p><p>void：返回值类型之一，没有返回值[占位符，为了满足语法需要]</p><h3 id="2-方法调用"><a href="#2-方法调用" class="headerlink" title="2.方法调用"></a>2.方法调用</h3><p>程序只会执行main方法里面的内容</p><p>只能在main里面去调用普通方法</p><h4 id="2-1-方法名"><a href="#2-1-方法名" class="headerlink" title="2.1  方法名()"></a>2.1  方法名()</h4><p>   调用者和被调用者，必须在同一个类里面，两者要么都有static修饰，要么都没有static修饰</p><h4 id="2-2-类名-方法名"><a href="#2-2-类名-方法名" class="headerlink" title="2.2 类名.方法名()"></a>2.2 类名.方法名()</h4><p>被调用的方法有static修饰   类名：被调用方法所在类的类名【必须掌握，用的非常多】</p><h4 id="2-3-对象名-方法名"><a href="#2-3-对象名-方法名" class="headerlink" title="2.3 对象名.方法名()"></a>2.3 对象名.方法名()</h4><p> 被调用的方法没有static修饰【暂时不管】【必须掌握，用的非常多】</p><h3 id="程序运行的唯一入口"><a href="#程序运行的唯一入口" class="headerlink" title="程序运行的唯一入口"></a>程序运行的唯一入口</h3><p>​      1.main 执行的顺序 还是从上到下依次执行，遇到调用方法的时    候，把方法内部的逻辑全部执行完成以后，再继续往下执行<br>        2.方法的每一次调用都是完全独立的</p><h3 id="3-形参"><a href="#3-形参" class="headerlink" title="3.形参"></a>3.形参</h3><p>形式参数，注重只是传出的参数类型,方法在设计的时候不确定的值 （由用户在调用的时候才传入的值）</p><p>方法名(数据类型 变量名,数据类型 变量名,….)<br>*</p><h3 id="4-返回值类型"><a href="#4-返回值类型" class="headerlink" title="4.返回值类型"></a>4.返回值类型</h3><h4 id="4-1-void"><a href="#4-1-void" class="headerlink" title="4.1 void"></a>4.1 void</h4><p>​没有返回值，void只是占位满足语法需求</p><h4 id="4-2数据类型（学习过的所有数据类型）："><a href="#4-2数据类型（学习过的所有数据类型）：" class="headerlink" title="4.2数据类型（学习过的所有数据类型）："></a>4.2数据类型（学习过的所有数据类型）：</h4><p>​方法执行结束以后 返回一个指定类型的 数据</p><p>return 返回值;  返回数据的语法</p><p>把方法内部的执行结果返回给方法的调用者</p><h3 id="5-调用者对于方法的返回值有哪些处理方式？"><a href="#5-调用者对于方法的返回值有哪些处理方式？" class="headerlink" title="5.调用者对于方法的返回值有哪些处理方式？"></a>5.调用者对于方法的返回值有哪些处理方式？</h3><h4 id="5-1-直接打印"><a href="#5-1-直接打印" class="headerlink" title="5.1   直接打印"></a>5.1   直接打印</h4><h4 id="5-2-使用变量接收"><a href="#5-2-使用变量接收" class="headerlink" title="5.2  使用变量接收"></a>5.2  使用变量接收</h4><h3 id="方法的重载"><a href="#方法的重载" class="headerlink" title="方法的重载"></a>方法的重载</h3><p>把同一类的方法，一般名字都保持一直。</p><p>Overload[重载] – Override[覆写]</p><p>方法名一致，形参列表不同【个数，类型，类型顺序】</p><h2 id="九、数组的存储模型"><a href="#九、数组的存储模型" class="headerlink" title="九、数组的存储模型"></a>九、数组的存储模型</h2><h3 id="1-1-栽"><a href="#1-1-栽" class="headerlink" title="1.1 栽"></a>1.1 栽</h3><p>​存储的变量名 基本数据类型的值</p><h3 id="1-2-堆"><a href="#1-2-堆" class="headerlink" title="1.2 堆"></a>1.2 堆</h3><p>​    引用数据类型的值</p><h2 id="十、方法调用的时候"><a href="#十、方法调用的时候" class="headerlink" title="十、方法调用的时候"></a>十、方法调用的时候</h2><p>​基本数据类型传递的值得本身，引用数据类型传递的是地址的引用</p><h2 id="十一、可变参数"><a href="#十一、可变参数" class="headerlink" title="十一、可变参数"></a>十一、可变参数</h2><p>​语法在定义方法的时候 可以使用数据类型</p><p>​可变参数的本质还是数组</p><p>​注意：在定义方法的时候 只能有一个可变参数，并且放在方法形参的末尾</p><h2 id="十二、for—each-增强for循环"><a href="#十二、for—each-增强for循环" class="headerlink" title="十二、for—each  增强for循环"></a>十二、for—each  增强for循环</h2><p>本质还是for</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">for(数据类型 变量名 :数据源)&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>变量名：就是循环以后数组里面的每一个值</p><p>数据类型：数组里面装的是什么类型</p><p>特点：foreach 没有下标</p><p>以后在使用的过程中，什么时候使用for循环 什么时候使用for–each</p><p>如果要用到索引，必须要使用普通for循环</p><h2 id="十三、javadoc"><a href="#十三、javadoc" class="headerlink" title="十三、javadoc"></a>十三、javadoc</h2><p>System</p><p>static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)</p><p>将指定源数组中的数据从指定位置复制到目标数组的指定位置。</p><p>src - 源数组。<br>srcPos - 源数组中的起始位置。<br>dest - 目标数组。<br>destPos - 目的地数据中的起始位置。<br>length - 要复制的数组元素的数量。</p><h2 id="十四、构造方法"><a href="#十四、构造方法" class="headerlink" title="十四、构造方法"></a>十四、构造方法</h2><h3 id="1-什么是构造方法？"><a href="#1-什么是构造方法？" class="headerlink" title="1.什么是构造方法？"></a>1.什么是构造方法？</h3><p>构造方法主要是用来创建对象</p><p>构造方法的语法</p><p>要求：没有返回值类型，方法名和类名保持一致（包括大小写）</p><p>[修饰符] 类名([形参]){<br>*</p><p>}</p><h3 id="1-2构造方法的作用"><a href="#1-2构造方法的作用" class="headerlink" title="1.2构造方法的作用"></a>1.2构造方法的作用</h3><p>1.主要使用来创建对象的,没有可用的构造方法 就不能创建对象</p><p>2.创建对象的时候赋值</p><h3 id="1-3构造方法的注意点"><a href="#1-3构造方法的注意点" class="headerlink" title="1.3构造方法的注意点"></a>1.3构造方法的注意点</h3><p>1.每一个类都有一个隐式公共无参数的构造方法–学习了反射就能够证明</p><p>2.如果类里面显示的写了构造方法，隐式的无参数的构造方法就不存在了—–如果要显示的添加构造方法，一般建议把无参数的构造方法也加上</p><h3 id="1-4问构造方法和方法有什么区别？"><a href="#1-4问构造方法和方法有什么区别？" class="headerlink" title="1.4问构造方法和方法有什么区别？"></a>1.4问构造方法和方法有什么区别？</h3><p>构造方法               方法</p><p>1.返回值类型             无                  有</p><p>2.方法的名字           必须和类名一致        无特殊要求</p><p>3.static              不能修饰            可以修饰</p><p>4.调用方式               new              类名.&#x2F;对象名.</p><p>5.功能                 创建对象            普通工具</p><p>public Account(){} 是</p><p>public void Account(){} 不是【不建议这么去定义普通方法】</p><h2 id="十五、匿名对象"><a href="#十五、匿名对象" class="headerlink" title="十五、匿名对象"></a>十五、匿名对象</h2><p>对象的生命周期:</p><p>开始—被创建的时候（new）</p><p>结束—被垃圾回收器回收的时候，失去引用的时候</p><p>对象的生命周期：</p><p>人的生命周期：</p><p>开始—出生</p><p>结束—死亡（心脏，脑死亡，失踪，被所有人遗忘的时候）</p><h2 id="十六、继承"><a href="#十六、继承" class="headerlink" title="十六、继承"></a>十六、继承</h2><p>public class 类名 extends 父类的类名{}</p><h3 id="1-可以继承哪些内容？"><a href="#1-可以继承哪些内容？" class="headerlink" title="1.可以继承哪些内容？"></a>1.可以继承哪些内容？</h3><p>属性</p><p>方法</p><h3 id="2-受哪些因数影响？"><a href="#2-受哪些因数影响？" class="headerlink" title="2. 受哪些因数影响？"></a>2. 受哪些因数影响？</h3><p> 非私有化的成员变量和方法</p><p> 构造方法不能被继承</p><h3 id="3-继承的特点"><a href="#3-继承的特点" class="headerlink" title="3. 继承的特点"></a>3. 继承的特点</h3><p>1.java里面3类只能单继承，一个类只能一个直接父类</p><p>2.java支持多层级继承</p><p>3.如果一类没有显示的去继承任何一个类，这个类继承于Object</p><p>Object:超类，所有类的直接或间接父类</p><h2 id="十七、方法覆写-Override"><a href="#十七、方法覆写-Override" class="headerlink" title="十七、方法覆写-Override"></a>十七、方法覆写-Override</h2><h3 id="1-什么情况下需要方法的覆写？"><a href="#1-什么情况下需要方法的覆写？" class="headerlink" title="1. 什么情况下需要方法的覆写？"></a>1. 什么情况下需要方法的覆写？</h3><p>当父类方法的功能无法满足子类的需要，需要方法覆写</p><h3 id="2-要求"><a href="#2-要求" class="headerlink" title="2. 要求"></a>2. 要求</h3><p>1.子类方法的权限修饰符，大于等于父类权限修饰符</p><p>2.子类方法的返回值类型必须要小于等于父类方法的返回值类型</p><p>3.方法.名一致</p><p>4.形参类型一致</p><p>方法名+形参列表&#x3D;方法签名</p><h4 id="2-1-一般情况下"><a href="#2-1-一般情况下" class="headerlink" title="2.1 一般情况下"></a>2.1 一般情况下</h4><p>方法的覆写都是把父类的方法直接copy过来，更改里面的方法体就ok</p><h4 id="2-2-方法调用的整体大纲"><a href="#2-2-方法调用的整体大纲" class="headerlink" title="2.2 方法调用的整体大纲"></a>2.2 方法调用的整体大纲</h4><p>一般来讲，在调用方法的时候有限找子类方法，如果子类没有，就去找父类的方法 </p><h2 id="十八、super"><a href="#十八、super" class="headerlink" title="十八、super"></a>十八、super</h2><h3 id="1-作用"><a href="#1-作用" class="headerlink" title="1. 作用"></a>1. 作用</h3><p>1.可以在子类构造方法里面调用父类的构造方法，必须写在第一行</p><p>2.当子类里面的方法或者属性和父类的方法或者属性重名的时候，区分二义性</p><h3 id="2-特点"><a href="#2-特点" class="headerlink" title="2. 特点"></a>2. 特点</h3><p>子类的构造方法里面，默认都是在调用父类的无参数构造方法</p><h3 id="3-super和this的区别"><a href="#3-super和this的区别" class="headerlink" title="3. super和this的区别"></a>3. super和this的区别</h3><p>this:就是指当期对象—-this就是对象</p><p>super:指的是父类的成员(属性，方法)，但是不是父类对象，不持有父类对象的地址引用</p><h2 id="十九、抽象类"><a href="#十九、抽象类" class="headerlink" title="十九、抽象类"></a>十九、抽象类</h2><p>抽象类定义的语法</p><p>把由abstract 修饰类 叫做抽象类</p><h3 id="1-1-抽象类里面有哪些成员"><a href="#1-1-抽象类里面有哪些成员" class="headerlink" title="1.1 抽象类里面有哪些成员"></a>1.1 抽象类里面有哪些成员</h3><p>普通方法</p><p>抽象方法</p><p>构造方法:有构造方法，但是不能创建对象，由protected修饰的，主要是用于继承的时候子类调用;</p><p>成员变量</p><h3 id="1-2-抽象方法"><a href="#1-2-抽象方法" class="headerlink" title="1.2 抽象方法"></a>1.2 抽象方法</h3><p>[父类定义了一些规范]</p><p>由abstract 修饰的方法叫做抽象方法，方法的没有方法体</p><p>子类继承父类以后，必须要去覆写父类的所有抽象方法</p><p>只能出现在抽象类中</p><p> abstact 抽象的 出现在修饰符与 返回值之间</p><p> 抽象类中可以有变量 方法  抽象方法（可有可无）</p><h3 id="1-3-目前这个知识点"><a href="#1-3-目前这个知识点" class="headerlink" title="1.3 目前这个知识点"></a>1.3 目前这个知识点</h3><p>1.必须知道抽象类的定义语法</p><p>2.抽象里面可以定义那些成员</p><p>3.抽象方法不能创建对象</p><p>4.子类必须要去覆写父类的所有抽象方法</p><h2 id="二十、接口"><a href="#二十、接口" class="headerlink" title="二十、接口"></a>二十、接口</h2><h3 id="1-接口的作用"><a href="#1-接口的作用" class="headerlink" title="1. 接口的作用"></a>1. 接口的作用</h3><p>1.用来定义规范</p><p>2.解耦</p><h3 id="2-后面这些功能体现"><a href="#2-后面这些功能体现" class="headerlink" title="2.后面这些功能体现"></a>2.后面这些功能体现</h3><p>1.jdbc 定义的规范</p><p>2.servlet 也是一套接口  定义了规范</p><h3 id="3-接口的语法"><a href="#3-接口的语法" class="headerlink" title="3.接口的语法"></a>3.接口的语法</h3><p>接口和类 是同一个级别，但是完全不同的两种类型</p><p>interface 接口名字{</p><p>}</p><p>接口的里面可以有哪些成员：</p><p>成员变量</p><p>抽象方法【百分之90接口只是提供抽象方法】</p><h3 id="4-在jdk的1-8以后新增很多新特性"><a href="#4-在jdk的1-8以后新增很多新特性" class="headerlink" title="4. 在jdk的1.8以后新增很多新特性"></a>4. 在jdk的1.8以后新增很多新特性</h3><p>1.可以有静态方法   -由static修饰的</p><p>2.可以有默认方法   -由default修饰的</p><p>实现的语法：</p><p>class 类名 implements 接口名{</p><p>&#x2F;&#x2F;必须要去覆写所有接口的抽象方法</p><p>}</p><h2 id="二十一、覆写的应用"><a href="#二十一、覆写的应用" class="headerlink" title="二十一、覆写的应用"></a>二十一、覆写的应用</h2><p>父类方法功能无法满足子类需求的时候 ，去覆写父类方法</p><h3 id="方法覆写的调用规则"><a href="#方法覆写的调用规则" class="headerlink" title="方法覆写的调用规则"></a>方法覆写的调用规则</h3><p>优先找子类的方法，如果子类没有，再找父类的方法</p><p>当继承的父类的某个方法，不满足现有的需求，那么可以在子类中进行重写</p><p>方法的重写：将父类的方法直接继承到子类中，主要改写，该方法体的内容</p><p>方法重写的条件：必须在继承关系中去实现</p><p>方法重写：修饰符（子类中修饰符权限更大） 返回值为void是，父类和子类中的返回值类型一致 如果父类中的返回值不为void类型 </p><p>​         那么子类中的返回值应该小于等于父类中的返回值为八大类型，那么子类的返回值应该与父类的返回值一致</p><p>自定义类型比较：进行排序使用</p><p>自定义类型比较的实施：在自定义类中重写equals方法</p><h2 id="二十二、Object"><a href="#二十二、Object" class="headerlink" title="二十二、Object"></a>二十二、Object</h2><p>boolean equals(Object obj)  指示一些其他对象是否等于此。[非常重要]</p><p>protected void finalize()  当垃圾收集确定不再有对该对象的引用时，垃圾收集器在对象上调用该对象。  –回收垃圾</p><h3 id="1-final-finally-finalize-区别？"><a href="#1-final-finally-finalize-区别？" class="headerlink" title="1. final finally finalize -区别？"></a>1. final finally finalize -区别？</h3><p>Class&lt;?&gt; getClass()  返回此 Object的运行时类。</p><p>int hashCode()  返回对象的哈希码值。  –对象存储的在内存里面的位置值</p><p>&#x3D;&#x3D; 是用来比较基本数据类型的值是否相等</p><p>如果用于引用数据类型的比较，比较的是两个对象的地址值</p><p>注意：特殊情况除外，例如String 以及八大基本数据类型对应的包装类除外</p><h3 id="2-讨论"><a href="#2-讨论" class="headerlink" title="2. 讨论"></a>2. 讨论</h3><p>比较两个对象，到底是应该比较两个对象的地址，还是比较两个对象的里面存储的数据？</p><p>例如 两张身份证长得一模一样    姓名 性别 出生年月 身份证号码  图片</p><p>在java领域里面 引用数据类型比较应该使用equals方法—Object[能够比较里面存储的数据]</p><p>注意：默认 equals方法底层还是 &#x3D;&#x3D; 在比较两个对象地址值是否相等，</p><p>覆写equals方法比较两个对象里面的值是否相等。</p><h3 id="3-思考：面试题"><a href="#3-思考：面试题" class="headerlink" title="3. 思考：面试题"></a>3. 思考：面试题</h3><p>说一说 &#x3D;&#x3D; 和 equals 的区别？</p><p>自己先尝试整理一个稍微专业一点的回答话术。</p><p>&#x3D;&#x3D; 用于比较基本数据类型的两个值是否相等，如果用于比较引用数据类型，比较的是两个对象地址值</p><p>equals:用于比较两个对象里面存储的数据是否相等，但是equals底层还是&#x3D;&#x3D;，所以我们在使用的时候要腹泻equals方法</p><h2 id="二十三、多态"><a href="#二十三、多态" class="headerlink" title="二十三、多态"></a>二十三、多态</h2><h3 id="1-例子"><a href="#1-例子" class="headerlink" title="1. 例子"></a>1. 例子</h3><p>一个人 是 人            Person p   &#x3D;  new Person()</p><p>一头猪 是 猪            Pig pig    &#x3D;    new Pig()</p><p>一个人 是 动物         Animal a    &#x3D;  new Pserson（）</p><p>一头猪 是 动物         Animal  a2 &#x3D; new Pig()</p><p>一个人 是 猪(错误)            Pig p &#x3D; new Person()</p><p>一头猪 是 人 (错误)           Person p &#x3D; new Pig()</p><h3 id="2-官方"><a href="#2-官方" class="headerlink" title="2. 官方"></a>2. 官方</h3><p>编译时类型和运行时类型不一致的情况叫做多态</p><h3 id="3-坊间"><a href="#3-坊间" class="headerlink" title="3. 坊间"></a>3. 坊间</h3><p>使用父类类型接收子类对象，或者使用接口 接收接口的实现类对象–多态</p><p>使用多态的时候，方法的调用的问题：</p><p>方法覆写以后，方法的调用顺序是不变的</p><h3 id="Super–父类相关"><a href="#Super–父类相关" class="headerlink" title="Super–父类相关"></a>Super–父类相关</h3><p>super用在子类中的–只有在子类中才会区别，到底是使用的父类的属性&#x2F;方法还是使用子类中的属性&#x2F;方法</p><p> super可以直接打印吗？</p><p>super代指的父类（没有持有父类的对象（没有创建））this可以直接打印，持有当前对象</p><p> Super():只能放在子类中的构造方法的第一行，子类创建对象的时候，先要调用父类的构造方法，是为了可以继承的相关属性和方法</p><h2 id="二十四、final"><a href="#二十四、final" class="headerlink" title="二十四、final"></a>二十四、final</h2><p>​也是一个修饰符，翻译过来是最终的</p><p>成员变量  局部变量 构造方法 普通方法   内部类, 类</p><h3 id="1-可以修饰内容"><a href="#1-可以修饰内容" class="headerlink" title="1. 可以修饰内容"></a>1. 可以修饰内容</h3><p>类，成员变量 局部变量 普通方法  内部类</p><h3 id="2-被final修饰以后有什么效果"><a href="#2-被final修饰以后有什么效果" class="headerlink" title="2. 被final修饰以后有什么效果"></a>2. 被final修饰以后有什么效果</h3><p>类：final修饰的类不能被其他类继承              开发中有没有类不允许继承？ String-八大基本数据类型对应的包装类</p><p>成员变量：final修饰的成员变量不允许更改值</p><p>局部变量：一旦赋值就不能个更改</p><p>普通方法：final修饰的方法不能够被覆写</p><h2 id="二十五、static"><a href="#二十五、static" class="headerlink" title="二十五、static"></a>二十五、static</h2><p>成员变量：被所有对象所共享  应用场景：火车站卖票，对象之间应该共享的属性</p><p>方法：修饰方法的时候仅仅只是为了方便调用，使用类名就可以直接调用，一般工具类的方法适合定义为static修饰的方法     例如 Arrays</p><p>面向对象阶段：如果要操作非static的成员变量的时候，不考虑static</p><p>静态方法不能操作非静态的成员变量</p><h3 id="1-static：修饰的成员正确的使用方式"><a href="#1-static：修饰的成员正确的使用方式" class="headerlink" title="1. static：修饰的成员正确的使用方式"></a>1. static：修饰的成员正确的使用方式</h3><h3 id="1-1-修饰成员变量"><a href="#1-1-修饰成员变量" class="headerlink" title="1.1 修饰成员变量"></a>1.1 修饰成员变量</h3><p>类名.属性名</p><p>修饰的方法：</p><p>类名.方法名();</p><h3 id="1-2-方法的调用"><a href="#1-2-方法的调用" class="headerlink" title="1.2 方法的调用"></a>1.2 方法的调用</h3><p>1.方法名(); 在同一个类里面，要么都被static修饰，要么都没有被static修饰</p><p>2.类名.方法名(); 被修饰的方法被static修饰</p><p>3.对象.方法名(); 被调用的方法没有被static修饰</p><h3 id="2-static修饰的成员的称呼"><a href="#2-static修饰的成员的称呼" class="headerlink" title="2. static修饰的成员的称呼"></a>2. static修饰的成员的称呼</h3><table><thead><tr><th>类名</th><th align="center">位置</th><th align="center">是否有static</th><th align="left">生命周期开始</th><th align="left">生命周期结束</th></tr></thead><tbody><tr><td>类变量</td><td align="center">类中</td><td align="center">有</td><td align="left">类被加载的时候</td><td align="left">类被卸载的时候</td></tr><tr><td>实例变量</td><td align="center">类中</td><td align="center">无</td><td align="left">创建对象的时候</td><td align="left">对象失去引用</td></tr><tr><td>局部变量</td><td align="center">方法代码块中</td><td align="center">无</td><td align="left"></td><td align="left"></td></tr></tbody></table><h2 id="二十六、匿名内部类"><a href="#二十六、匿名内部类" class="headerlink" title="二十六、匿名内部类"></a>二十六、匿名内部类</h2><p>Usb这个接口不能new 创建对象</p><h3 id="1-正常的顺序"><a href="#1-正常的顺序" class="headerlink" title="1. 正常的顺序:"></a>1. 正常的顺序:</h3><p>1.新建一个类 实现Usb这个接口</p><p>2.创建实现类对象,并调用接口方法</p><h3 id="2-匿名内部类使用场景："><a href="#2-匿名内部类使用场景：" class="headerlink" title="2. 匿名内部类使用场景："></a>2. 匿名内部类使用场景：</h3><p>1.接口的里面的抽象方法并不多（1-3个）</p><p>2.对于接口的实现类对象不会重复使用（只是需要一个对象用一次）</p><p>3.不想再去多创建一个实现类文件</p><h2 id="二十七、代码块"><a href="#二十七、代码块" class="headerlink" title="二十七、代码块"></a>二十七、代码块</h2><p>由 { 代码 } 包裹起来的代码 叫做代码块</p><p>从代码块存放的位置来讲把代码块分为3类：</p><h3 id="1-构造代码块"><a href="#1-构造代码块" class="headerlink" title="1. 构造代码块"></a>1. 构造代码块</h3><p>写在类里面的代码块，叫做构造代码块,创建对象的时候执行【没啥用】</p><p>因为构造代码块编译以后里面的内容就会放到构造方法中，所以构造代码块随着对象的创建而去执行</p><h3 id="2-静态代码块"><a href="#2-静态代码块" class="headerlink" title="2. 静态代码块"></a>2. 静态代码块</h3><p>放在类里面由static修饰的代码块【以后会使用】</p><p>随着类的加载而执行一次   应用场景</p><p>【加载配置文件，应为配置文件只是加载一次】</p><h3 id="3-局部代码块"><a href="#3-局部代码块" class="headerlink" title="3. 局部代码块"></a>3. 局部代码块</h3><p> 放在方法的内部，主要作用用于区分方法功能性【没啥用】</p><p>随着方法的执行而执行</p><h2 id="二十八、面对对象整体架构"><a href="#二十八、面对对象整体架构" class="headerlink" title="二十八、面对对象整体架构"></a>二十八、面对对象整体架构</h2><p><strong>面向过程关注过程每一个实现的步骤</strong></p><p>面向对象关注的结果把没有给步骤交给其他类和方法处理</p><p>面向对象编程：万物皆可对象将世间万物看不见的抽象成对象</p><p>对象：<strong>数据的集合，包含了属性和方法</strong></p><h3 id="核心内容：封装-继承-多态"><a href="#核心内容：封装-继承-多态" class="headerlink" title="核心内容：封装-继承-多态"></a>核心内容：封装-继承-多态</h3><h4 id="1-封装思想"><a href="#1-封装思想" class="headerlink" title="1. 封装思想"></a>1. 封装思想</h4><p>为了使成员变量更加安全和私密，给成员变量加上private进行私有化。</p><p>–先加上SetName GetName –pubilc</p><h4 id="2-继承思想"><a href="#2-继承思想" class="headerlink" title="2. 继承思想"></a>2. 继承思想</h4><h5 id="2-1-继承的好处"><a href="#2-1-继承的好处" class="headerlink" title="2.1 继承的好处"></a>2.1 继承的好处</h5><p>减少代码量&#x2F;减少重复的代码</p><h5 id="2-2-继承之后的效果"><a href="#2-2-继承之后的效果" class="headerlink" title="2.2 继承之后的效果"></a>2.2 继承之后的效果</h5><p>子类可以直接使用父类的属性&#x2F;方法 无需再定义</p><h5 id="2-3-继承的优点"><a href="#2-3-继承的优点" class="headerlink" title="2.3 继承的优点"></a>2.3 继承的优点</h5><p>如果父类中的属性&#x2F;方法，如果使用了private修饰，那么子类是无法继承的</p><p>子类无法同时继承多个类 但是继承支持多层继承</p><h4 id="3-多态思想"><a href="#3-多态思想" class="headerlink" title="3. 多态思想"></a>3. 多态思想</h4><p>创建了子类对象 使用父类来 接收 -这种场景称为多态</p><p>官方说法：编译时类型与运行时类型不一致的情况叫做多态</p><p>编译时类型：等号的左边，编译阶段编译器看成的类型</p><p> 运行时类型： 等号右边，运行阶段，对象真实的类型</p><h2 id="二十九、包装类"><a href="#二十九、包装类" class="headerlink" title="二十九、包装类"></a>二十九、包装类</h2><h3 id="1-什么是包装类"><a href="#1-什么是包装类" class="headerlink" title="1.什么是包装类"></a>1.什么是包装类</h3><p>答：就是针对8大基本数据类型，提供的类的表示形式<br> byteByte<br> shortShort<br> intInteger<br> longLong<br> floatFloat<br> doubleDouble<br> charCharacter<br> booleanBoolean</p><p> 例如 上面的就是基本数据类型对应的包装类，Byte 描述的就是 [-128,127] 这一类事物</p><h3 id="2-为什么要提供包装类"><a href="#2-为什么要提供包装类" class="headerlink" title="2.为什么要提供包装类"></a>2.为什么要提供包装类</h3><p>答：基本数据类型 只能单纯的表示一个数字或者值，类除了可以表示一个值 还可以提供方法</p><p>例如 byte 只能表示 [-128,127]的数字，但是包装类除了可以表示 [-128,127]的数字 提供的有对应一些方法</p><h3 id="3-包装类和基本数据类型有哪些不同"><a href="#3-包装类和基本数据类型有哪些不同" class="headerlink" title="3.包装类和基本数据类型有哪些不同"></a>3.包装类和基本数据类型有哪些不同</h3><h4 id="3-1"><a href="#3-1" class="headerlink" title="3.1"></a>3.1</h4><p>基本数据类型 有各自默认值</p><p>包装类 默认值是 null</p><h4 id="3-2"><a href="#3-2" class="headerlink" title="3.2"></a>3.2</h4><p>基本数据类型 不能够去调用方法</p><p>引用数据类型可以调用方法</p><h2 id="三十、包装类装箱与拆箱"><a href="#三十、包装类装箱与拆箱" class="headerlink" title="三十、包装类装箱与拆箱"></a>三十、包装类装箱与拆箱</h2><p>装箱：把基本数据类型赋值给一个对应的包装类的过程</p><p>自动装箱拆箱只支持 基本数据类型和其对应的包装类</p><p>拆箱：把一个包装类的类型 赋值给一个对应的基本数据类型的过程</p><p>享元模式：设计思想和常量池有点类似 轻量级框架设计</p><p>享元模式：把[-128,127]之间所有的数组都缓存起来，方便节约内存重复使用</p><p>包装类：享元模式   提前缓存好</p><p>String：常量池  用的时候先去找，没找到再缓存</p><p>结论：比较两个包装类型的数字是否想的还是应该使用equals</p><h2 id="三十一、String"><a href="#三十一、String" class="headerlink" title="三十一、String"></a>三十一、String</h2><p>表示字符串的</p><p>“abc” 和  new String(“abc”)都是String的对象</p><p>构造方法：</p><p>String()  初始化新创建的 String对象，</p><p>使其表示空字符序列。  相当于  “”</p><h2 id="三十二、String-的常用方法"><a href="#三十二、String-的常用方法" class="headerlink" title="三十二、String 的常用方法"></a>三十二、String 的常用方法</h2><p>char charAt(int index)  返回 char指定索引处的值。</p><p>String concat(String str)  将指定的字符串连接到该字符串的末尾。</p><p>boolean endsWith(String suffix)  测试此字符串是否以指定的后缀结尾。</p><p>int indexOf(int ch)  返回指定字符第一次出现的字符串内的索引。</p><p>boolean isEmpty()  返回 true如果，且仅当 length()为 0 。</p><p>int length()  返回此字符串的长度。</p><p>String replace(CharSequence target, CharSequence replacement)</p><p>将与字面目标序列匹配的字符串的每个子字符串替换为指定的字面替换序列。</p><p>String[] split(String regex)  将此字符串分割为给定的 regular expression的匹配。</p><p>String substring(int beginIndex)  返回一个字符串，该字符串是此字符串的子字符串。</p><p>String substring(int beginIndex, int endIndex)  返回一个字符串，该字符串是此字符串的子字符串。</p><p>char[] toCharArray()  将此字符串转换为新的字符数组。</p><p>String toLowerCase()  将所有在此字符 String使用默认语言环境的规则，以小写。</p><p>String toUpperCase()  将所有在此字符 String使用默认语言环境的规则大写。</p><p>String trim()  返回一个字符串，其值为此字符串，并删除任何前导和尾随空格。</p><h2 id="三十三、-x3D-x3D-和-equals区别？"><a href="#三十三、-x3D-x3D-和-equals区别？" class="headerlink" title="三十三、&#x3D;&#x3D; 和 equals区别？"></a>三十三、&#x3D;&#x3D; 和 equals区别？</h2><p>对于引用数据类型：</p><p>&#x3D;&#x3D; 比较的两个对象的地址值</p><p>equals 比较的是两个对象里面存储的数据</p><h2 id="三十六、String常量池"><a href="#三十六、String常量池" class="headerlink" title="三十六、String常量池"></a>三十六、String常量池</h2><p>按照对象的存储特点，每一个对象在堆里面的引用地址都不一致，如果使用&#x3D;&#x3D; 比较都应该是false</p><p>(1)当第一次使用String  str &#x3D; “A”; 的方式赋值，会将该字符串值【对象】放入到常量池<br>(2)当再次使用String  str &#x3D; “A”; 的方式会先检查常量池是否有”A”值，<br>①如果存在直接引用<br>②如果不存在，会创建”A”放入常量池<br>(3)字符串拼接<br>①常量方式拼接，并直接使用赋值符号赋值，会检查常量池<br>②变量方式拼接，不会检查常量池【注意】</p><p>结论：String的比较还是应该使用equals不能使用&#x3D;&#x3D;</p><h2 id="三十七、String-StringBuilder-StringBuffer-都是字符串"><a href="#三十七、String-StringBuilder-StringBuffer-都是字符串" class="headerlink" title="三十七、String StringBuilder StringBuffer 都是字符串"></a>三十七、String StringBuilder StringBuffer 都是字符串</h2><h3 id="构造方法"><a href="#构造方法" class="headerlink" title="构造方法"></a>构造方法</h3><p>StringBuffer(String str)  构造一个初始化为指定字符串内容的字符串缓冲区。</p><p>StringBuilder，StringBuffer</p><p>StringBuffer append(Object obj)  追加 Object参数的字符串表示。</p><p>【可以动态的拼接字符串】</p><p>使用场景：一般用于有大量的字符拼接的情况，例如生成 csv格式对账单{80-150w}</p><p>String 的拼接效率太低了</p><p>等到线程那一天学习：</p><p>StringBuffer:是线程安全的  效率稍低  使用单线程</p><p>StringBuilder:线程不安全的  效率最高 使用多线程</p><h2 id="三十八、Math"><a href="#三十八、Math" class="headerlink" title="三十八、Math"></a>三十八、Math</h2><h3 id="1-字段-PI"><a href="#1-字段-PI" class="headerlink" title="1. 字段  PI"></a>1. 字段  PI</h3><p>static double random()  返回带正号的 double 值，该值大于等于 0.0 且小于 1.0。</p><p>方法都不怎么常用，在某些特定领域用的就非常多（小猿搜题）</p><p>BigInteger（基本不用-了解）</p><p>可以用来去表示比Long更大的数字</p><h3 id="2-BigDecimal【重点】"><a href="#2-BigDecimal【重点】" class="headerlink" title="2. BigDecimal【重点】"></a>2. BigDecimal【重点】</h3><p>|-可以用来去表示精确浮点数</p><p>（double和float都不能精确的表示一个小数）</p><h4 id="2-1-构造方法"><a href="#2-1-构造方法" class="headerlink" title="2.1 构造方法:"></a>2.1 构造方法:</h4><p>BigDecimal(String val)   将 BigDecimal 的字符串表示形式转换为 BigDecimal。</p><p>形参为什么不给一个double去表示一个精确的小数</p><p>数字常用的操作  + - * &#x2F; 都是通过方法来完成</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> BigDecimal <span class="title function_">add</span><span class="params">(BigDecimal augend)</span>  <span class="comment">// 求和</span></span><br></pre></td></tr></table></figure><p>返回一个 BigDecimal，其值为 (this + augend)，</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">BigDecimal <span class="title function_">divide</span><span class="params">(BigDecimal divisor)</span>      <span class="comment">//除法</span></span><br></pre></td></tr></table></figure><p>返回一个 BigDecimal，其值为 (this &#x2F; divisor)，</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">BigDecimal <span class="title function_">multiply</span><span class="params">(BigDecimal multiplicand)</span>  <span class="comment">//乘法</span></span><br></pre></td></tr></table></figure><p>返回一个 BigDecimal，其值为 (this × multiplicand)，</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">BigDecimal <span class="title function_">subtract</span><span class="params">(BigDecimal subtrahend)</span>  <span class="comment">//减法</span></span><br></pre></td></tr></table></figure><p>返回一个 BigDecimal，其值为 (this - subtrahend)</p><h4 id="2-2-BigDecimal一般用于哪些行业和领域？"><a href="#2-2-BigDecimal一般用于哪些行业和领域？" class="headerlink" title="2.2 BigDecimal一般用于哪些行业和领域？"></a>2.2 BigDecimal一般用于哪些行业和领域？</h4><p>BigDecimal一般需要表示一些精确的小数的时候都需要使用它，涉及到钱相关的，建筑行业</p><p>关于数学数字处理 不是一味地四舍五入</p><p>数字的舍入方式：   银行卡的余额 一般是小数点后面 2位</p><p>金融领域里面：利息和手续费</p><p>利息 –例如312.359—312.35</p><p>手续费–例如0.231—-0.24</p><h2 id="三十九、java里面随机数获取方式"><a href="#三十九、java里面随机数获取方式" class="headerlink" title="三十九、java里面随机数获取方式"></a>三十九、java里面随机数获取方式</h2><h3 id="1-Math"><a href="#1-Math" class="headerlink" title="1. Math"></a>1. Math</h3><p>static double random()  返回带正号的 double 值，该值大于等于 0.0 且小于 1.0。</p><h3 id="2-Random"><a href="#2-Random" class="headerlink" title="2. Random"></a>2. Random</h3><p>int nextInt()   返回下一个伪随机数，它是此随机数生成器的序列中均匀分布的 int 值。</p><p>生成一个 int 范围内的随机数</p><p>int nextInt(int n)  返回一个伪随机数，它是取自此随机数生成器序列的、在 0（包括）和指定值（不包括）之间均匀分布的 int 值。<br>ThreadLocalRandom:—1.7版本</p><p>int nextInt(int origin, int bound)  返回指定原点（含）和指定边界（排除）之间的伪随机 int值。</p><p>生成 [origin,bound)</p><p>UUID:生成的是一个唯一不重复的随机数</p><p>static UUID randomUUID()  静态工厂检索一个类型4（伪随机生成）的UUID。</p><h2 id="四十、System"><a href="#四十、System" class="headerlink" title="四十、System"></a>四十、System</h2><p>static long currentTimeMillis()   返回以毫秒为单位的当前时间。</p><p>static void gc()  运行垃圾回收器。  java里面的垃圾回收器是自动回收</p><p>这个方法只能主动的催促运行垃圾回收器，但是不是立即运行</p><p>static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)</p><p>从指定源数组中复制一个数组，复制从指定的位置开始，到目标数组的指定位置结束。</p><h3 id="1-Runtime"><a href="#1-Runtime" class="headerlink" title="1. Runtime"></a>1. Runtime</h3><p>获取Runtime的对象</p><p>static Runtime getRuntime()  返回与当前 Java 应用程序相关的运行时对象。</p><p>方法</p><p>Process exec(String command)   在单独的进程中执行指定的字符串命令。 可以调用windows程序</p><p>void gc()   运行垃圾回收器。</p><h2 id="四十一、和时间相关的类"><a href="#四十一、和时间相关的类" class="headerlink" title="四十一、和时间相关的类"></a>四十一、和时间相关的类</h2><h3 id="1-java-util-Date-学习"><a href="#1-java-util-Date-学习" class="headerlink" title="1. java.util.Date[学习]"></a>1. java.util.Date[学习]</h3><h4 id="1-1-构造方法"><a href="#1-1-构造方法" class="headerlink" title="1.1 构造方法"></a>1.1 构造方法</h4><p>Date()  分配一个 Date对象，并初始化它，以便它代表它被分配的时间，测量到最近的毫秒。</p><p>Date(long date) 分配一个 Date对象，并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数，即1970年1月1日00:00:00 GMT。</p><p>方法或者类已弃用【已过时】</p><p>这一类的方法或者类都是不建议再使用了，但是不是不能用。</p><p>win10 —  win xp</p><h3 id="2-时间的格式化"><a href="#2-时间的格式化" class="headerlink" title="2. 时间的格式化"></a>2. 时间的格式化</h3><h4 id="2-1-为什么需要时间的格式化？"><a href="#2-1-为什么需要时间的格式化？" class="headerlink" title="2.1 为什么需要时间的格式化？"></a>2.1 为什么需要时间的格式化？</h4><p>默认打印时间的格式为：Sat Nov 13 14:19:49 CST 2021  不符合国内的习惯</p><p>SimpleDateFormat：时间格式化的类</p><p>SimpleDateFormat(String pattern)  使用给定模式 SimpleDateFormat并使用默认的 FORMAT语言环境的默认日期格式符号。</p><p>pattern：用户指定的格式   例如国内习惯时间   2021-11-13 14:23:56</p><p>yyyy-MM-dd HH:mm:ss</p><p>String format(Date date)  将日期格式化成日期&#x2F;时间字符串。</p><p>Date parse(String source)  从给定字符串的开始解析文本以生成日期。</p><h2 id="四十二、异常"><a href="#四十二、异常" class="headerlink" title="四十二、异常"></a>四十二、异常</h2><p>代码出现不正常的情况</p><h3 id="1-异常体系"><a href="#1-异常体系" class="headerlink" title="1. 异常体系"></a>1. 异常体系</h3><p>Object</p><p>|–Throwable</p><p>|–Error –体系下面的问题，可能都是一些硬件等问题，可能不是通过代码能解决的</p><p>例如一段程序需要联网传输数据</p><p>|–Exception–体系下面的问题，都是一些参数，调用方式等问题造成</p><h3 id="2-宏观说一下java里面的异常"><a href="#2-宏观说一下java里面的异常" class="headerlink" title="2.宏观说一下java里面的异常"></a>2.宏观说一下java里面的异常</h3><p>1.捕获异常</p><p>2.抛异常</p><p>在我看来不管是哪一种解决方案，都没真正的去处理异常本身的问题</p><h5 id="1-捕获异常"><a href="#1-捕获异常" class="headerlink" title="1.捕获异常"></a>1.捕获异常</h5><p>语法：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">try</span>&#123;</span><br><span class="line"> <span class="comment">//可能产生异常的代码</span></span><br><span class="line"> &#125;<span class="keyword">catch</span>(捕获的异常类型 e)&#123;<span class="comment">//e是形式参数</span></span><br><span class="line"> <span class="comment">//该异常捕获之后要做的操作</span></span><br><span class="line"> &#125;<span class="keyword">catch</span>(捕获的异常类型 e)&#123;<span class="comment">//e是形式参数</span></span><br><span class="line"> <span class="comment">//该异常捕获之后要做的操作</span></span><br><span class="line"> &#125;<span class="keyword">finally</span>&#123;<span class="comment">//视情况而定</span></span><br><span class="line"> <span class="comment">//异常发生之后一定会执行到的语句块：①流资源关闭②释放锁</span></span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure><p>执行流程：</p><p>如果try 里面的代码 出现了错误，就立即执行catch里面代码</p><p>如果try 里面的代码没有错误，就不执行catch里面的代码</p><p>finally里面的代码 无论try里面代码有没有发生异常都要去执行 finally里面的代码</p><h5 id="2-catch：里面的异常处理方案"><a href="#2-catch：里面的异常处理方案" class="headerlink" title="2. catch：里面的异常处理方案"></a>2. catch：里面的异常处理方案</h5><p>1.记录日志——方便后期排错–log4j</p><p>2.打印异常信息（前期多是这种方案）e.printStackTrace();</p><p>3.获取错误信息–可以做额外处理</p><h4 id="3-总结"><a href="#3-总结" class="headerlink" title="3. 总结"></a>3. 总结</h4><p>捕获异常有什么效果：对于可能发生异常代码做捕获的处理，在后期运行的如果发生异常不会因为异常而导致整个程序停止运行</p><h4 id="4-异常的处理方案2"><a href="#4-异常的处理方案2" class="headerlink" title="4. 异常的处理方案2"></a>4. 异常的处理方案2</h4><p>抛异常：不处理异常</p><p>语法：</p><p>在方法的后面加关键字throws 抛出的异常类型</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">void</span> 方法名字() <span class="keyword">throws</span> 异常类型<span class="number">1</span>,异常类型<span class="number">2</span>&#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h5 id="4-1-抛异常的执行特点"><a href="#4-1-抛异常的执行特点" class="headerlink" title="4.1 抛异常的执行特点"></a>4.1 抛异常的执行特点</h5><p>一旦发生异常后面的代码就停止执行</p><p>java里面的异常类是非常多的，其实大多数的异常类里面的都没有额外逻辑</p><p>java里面之所以定义很多异常类主要的目的就是为了进行错误的分类</p><p>例如：ArithmeticException：算术异常–一般是因为不符合数学规范造成错误</p><p>NullPointerException:空指针异常–一般是因为使用一个空对象去调用方法出现的错误</p><p>ArrayIndexOutOfBoundsException:索引越界–一般是因为数组的角标超出索引范围</p><p>ClassCastException:类型转换异常–一般是因为类型不一致之间的转换造成</p><h5 id="4-2-为什么需要自定义异常"><a href="#4-2-为什么需要自定义异常" class="headerlink" title="4.2 为什么需要自定义异常"></a>4.2 为什么需要自定义异常</h5><p>我们可以自己去扩展，异常的类型来符合功能业务的需要</p><h2 id="四十三、创建启动线程方法一"><a href="#四十三、创建启动线程方法一" class="headerlink" title="四十三、创建启动线程方法一"></a>四十三、创建启动线程方法一</h2><p>创建并启动线程的方式一</p><p>继承Thread类</p><p>public class Thread extends Object implements Runnable</p><p>1.写一个类继承Thread</p><p>2.覆写run方法</p><p>3.创建类的实例【对象】，并且调用start()方法</p><p>常用方法：</p><p>void start()  导致此线程开始执行;</p><p>Java虚拟机调用此线程的run方法。</p><p>【这个方法会开启一个新的线程并且调用run()方法】</p><p>注意点：</p><p>启动线程是调用的start()方法</p><h3 id="1-下面的代码有几个线程？"><a href="#1-下面的代码有几个线程？" class="headerlink" title="1.下面的代码有几个线程？"></a>1.下面的代码有几个线程？</h3><p>答：3个线程</p><p>main–主线程–开启两个新的线程</p><p>musicThread.start();</p><p>gameThread.start();</p><h3 id="2-如果我调用的是-run-和start-有什么区别"><a href="#2-如果我调用的是-run-和start-有什么区别" class="headerlink" title="2.如果我调用的是 run() 和start()有什么区别?"></a>2.如果我调用的是 run() 和start()有什么区别?</h3><p>答：调用run方法 仅仅只是在主线程，对象调用方法，不会开启新的线程</p><p>start()，开启一个新的线程，准备就绪去尝试分配CPU资源，由JVM去调用里面的run方法执行逻辑</p><p>1.每一个线程都应该做不同的事情</p><p>2.官方在定义这个run方法时候能不能去决定用户的业务逻辑–不能</p><p>3.覆写这个run方法主要的目的就是让用户自己去定义自己的逻辑</p><h3 id="3-Thread里面常用的一写方法的汇总"><a href="#3-Thread里面常用的一写方法的汇总" class="headerlink" title="3. Thread里面常用的一写方法的汇总"></a>3. Thread里面常用的一写方法的汇总</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">static</span> Thread <span class="title function_">currentThread</span><span class="params">()</span>  <span class="comment">//返回对当前正在执行的线程对象的引用。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">String <span class="title function_">getName</span><span class="params">()</span>  <span class="comment">//返回此线程的名称</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">setName</span><span class="params">(String name)</span>  <span class="comment">//将此线程的名称更改为等于参数 name 。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">sleep</span><span class="params">(<span class="type">long</span> millis)</span>  <span class="comment">//线程休眠</span></span><br></pre></td></tr></table></figure><h2 id="四十四、创建并启动线程方法二"><a href="#四十四、创建并启动线程方法二" class="headerlink" title="四十四、创建并启动线程方法二"></a>四十四、创建并启动线程方法二</h2><p>实现Runnable接口【掌握】</p><p>1.自己去新建一个类，实现Runnable接口</p><p>2.实现接口里面的run 方法 自己去定义线程的业务逻辑</p><p>3.创建一个Runnable实现类的对象，作为一个Thread对象的参数</p><p>4.调用start方法启动线程</p><h2 id="四十五、解决线程安全问题"><a href="#四十五、解决线程安全问题" class="headerlink" title="四十五、解决线程安全问题"></a>四十五、解决线程安全问题</h2><h3 id="1-同步方法"><a href="#1-同步方法" class="headerlink" title="1. 同步方法"></a>1. 同步方法</h3><p>1.把可能发生线程安全问题的代码抽取成一个方法</p><p>2.在方法上面添加一个synchronized</p><h3 id="2-同步代码块"><a href="#2-同步代码块" class="headerlink" title="2. 同步代码块"></a>2. 同步代码块</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">synchronized</span> (控制同步资源) &#123;</span><br><span class="line"></span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure><p>控制同步资源—–&gt;WindowThread.class —&gt;Class实例（唯一性） 在Jvm里面只有一份</p><h3 id="3-解决线程安全问题"><a href="#3-解决线程安全问题" class="headerlink" title="3. 解决线程安全问题"></a>3. 解决线程安全问题</h3><p>同步锁-Lock –接口</p><p>1.有一把锁</p><p>2.上锁</p><ol start="3"><li>做里面逻辑</li></ol><p>4.释放锁</p><p>Lock –接口—创建对象</p><p>–实现类ReentrantLock</p><p>常用方法：</p><p>void lock()  获得锁。  【上锁】</p><p>void unlock() 释放锁。</p><h3 id="4-注意"><a href="#4-注意" class="headerlink" title="4. 注意"></a>4. 注意</h3><p>锁为共享锁，必须要加static</p><p>在使用阻塞等待获取锁的方式中,必须在try代码块之外，并且在加锁方法与try代码块之间没有任何可能抛出异常的方法调用，，避免加锁成功后，在finally中无法解锁。</p><h2 id="四十六、定时器"><a href="#四十六、定时器" class="headerlink" title="四十六、定时器"></a>四十六、定时器</h2><h3 id="1-创建一个定时任务"><a href="#1-创建一个定时任务" class="headerlink" title="1. 创建一个定时任务"></a>1. 创建一个定时任务</h3><p>1.时间</p><p>2.任务</p><p>Timer【java.util】</p><p>线程调度任务以供将来在后台线程中执行的功能。 任务可以安排一次执行，或定期重复执行。</p><h3 id="2-构造方法"><a href="#2-构造方法" class="headerlink" title="2. 构造方法"></a>2. 构造方法</h3><p>Timer()  创建一个新的计时器。</p><h3 id="3-常用方法"><a href="#3-常用方法" class="headerlink" title="3. 常用方法"></a>3. 常用方法</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">cancel</span><span class="params">()</span>  <span class="comment">//终止此计时器，丢弃任何当前计划的任务。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">schedule</span><span class="params">(TimerTask task, Date time)</span>  <span class="comment">//在指定的时间安排指定的任务执行。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">schedule</span><span class="params">(TimerTask task, Date firstTime, <span class="type">long</span> period)</span>  <span class="comment">//从指定 的时间开始 ，对指定的任务执行重复的 固定延迟执行 。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">schedule</span><span class="params">(TimerTask task, <span class="type">long</span> delay)</span>  <span class="comment">//在指定的延迟之后安排指定的任务执行。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">schedule</span><span class="params">(TimerTask task, <span class="type">long</span> delay, <span class="type">long</span> period)</span>  <span class="comment">//在指定 的延迟之后开始 ，重新执行 固定延迟执行的指定任务。</span></span><br></pre></td></tr></table></figure><p>time:未来执行的时间点</p><p>System.currentTimeMillis() 当前的时间</p><p>System.currentTimeMillis()+1000*10 在当前时间上面+10秒钟</p><p>new Date(System.currentTimeMillis()+1000*10)  创建一个延后10秒钟的时间Date对象</p><h3 id="4-JDK官方能不能提前帮用户统一的定义好定时任务的逻辑-？"><a href="#4-JDK官方能不能提前帮用户统一的定义好定时任务的逻辑-？" class="headerlink" title="4. JDK官方能不能提前帮用户统一的定义好定时任务的逻辑 ？"></a>4. JDK官方能不能提前帮用户统一的定义好定时任务的逻辑 ？</h3><p>这任务具体的逻辑需要用户自己去写，官方来讲 顶多只能定义好标准【接口，抽象类】</p><p>断定TimerTask 不是接口 就是抽象类</p><p>task：任务</p><h2 id="四十七、数据装填的方式"><a href="#四十七、数据装填的方式" class="headerlink" title="四十七、数据装填的方式"></a>四十七、数据装填的方式</h2><p>1.变量—只能放指定类型的一个数据  booolean b&#x3D; true;</p><p>2.数组—能够放指定类型 多个数据</p><p>2.1  数组也有类型的约束  int[]  String[]</p><p>2.2  数组的长度一旦申明以后 长度就不能够改变了  new int[10];</p><h2 id="四十八、ArrayList"><a href="#四十八、ArrayList" class="headerlink" title="四十八、ArrayList"></a>四十八、ArrayList</h2><p>能够存储任意类型，任意长度的容器</p><h3 id="1-底层原理"><a href="#1-底层原理" class="headerlink" title="1. 底层原理"></a>1. 底层原理</h3><p>1.底层可以定义一个数组来存储数据  Object[]</p><p>2.添加数据方法【如果发现容量不够的时候，可以自动扩容】</p><p>3.提供一个获取数据方法【根据索引去获取】</p><p>4.返回存储了多少个数据的方法</p><p>5.删除数据的方法</p><h3 id="2-ArrayList里面的常用方法"><a href="#2-ArrayList里面的常用方法" class="headerlink" title="2.ArrayList里面的常用方法"></a>2.ArrayList里面的常用方法</h3><h4 id="1-使用频率高的"><a href="#1-使用频率高的" class="headerlink" title="1.使用频率高的"></a>1.使用频率高的</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">add</span><span class="params">(E e)</span>  <span class="comment">//将指定的元素添加到此列表的尾部。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">E <span class="title function_">get</span><span class="params">(<span class="type">int</span> index)</span> <span class="comment">// 返回此列表中指定位置上的元素。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">E <span class="title function_">remove</span><span class="params">(<span class="type">int</span> index)</span>  <span class="comment">// 移除此列表中指定位置上的元素。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">size</span><span class="params">()</span>   <span class="comment">//返回此列表中的元素数。</span></span><br></pre></td></tr></table></figure><h4 id="2-偶尔用一下"><a href="#2-偶尔用一下" class="headerlink" title="2.偶尔用一下"></a>2.偶尔用一下</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">add</span><span class="params">(<span class="type">int</span> index, E element)</span> <span class="comment">//将指定的元素插入此列表中的指定位置。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">clear</span><span class="params">()</span>    <span class="comment">//移除此列表中的所有元素。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Object[] toArray()  <span class="comment">//按适当顺序（从第一个到最后一个元素）返回包含此列表中所有元素的数组。</span></span><br></pre></td></tr></table></figure><h2 id="四十九、集合的遍历"><a href="#四十九、集合的遍历" class="headerlink" title="四十九、集合的遍历"></a>四十九、集合的遍历</h2><p>把集合里面的所有的数据取出来</p><h3 id="1-普通for循环"><a href="#1-普通for循环" class="headerlink" title="1.普通for循环"></a>1.普通for循环</h3><p>Object get(int index); 获取指定索引位置的值</p><p>int size(); 返回集合的长度</p><h3 id="2-增强for循环"><a href="#2-增强for循环" class="headerlink" title="2.增强for循环"></a>2.增强for循环</h3><h3 id="3-迭代器"><a href="#3-迭代器" class="headerlink" title="3.迭代器"></a>3.迭代器</h3><h4 id="3-1-获取迭代器"><a href="#3-1-获取迭代器" class="headerlink" title="3.1 获取迭代器"></a>3.1 获取迭代器</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Iterator <span class="title function_">iterator</span><span class="params">()</span>   <span class="comment">//返回一个在一组 T 类型的元素上进行迭代的迭代器</span></span><br></pre></td></tr></table></figure><h4 id="3-2-循环"><a href="#3-2-循环" class="headerlink" title="3.2 循环"></a>3.2 循环</h4><p>Iterator</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">hasNext</span><span class="params">()</span>  <span class="comment">//如果仍有元素可以迭代，则返回 true。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">E <span class="title function_">next</span><span class="params">()</span>   <span class="comment">//返回迭代的下一个元素。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">remove</span><span class="params">()</span>  <span class="comment">//移除一个元素</span></span><br></pre></td></tr></table></figure><p>一个list里面 现有数据[“AA”,”BB”,”CC”,”DD”,”EE”,”FF”,”GG”]</p><p>for(int i&#x3D;0;i&lt;list.size();i++){</p><p>list.remove(i)</p><p>}</p><p>答：还剩BB DD FF</p><p>原理为动态变化，当第一次删除时删除AA，还剩BB CC DD EE FF GG</p><p>当第二次删除时删下标为1的值也就是CC,还剩BB DD EE FF GG</p><p>当第三次删除下标为2的值也就是EE,还剩BB DD FF GG</p><p>当第四次删除下标为3的值也就是GG,还剩BB DD FF</p><p>i&#x3D;3时结束循环</p><p>第一次环：i &#x3D;0  [“BB”,”CC”,”DD”,”EE”,”FF”,”GG”]    i&#x3D;1  size&#x3D;6</p><p>第二次循环：i &#x3D;1  [“BB”,”DD”,”EE”,”FF”,”GG”] i&#x3D;2  size&#x3D;5</p><p>第三次循环：i &#x3D;2  [“BB”,”DD”,”FF”,”GG”] i&#x3D;3 size&#x3D;4</p><p>第四次循环：i &#x3D;3  [“BB”,”DD”,”FF”] i&#x3D;4 size&#x3D;3   判断为false 结束循环</p><p>请问以上代码 for循环几次 ，删除哪些数据，剩余哪些数据？</p><h3 id="重点：移除数据以后-list的size是会动态变化"><a href="#重点：移除数据以后-list的size是会动态变化" class="headerlink" title="重点：移除数据以后 list的size是会动态变化"></a>重点：移除数据以后 list的size是会动态变化</h3><p>for(int i&#x3D;0;i&lt;list.size();i++){</p><p>list.remove(i)</p><p>}</p><h2 id="五十、List（接口）"><a href="#五十、List（接口）" class="headerlink" title="五十、List（接口）"></a>五十、List（接口）</h2><p>ArrayList         LinkedList</p><p>都是集合容器</p><p>1.如何创建一个容器</p><p>2.如何添加数据</p><p>3.如何获取数据</p><p>4.遍历数据</p><p>5.移除数据</p><h3 id="1-构造方法"><a href="#1-构造方法" class="headerlink" title="1. 构造方法"></a>1. 构造方法</h3><p>LinkedList()  构造一个空列表。</p><h4 id="1-1-常用的方法【必须掌握】"><a href="#1-1-常用的方法【必须掌握】" class="headerlink" title="1.1 常用的方法【必须掌握】"></a>1.1 常用的方法【必须掌握】</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">add</span><span class="params">(E e)</span>   <span class="comment">//将指定元素添加到此列表的结尾。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">E <span class="title function_">get</span><span class="params">(<span class="type">int</span> index)</span>    <span class="comment">//返回此列表中指定位置处的元素。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">E <span class="title function_">remove</span><span class="params">(<span class="type">int</span> index)</span> <span class="comment">//移除此列表中指定位置处的元素。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">size</span><span class="params">()</span>   <span class="comment">//返回此列表中的元素数。</span></span><br></pre></td></tr></table></figure><h3 id="1-2-了解的方法【有印象】"><a href="#1-2-了解的方法【有印象】" class="headerlink" title="1.2 了解的方法【有印象】"></a>1.2 了解的方法【有印象】</h3><p>针对链表的结构 提供了很多操作头和尾的方法</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">addFirst</span><span class="params">(E e)</span>   <span class="comment">// 将指定元素插入此列表的开头。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">E <span class="title function_">getFirst</span><span class="params">()</span>  <span class="comment">//返回此列表的第一个元素。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">E <span class="title function_">getLast</span><span class="params">()</span>  <span class="comment">// 返回此列表的最后一个元素。</span></span><br></pre></td></tr></table></figure><h3 id="2-以后在工作中使用LinkedList还是ArrayList"><a href="#2-以后在工作中使用LinkedList还是ArrayList" class="headerlink" title="2. 以后在工作中使用LinkedList还是ArrayList?"></a>2. 以后在工作中使用LinkedList还是ArrayList?</h3><p>LinkedList:删除数据，添加数据速度较快</p><p>ArrayList:查询速度较快。</p><h2 id="五十二、Set"><a href="#五十二、Set" class="headerlink" title="五十二、Set"></a>五十二、Set</h2><p>(无序【添加顺序】不可重复的容器)</p><p>|–HashSet</p><p>|–TreeSet</p><h3 id="–HashSet"><a href="#–HashSet" class="headerlink" title="|–HashSet"></a>|–HashSet</h3><h4 id="1-如何创建容器HashSet"><a href="#1-如何创建容器HashSet" class="headerlink" title="1.如何创建容器HashSet"></a>1.如何创建容器HashSet</h4><p>构造方法</p><p>HashSet()   构造一个新的空 set</p><h4 id="2-维护数据的方法"><a href="#2-维护数据的方法" class="headerlink" title="2.维护数据的方法"></a>2.维护数据的方法</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">add</span><span class="params">(E e)</span>  <span class="comment">//如果 set 中尚未存在指定的元素，则添加此元素（可选操作）。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">clear</span><span class="params">()</span>     <span class="comment">//移除此 set 中的所有元素（可选操作）。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">remove</span><span class="params">(Object o)</span>   <span class="comment">// 如果 set 中存在指定的元素，则将其移除（可选操作）。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Iterator&lt;E&gt; <span class="title function_">iterator</span><span class="params">()</span>   <span class="comment">// 返回在此 set 中的元素上进行迭代的迭代器。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">size</span><span class="params">()</span>  <span class="comment">//返回 set 中的元素数（其容量）。</span></span><br></pre></td></tr></table></figure><p>|–HashSet –不允许放入重复的数据，</p><h4 id="3-HashSet判断重复的标准"><a href="#3-HashSet判断重复的标准" class="headerlink" title="3. HashSet判断重复的标准"></a>3. HashSet判断重复的标准</h4><p>1.先判断元素的hashCode 是否一致</p><p>2.在hashCode相等情况下。继续通过equals方法来判断两个数据是否相等</p><p>如果hashCode相等和equals的结果为true 就认为是同一个值</p><p>Hash–本身也是一套算法，如果说存储的数据特别多，有可能值不同，hashcode值是一致</p><p>HashSet 基于HashMap实现，底层也是键值对，hash值一致  数组+链表+红黑树去实现的（1.8）</p><h4 id="判断方法"><a href="#判断方法" class="headerlink" title="判断方法"></a>判断方法</h4><ol><li>在存储数据的时候，调用的hashCode的方法 </li><li>如果不同，就是两个不同的对象，就存储数据</li><li>如果相同，调用equals方法来把存储的数据和容器里面的数据比较</li><li>返回是false【数据不一致】  就存储数据</li><li>返回的是 true【存储的数据已经重复】 就不存储数据</li></ol><h4 id="结论"><a href="#结论" class="headerlink" title="结论"></a>结论</h4><p>如果一个类的对象要放到HashSet里面，覆写hashCode 和equals 方法</p><h3 id="–TreeSet"><a href="#–TreeSet" class="headerlink" title="|–TreeSet"></a>|–TreeSet</h3><p>里面放的数据类型要一直，内部需要排序</p><h4 id="1-构造方法-1"><a href="#1-构造方法-1" class="headerlink" title="1. 构造方法"></a>1. 构造方法</h4><p>TreeSet()   构造一个新的空 set</p><h4 id="2-维护数据的方法-1"><a href="#2-维护数据的方法-1" class="headerlink" title="2. 维护数据的方法"></a>2. 维护数据的方法</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">add</span><span class="params">(E e)</span>  <span class="comment">//如果 set 中尚未存在指定的元素，则添加此元素（可选操作）。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">clear</span><span class="params">()</span>   <span class="comment">// 移除此 set 中的所有元素（可选操作）。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">remove</span><span class="params">(Object o)</span>   <span class="comment">// 如果 set 中存在指定的元素，则将其移除（可选操作）。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Iterator&lt;E&gt; <span class="title function_">iterator</span><span class="params">()</span>   <span class="comment">// 返回在此 set 中的元素上进行迭代的迭代器。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">size</span><span class="params">()</span>  <span class="comment">//返回 set 中的元素数（其容量）。</span></span><br></pre></td></tr></table></figure><h3 id="3-自然排序"><a href="#3-自然排序" class="headerlink" title="3. 自然排序"></a>3. 自然排序</h3><p>放到TreeSet里面的数据类型必须实现Comparable接口，并覆写里面的方法 public int compareTo(T o);</p><p>Comparable</p><p>|–int compareTo(T o)</p><p>0: 代表是重复的元素</p><p>正整数： 升序</p><p>负整数：降序</p><h3 id="4-如果身份证要排序，怎么排？"><a href="#4-如果身份证要排序，怎么排？" class="headerlink" title="4. 如果身份证要排序，怎么排？"></a>4. 如果身份证要排序，怎么排？</h3><p>定制排序：</p><p>一个人 ： 名字  年龄   手机号  地区</p><p>不同的人 有不同的理解</p><p>1.根据年龄排序  年龄小的排前面  年龄大 后面</p><p>2.名字，姓氏的首字符排序</p><p>3.地区,地区的首字符</p><h2 id="五十三、Map"><a href="#五十三、Map" class="headerlink" title="五十三、Map"></a>五十三、Map</h2><p>Map是一个全新的结构,和Collection没有半毛钱关系</p><p>将键映射到值的对象。一个映射不能包含重复的键；每个键最多只能映射到一个值。</p><p>map存储数据的时候 键值对的形式</p><p>key不允许重复</p><p>一个key只能定义一个值</p><h3 id="1-Map–接口"><a href="#1-Map–接口" class="headerlink" title="1. Map–接口"></a>1. Map–接口</h3><p>|–HashMap</p><h4 id="1-1-构造方法-1"><a href="#1-1-构造方法-1" class="headerlink" title="1.1 构造方法"></a>1.1 构造方法</h4><p>HashMap()   构造一个具有默认初始容量 (16)</p><h4 id="1-2-常用方法"><a href="#1-2-常用方法" class="headerlink" title="1.2 常用方法"></a>1.2 常用方法</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Object <span class="title function_">put</span><span class="params">(Object key, Object value)</span>  <span class="comment">//将指定的值与此映射中的指定键关联（可选操作）。 将添加和修改合为一体</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">size</span><span class="params">()</span>  <span class="comment">//返回此映射中的键-值映射关系数。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">clear</span><span class="params">()</span>  <span class="comment">//从此映射中移除所有映射关系</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Object <span class="title function_">get</span><span class="params">(Object key)</span> <span class="comment">//根据key 获取值</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">V <span class="title function_">remove</span><span class="params">(Object key)</span>  <span class="comment">//如果存在一个键的映射关系，则将其从此映射中移除（可选操作）。</span></span><br></pre></td></tr></table></figure><h3 id="1-3-遍历方式"><a href="#1-3-遍历方式" class="headerlink" title="1.3 遍历方式"></a>1.3 遍历方式</h3><h4 id="遍历的方式一"><a href="#遍历的方式一" class="headerlink" title="遍历的方式一"></a>遍历的方式一</h4><p>把map里面所有的key取出来  返回一个Set集合</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Set&lt;K&gt; <span class="title function_">keySet</span><span class="params">()</span>   <span class="comment">//返回此映射中包含的键的 Set 视图。</span></span><br></pre></td></tr></table></figure><h4 id="遍历的方式二"><a href="#遍历的方式二" class="headerlink" title="遍历的方式二"></a>遍历的方式二</h4><p>把map里面所有的Value取出来</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Collection&lt;V&gt; <span class="title function_">values</span><span class="params">()</span>   <span class="comment">//返回此映射中包含的值Collection 视图</span></span><br></pre></td></tr></table></figure><h4 id="遍历的方式三"><a href="#遍历的方式三" class="headerlink" title="遍历的方式三"></a>遍历的方式三</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Set&lt;Map.Entry&lt;K,V&gt;&gt; entrySet()   <span class="comment">//返回此映射中包含的映射关系的 Set 视图。</span></span><br></pre></td></tr></table></figure><h2 id="五十四、TreeSet"><a href="#五十四、TreeSet" class="headerlink" title="五十四、TreeSet"></a>五十四、TreeSet</h2><p>构造一个新的空 set，该 set 根据其元素的自然顺序进行排序。</p><p>TreeSet(Comparator comparator)  构造一个新的空 TreeSet，它根据指定比较器进行排序。</p><p>TreeSet:存储数据</p><h3 id="自然排序"><a href="#自然排序" class="headerlink" title="自然排序"></a>自然排序</h3><p>类必须实现Comparable接口</p><h3 id="定制排序"><a href="#定制排序" class="headerlink" title="定制排序"></a>定制排序</h3><p>1.针对要存储的数据单独写一个比较类【排序的规则】，实现接口Comparator</p><p>2.覆写方法compare，编写比较的逻辑</p><p>3.在创建容器对象的时候传入比较类的对象</p><h2 id="五十五、泛型"><a href="#五十五、泛型" class="headerlink" title="五十五、泛型"></a>五十五、泛型</h2><p>作用：泛型就是一种约束，例如集合里面的数据，只能放指定类型</p><p>在定义的时候不去指定具体的类型，在使用的时候由使用者自己去指定类型</p><h3 id="1-注意事项"><a href="#1-注意事项" class="headerlink" title="1. 注意事项"></a>1. 注意事项</h3><p>1.泛型如果不加，类型就是Object</p><p>2.泛型不支持基本数据类型</p><p>Point<T> 就是一个泛型类</p><p>T由用户在使用的时候去指定T的类型</p><h3 id="2-定义泛型的规范"><a href="#2-定义泛型的规范" class="headerlink" title="2. 定义泛型的规范"></a>2. 定义泛型的规范</h3><p>T(Type):类型</p><p>E(Element):元素</p><p>K(Key):键</p><p>V(Value)：值</p><p>如果用double：领导找到你 说 double不精确</p><p>–把类型改String</p><p>String:操作起来可能有些不方便  要转换</p><p>–要不还是用double</p><h3 id="3-多个团队合作"><a href="#3-多个团队合作" class="headerlink" title="3. 多个团队合作"></a>3. 多个团队合作</h3><p>A团队：String要好用一点，准确</p><p>B团队：double要好用一些，操作起来方便 不用转换</p><h2 id="五十六、Properties"><a href="#五十六、Properties" class="headerlink" title="五十六、Properties"></a>五十六、Properties</h2><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">Properties</span> <span class="keyword">extends</span> <span class="title class_">Hashtable</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">load</span><span class="params">(InputStream inStream)</span>  <span class="comment">//从输入流中读取属性列表（键和元素对）。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">list</span><span class="params">(PrintStream out)</span>  <span class="comment">//将属性列表输出到指定的输出流。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">String <span class="title function_">getProperty</span><span class="params">(String key)</span>  <span class="comment">//用指定的键在此属性列表中搜索属性。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Object <span class="title function_">setProperty</span><span class="params">(String key, String value)</span>   <span class="comment">//调用 Hashtable 的方法 put。</span></span><br></pre></td></tr></table></figure><h2 id="五十七、collection与map的简易关系图"><a href="#五十七、collection与map的简易关系图" class="headerlink" title="五十七、collection与map的简易关系图"></a>五十七、collection与map的简易关系图</h2><p>Collection</p><p>–List：以特定顺序存储</p><p>–ArrayList、LinkList、Vector</p><p>–Set：不能包含重复的元素</p><p>–HashSet、TreeSet</p><p>Map</p><p>–HashMap、HashTable、TreeMap</p><h2 id="五十八、ArrayList-LinkedList-HashSet-TreeSet-HashMap关系图"><a href="#五十八、ArrayList-LinkedList-HashSet-TreeSet-HashMap关系图" class="headerlink" title="五十八、ArrayList LinkedList  HashSet  TreeSet   HashMap关系图"></a>五十八、ArrayList LinkedList  HashSet  TreeSet   HashMap关系图</h2><table><thead><tr><th></th><th>添加的方法</th><th>获取值方法</th><th>移除的方法</th><th>遍历的方式</th></tr></thead><tbody><tr><td>ArrayList</td><td>add()</td><td>get()</td><td>remove()</td><td>for、foreach、 Iterator</td></tr><tr><td>LinkedList</td><td>add()</td><td>get()</td><td>remove()</td><td>for、foreach、 Iterator</td></tr><tr><td>HashSet</td><td>add()</td><td>contains()</td><td>remove()</td><td>foreach、 Iterator</td></tr><tr><td>TreeSet</td><td>add()</td><td>无</td><td>无</td><td>foreach、 Iterator</td></tr><tr><td>HashMap</td><td>put()</td><td>get()</td><td>remove()</td><td>foreach、 Iterator</td></tr></tbody></table><h2 id="五十九、File"><a href="#五十九、File" class="headerlink" title="五十九、File"></a>五十九、File</h2><p>1.文件</p><p>2.文件夹</p><p>在Java里面一个File对象就是表示一个文件夹 或者 文件</p><h3 id="1-构造方法-2"><a href="#1-构造方法-2" class="headerlink" title="1. 构造方法"></a>1. 构造方法</h3><p>File(String pathname)  通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。<br> File(String parent, String child)   根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。</p><p>File(File parent, String child)  根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。</p><p>File这个类，既可以表示文件，又可以表示文件夹</p><h3 id="2-File里面的一些常用方法"><a href="#2-File里面的一些常用方法" class="headerlink" title="2. File里面的一些常用方法"></a>2. File里面的一些常用方法</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">createNewFile</span><span class="params">()</span>  <span class="comment">//创建文件   注意：不能创建文件夹</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">delete</span><span class="params">()</span>   <span class="comment">//删除此抽象路径名表示的文件或目录。</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//注意：只能去删除文件或者空文件夹</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">exists</span><span class="params">()</span>  <span class="comment">//测试此抽象路径名表示的文件或目录是否存在。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">String <span class="title function_">getName</span><span class="params">()</span>  <span class="comment">//返回由此抽象路径名表示的文件或目录的名称。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">String <span class="title function_">getParent</span><span class="params">()</span>  <span class="comment">//返回此抽象路径名父目录的路径名字符串；如果此路径名没有指定父目录，则返回 null。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">File <span class="title function_">getParentFile</span><span class="params">()</span>    <span class="comment">//返回此抽象路径名父目录的抽象路径名；如果此路径名没有指定父目录，则返回 null。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">isDirectory</span><span class="params">()</span>   <span class="comment">//测试此抽象路径名表示的文件是否是一个目录。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">isFile</span><span class="params">()</span>     <span class="comment">//测试此抽象路径名表示的文件是否是一个标准文件。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">mkdir</span><span class="params">()</span>  <span class="comment">// 创建此抽象路径名指定的目录。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">boolean</span> <span class="title function_">mkdirs</span><span class="params">()</span>  <span class="comment">//创建此抽象路径名指定的目录，包括所有必需但不存在的父目录。</span></span><br><span class="line"> </span><br></pre></td></tr></table></figure><p>注意：没有权限是不能操作的</p><h3 id="3-File里面关于列表的一些方法"><a href="#3-File里面关于列表的一些方法" class="headerlink" title="3. File里面关于列表的一些方法"></a>3. File里面关于列表的一些方法</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">static</span> File[] listRoots() <span class="comment">//列出可用的文件系统根。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">String[] list()  <span class="comment">//返回一个字符串数组，这些字符串指定此抽象路径名表示的目录中的文件和目录。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">File[] listFiles()  <span class="comment">//返回一个抽象路径名数组，这些路径名表示此抽象路径名表示的目录中的文件。</span></span><br></pre></td></tr></table></figure><h3 id="4-什么是递归调用"><a href="#4-什么是递归调用" class="headerlink" title="4. 什么是递归调用"></a>4. 什么是递归调用</h3><p>简单的理解在一个方法的内部自己调用自己</p><p>方法的递归调用的注意事项：</p><p>递归必须要有出口，如果没有出口最终只有一个结果 栈内存溢出 StackOverflowError</p><h2 id="六十、斐波拉契数列"><a href="#六十、斐波拉契数列" class="headerlink" title="六十、斐波拉契数列"></a>六十、斐波拉契数列</h2><h2 id="1-已知条件"><a href="#1-已知条件" class="headerlink" title="1. 已知条件"></a>1. 已知条件</h2><p>f(0)&#x3D;0   f(1)&#x3D;1</p><p>已知有个公式 f(n)&#x3D;f(n-1)+f(n-2) 前提条件 n&gt;&#x3D;2</p><p>f(2)&#x3D;f(1)+f(0) &#x3D;1</p><p>f(3)&#x3D;f(2)+f(1) &#x3D;2</p><p>f(4)&#x3D;f(3)+f(2) &#x3D;3</p><p>f(5)&#x3D;f(4)+f(3) &#x3D;5</p><p>f(6)&#x3D;f(5)+f(4) &#x3D;8</p><p>使用程序算 f(5) 等于多少？</p><h2 id="2-对于递归调用"><a href="#2-对于递归调用" class="headerlink" title="2.  对于递归调用"></a>2.  对于递归调用</h2><p>1.知道是怎么一回事就可以了</p><p>2.递归的次数越多，效率越低</p><p>3.理解这种思想就够了，后面其实很少用到</p><p>4.哪些地方要使用递归，有层级关系，菜单栏</p><h2 id="六十一、字节流"><a href="#六十一、字节流" class="headerlink" title="六十一、字节流"></a>六十一、字节流</h2><h3 id="1-字节输入流"><a href="#1-字节输入流" class="headerlink" title="1. 字节输入流"></a>1. 字节输入流</h3><p>1.每次读取的单位是一个字节</p><p>2.写程序去文件里面读取数据【把文件里面的数据取出来】</p><p>InputStream：字节输入流的所有类的父类</p><p>抽象类：不能直接创建对象【不能new】，如果要创建对象，找InputStream的子类</p><p>FileInputStream：用于读取诸如图像数据之类的原始字节流</p><h4 id="1-1-构造方法-2"><a href="#1-1-构造方法-2" class="headerlink" title="1.1 构造方法"></a>1.1 构造方法</h4><p>FileInputStream(File file) 就是去读取一个指定的文件</p><p>FileInputStream(String name) 读取一个指定文件【传入文件的路径】</p><h4 id="1-2-常识"><a href="#1-2-常识" class="headerlink" title="1.2 常识"></a>1.2 常识</h4><p>1.一个字母占一个字节</p><p>2.一个中文占两个字节【GBK】</p><h4 id="1-3-读取数据的方法"><a href="#1-3-读取数据的方法" class="headerlink" title="1.3 读取数据的方法"></a>1.3 读取数据的方法</h4><p>大多数读取的数据方法都叫-read</p><p>int read()  从此输入流中读取一个数据字节。 返回字母的ASCII ,如果已到达文件末尾，则返回 -1。</p><h3 id="2-字节输出流"><a href="#2-字节输出流" class="headerlink" title="2. 字节输出流"></a>2. 字节输出流</h3><p>1.输出的单位 字节</p><p>2.输出流，把数据写到文件里面去</p><p>OutputStream：抽象类</p><h4 id="2-1-FileOutputStream"><a href="#2-1-FileOutputStream" class="headerlink" title="2.1 FileOutputStream"></a>2.1 FileOutputStream</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileOutputStream(File file)   <span class="comment">//创建一个向指定 File 对象表示的文件中写入数据的文件输出流。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileOutputStream(File file, <span class="type">boolean</span> append)  <span class="comment">//创建一个向指定 File 对象表示的文件中写入数据的文件输出流。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileOutputStream(String name)  <span class="comment">//创建一个向具有指定名称的文件中写入数据的输出文件流。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileOutputStream(String name, <span class="type">boolean</span> append)   <span class="comment">//创建一个向具有指定 name 的文件中写入数据的输出文件流。</span></span><br></pre></td></tr></table></figure><p> append：如果为true 就是追加内容<br> append：如果是false 或者不写  就是覆盖内容</p><h4 id="2-2-输出内容的方法"><a href="#2-2-输出内容的方法" class="headerlink" title="2.2 输出内容的方法"></a>2.2 输出内容的方法</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">write</span><span class="params">(<span class="type">int</span> b)</span>  <span class="comment">//将指定字节写入此文件输出流。</span></span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">write</span><span class="params">(<span class="type">byte</span>[] b)</span>   <span class="comment">//将 b.length 个字节从指定 byte 数组写入此文件输出流中。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">write</span><span class="params">(<span class="type">byte</span>[] b, <span class="type">int</span> off, <span class="type">int</span> len)</span>  <span class="comment">//将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。</span></span><br></pre></td></tr></table></figure><p>off：从b这个数组里面第几个位置开始写出数据</p><p>len：写几个数据出去</p><h4 id="2-3-写出中文"><a href="#2-3-写出中文" class="headerlink" title="2.3 写出中文"></a>2.3 写出中文</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">write</span><span class="params">(<span class="type">byte</span>[] b)</span>   <span class="comment">//将 b.length 个字节从指定 byte 数组写入此文件输出流中。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">void</span> <span class="title function_">write</span><span class="params">(<span class="type">byte</span>[] b, <span class="type">int</span> off, <span class="type">int</span> len)</span>  <span class="comment">//将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。</span></span><br></pre></td></tr></table></figure><p>off：从b这个数组里面第几个位置开始写出数据</p><p>len：写几个数据出去</p><p>中文</p><p>gbk:占2个字节</p><p>UTF-8:占3个字节</p><h3 id="3-字节流特点"><a href="#3-字节流特点" class="headerlink" title="3. 字节流特点"></a>3. 字节流特点</h3><p>1.不适合读取中文，如果说一段数据 边读取边查看<br>2.多用于去读取视频，音频，图片等二进制文件【不适合去读取一些文字类的文件 txt doc】</p><h2 id="六十二、字符流"><a href="#六十二、字符流" class="headerlink" title="六十二、字符流"></a>六十二、字符流</h2><h3 id="1-字符输入流"><a href="#1-字符输入流" class="headerlink" title="1. 字符输入流"></a>1. 字符输入流</h3><p>Reader:用于读取字符流的抽象类</p><p>FileReader:</p><h4 id="1-1-构造方法-3"><a href="#1-1-构造方法-3" class="headerlink" title="1.1 构造方法"></a>1.1 构造方法</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileReader(String fileName)   <span class="comment">//在给定从中读取数据的文件名的情况下创建一个新 FileReader。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileReader(File file)  <span class="comment">//在给定从中读取数据的 File 的情况下创建一个新 FileReader。</span></span><br></pre></td></tr></table></figure><h4 id="1-2-读取数据"><a href="#1-2-读取数据" class="headerlink" title="1.2 读取数据"></a>1.2 读取数据</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">read</span><span class="params">()</span>   <span class="comment">//读取单个字符。  如果达到文件末尾 返回-1</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">read</span><span class="params">(<span class="type">char</span>[] cbuf)</span>  <span class="comment">//将字符读入数组。</span></span><br></pre></td></tr></table></figure><p>BufferReader 这个类里面有一个方法叫做readLine() 可以一次性读取一行数据</p><p>要求：大家立即查看api文档，学习这个类  读取一个java文件在控制台打印内容。</p><h3 id="2-字符输出流"><a href="#2-字符输出流" class="headerlink" title="2. 字符输出流"></a>2. 字符输出流</h3><p>Writer：-抽象类</p><h4 id="2-1-构造方法-1"><a href="#2-1-构造方法-1" class="headerlink" title="2.1 构造方法"></a>2.1 构造方法</h4><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileWriter(File file)   <span class="comment">//根据给定的 File 对象构造一个 FileWriter 对象。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileWriter(File file, <span class="type">boolean</span> append)  <span class="comment">//根据给定的 File 对象构造一个 FileWriter 对象。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileWriter(String fileName)   <span class="comment">//根据给定的文件名构造一个 FileWriter 对象。</span></span><br></pre></td></tr></table></figure><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">FileWriter(String fileName, <span class="type">boolean</span> append)   <span class="comment">//根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。</span></span><br></pre></td></tr></table></figure><h3 id="3-字符流特点"><a href="#3-字符流特点" class="headerlink" title="3. 字符流特点"></a>3. 字符流特点</h3><p>一般适合去操作文本文件</p><h2 id="六十三、字节输入流-—-字符输入流"><a href="#六十三、字节输入流-—-字符输入流" class="headerlink" title="六十三、字节输入流 —-字符输入流"></a>六十三、字节输入流 —-字符输入流</h2><p>InputStreamReader</p><p>InputStreamReader(InputStream in)  创建一个使用默认字符集的 InputStreamReader。</p><h2 id="六十四、把字节输出流—字符输出流"><a href="#六十四、把字节输出流—字符输出流" class="headerlink" title="六十四、把字节输出流—字符输出流"></a>六十四、把字节输出流—字符输出流</h2><p>OutputStreamWriter</p><p>OutputStreamWriter(OutputStream out)   创建使用默认字符编码的 OutputStreamWriter。</p><h2 id="六十五、自动关流"><a href="#六十五、自动关流" class="headerlink" title="六十五、自动关流"></a>六十五、自动关流</h2><p> java 1.7以后针对这种关闭流资源比较臃肿的情况提供了一种新的结构</p><p>需要自动关闭的流资源-必须实现AutoCloseable接口</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">try</span>(需要自动关闭的流资源)&#123;</span><br><span class="line"></span><br><span class="line">可能发生异常的代码块</span><br><span class="line"></span><br><span class="line">&#125;<span class="keyword">catch</span>()&#123;</span><br><span class="line"></span><br><span class="line">捕获异常之后要做的处理</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="六十六、-接口的默认方法"><a href="#六十六、-接口的默认方法" class="headerlink" title="六十六、 接口的默认方法"></a>六十六、 接口的默认方法</h2><h3 id="1-1-传统的方法（之前的）"><a href="#1-1-传统的方法（之前的）" class="headerlink" title="1.1. 传统的方法（之前的）"></a>1.1. 传统的方法（之前的）</h3><p>在Java8之前Java中接口里面的方法默认都是public abstract 修饰的抽象方法并且没有方法体；</p><h3 id="1-2-static方法"><a href="#1-2-static方法" class="headerlink" title="1.2. static方法"></a>1.2. static方法</h3><p>1、使用static修饰接口中的方法并且必须有主体；</p><p>2、接口的static方法只能够被接口本身调用；接口名.方法名（…）；</p><p>3、接口的static方法不能够被子接口继承；</p><p>4、接口的static方法不能够被实现类覆写及直接调用；</p><h3 id="1-3-default方法"><a href="#1-3-default方法" class="headerlink" title="1.3. default方法"></a>1.3. default方法</h3><p>在接口中可定义一个使用default修饰有方法体的方法，接口中可以对这个方法提供默认的一种实现。</p><p>1、使用default修饰接口中的方法并且必须有主体；</p><p>2、接口的default方法不能够被接口本身调用，需要接口的实例（实现类对象）来调用；</p><p>3、接口的default方法可以被子接口继承、覆写或者直接调用；</p><p>4、接口的default方法可以被实现类覆写及直接调用；</p><p>在接口中,经过static和default修饰的方法必须有方法体;</p><p>static修饰的方法调用方式为类.方法名</p><p>default修饰的方法必须是实现类的对象调用</p><p>static修饰的方法不能被子接口继承,default修饰的方法可以被子接口继承</p><p>并复写方法,就可以创建子接口实现类对象进行调用</p><h2 id="六十七、接口里面可以有哪些内容"><a href="#六十七、接口里面可以有哪些内容" class="headerlink" title="六十七、接口里面可以有哪些内容"></a>六十七、接口里面可以有哪些内容</h2><p>抽象方法</p><p>成员变量</p><h3 id="1-jdk8以后"><a href="#1-jdk8以后" class="headerlink" title="1. jdk8以后"></a>1. jdk8以后</h3><p>静态方法 — 静态方法如何去调用  类名.方法名()</p><p>默认方法 — 默认方法如何使用  实现类对象.方法名()</p><p>在Java8以后新增了一个注解</p><h3 id="1-2函数式接口"><a href="#1-2函数式接口" class="headerlink" title="1.2函数式接口"></a>1.2函数式接口</h3><p>就是一种要求，把只有一个抽象方法的接口叫做函数式接口【静态方法和默认方法个数无关】</p><p>回顾一下：我们以前学过的接口里面 哪些有以上特征【函数式接口】</p><p>Runnable</p><p>Comparator:定制排序</p><p>@FunctionalInterface:可以去验证一接口是否是函数式接口</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">基本语法：</span><br><span class="line">&lt;函数式接口&gt;  &lt;变量名&gt; = (参数<span class="number">1</span>，参数<span class="number">2.</span>..) -&gt; &#123;</span><br><span class="line">                  <span class="comment">//方法体</span></span><br><span class="line">   &#125;</span><br></pre></td></tr></table></figure><p>  (参数1，参数2…)表示参数列表；-&gt;表示连接符；{}内部是方法体<br>    1、&#x3D;右边的类型会根据左边的函数式接口类型自动推断；<br>    2、如果形参列表为空，只需保留()；<br>    3、如果形参只有1个，()可以省略，只需要参数的名称即可；<br>    4、如果执行语句只有1句，且无返回值，{}可以省略，若有返回值，则若想省去{}，则必须同时省略return，且执行语句也保证只有1句；<br>    5、形参列表的数据类型会自动推断；<br>    6、lambda不会生成一个单独的内部类文件；<br>    7、lambda表达式若访问了局部变量，则局部变量必须是final的，若是局部变量没有加final关键字，系统会自动添加，此后在修改该局部变量，会报错</p><h2 id="六十八、Lambda表达式"><a href="#六十八、Lambda表达式" class="headerlink" title="六十八、Lambda表达式"></a>六十八、Lambda表达式</h2><p>Lambda：主要是针对匿名内部类简写优化【借鉴了前端的语法】</p><p>Lambda表达式只能对函数式接口进行书写</p><p>lambda表达式不会产生字节码文件</p><p> java8以后，更推荐链式编程</p><p>Stream:就是针对数据进行一些连续的操作</p><h2 id="六十九、数据库的数据"><a href="#六十九、数据库的数据" class="headerlink" title="六十九、数据库的数据"></a>六十九、数据库的数据</h2><p>1.筛选</p><p>2.排序</p><p>3.分组</p><p>4.分页</p><h2 id="七十、-Stream流"><a href="#七十、-Stream流" class="headerlink" title="七十、 Stream流"></a>七十、 Stream流</h2><p>Stream（流）是一个来自数据源的元素队列并支持聚合操作</p><ol><li><p>&lt;strong元素队列&lt; strong&#x3D;””&gt;元素是特定类型的对象，形成一个队列。 Java中的Stream并不会存储元素，而是按需计算。&lt;&#x2F;strong元素队列&lt;&gt;</p></li><li><p>数据源 流的来源。 可以是集合，数组，I&#x2F;O channel（nio new IO非阻塞式IO）， 产生器generator 等。</p></li><li><p>聚合操作 类似SQL语句一样的操作， 比如filter, map, reduce, find, match, sorted等。</p></li></ol><p>和以前的Collection操作不同， Stream操作还有两个基础的特征：</p><ol start="4"><li>Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道， 如同流式风格（fluent style）。 这样做可以对操作进行优化， 比如延迟执行(laziness)和短路( short-circuiting)。</li><li>. 内部迭代： 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代， 这叫做外部迭代。 Stream提供了内部迭代的方式， 通过访问者模式(Visitor)实现。</li></ol><h3 id="1-1-生成流"><a href="#1-1-生成流" class="headerlink" title="1.1. 生成流"></a>1.1. 生成流</h3><p>在 Java 8 中, 集合接口有两个方法来生成流：</p><p>stream() − 为集合创建串行流。</p><p>parallelStream() − 为集合创建并行流。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;一、注释&quot;&gt;&lt;a href=&quot;#一、注释&quot; class=&quot;headerlink&quot; title=&quot;一、注释&quot;&gt;&lt;/a&gt;一、注释&lt;/h2&gt;&lt;p&gt;​	单行注释 &amp;#x2F;&amp;#x2F; 快捷键  ctrl+&amp;#x2F;&lt;/p&gt;
&lt;p&gt;​	多行注释  多行注释不能嵌套&lt;/</summary>
      
    
    
    
    <category term="java" scheme="https://dclef.icu/categories/java/"/>
    
    <category term="javase" scheme="https://dclef.icu/categories/java/javase/"/>
    
    
    <category term="javase" scheme="https://dclef.icu/tags/javase/"/>
    
  </entry>
  
  <entry>
    <title>hexo博客主题搭建</title>
    <link href="https://dclef.icu/2021/10/22/hexo%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/"/>
    <id>https://dclef.icu/2021/10/22/hexo%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/</id>
    <published>2021-10-22T01:00:00.000Z</published>
    <updated>2022-09-22T15:31:54.997Z</updated>
    
    <content type="html"><![CDATA[<p>搭建完以后你会发现hexo的初始主题有些难看，所以我们选择修改主题。<br>这里只讲next主题修改<br><strong>下载next</strong></p><p>先进入BLOG在themes文件夹里右键gitbash进入并输入</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">&gt;</span> <span class="string">git</span> <span class="string">clone</span> <span class="string">https://github.com/iissnan/hexo-theme-next</span> <span class="string">themes/next</span></span><br></pre></td></tr></table></figure><p><strong>修改主题</strong><br>在config.yml找到themes，这里可直接使用ctrl+shift+f快速查找<br>找到themses时，lanspeas修改为<strong>next</strong><br>然后在blog文件夹右键gitbash输入</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">&gt;</span> <span class="string">hexo</span> <span class="string">clean</span></span><br><span class="line"><span class="string">&gt;</span> <span class="string">hexo</span> <span class="string">g</span> <span class="string">-d</span> </span><br></pre></td></tr></table></figure><p>然后你就可以在你的入<a href="http://yourname.github.io看到你的新主题了/">http://yourname.github.io看到你的新主题了</a></p><p>注意事项<br>主题里也有个config.yml你需要修改<br>站点config.yml</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">&gt;</span> <span class="attr">title:</span> <span class="string">老猫的博客</span> <span class="comment">#网站标题</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="comment">#网站副标题</span></span><br><span class="line"><span class="attr">description:</span> <span class="comment">#网站描述</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">dclef</span> <span class="comment">#您的名字</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-Hans</span> <span class="comment">#网站使用的语言</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="comment">#网站时区。Hex 默认使用您电脑时区。</span></span><br></pre></td></tr></table></figure><p>创建分类标签归档关于</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">&gt;</span> <span class="string">hexo</span> <span class="string">new</span> <span class="string">page</span> <span class="string">categories</span></span><br><span class="line"><span class="string">&gt;</span> <span class="string">hexo</span> <span class="string">new</span> <span class="string">page</span> <span class="string">tags</span></span><br><span class="line"><span class="string">&gt;</span> <span class="string">hexo</span> <span class="string">new</span> <span class="string">page</span> <span class="string">about</span></span><br><span class="line"><span class="string">&gt;</span> <span class="string">hexo</span> <span class="string">new</span> <span class="string">page</span> <span class="string">archives</span></span><br></pre></td></tr></table></figure><p>分别在分类标签归档关于里的index文件中添加</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">&gt;</span> <span class="attr">type:</span> <span class="string">&quot;categories&quot;</span></span><br><span class="line"><span class="string">&gt;</span> <span class="attr">type:</span> <span class="string">&quot;tags&quot;</span></span><br><span class="line"><span class="string">&gt;</span> <span class="attr">type:</span> <span class="string">&quot;about&quot;</span></span><br><span class="line"><span class="string">&gt;</span> <span class="attr">type:</span> <span class="string">&quot;archives&quot;</span></span><br><span class="line"><span class="string">&gt;</span></span><br></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">&gt;</span>   <span class="comment"># 中文主题配置详解</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">override:</span> <span class="literal">false</span>    <span class="comment"># 设置为true，则完全重载默认配置，当你完全不想继承主题配置时很有用</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 站点信息设置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">favicon:</span>     <span class="comment"># favicon升级了，细化各种规格。</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">small:</span> <span class="string">/images/favicon-16x16-next.png#网站图标</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">medium:</span> <span class="string">/images/favicon-32x32-next.png</span>    <span class="comment"># medium类型应用`/favicon.ico`，否则网站图标异常</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">apple_touch_icon:</span> <span class="string">/images/apple-touch-icon-next.png</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">safari_pinned_tab:</span> <span class="string">/images/logo.svg</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#android_manifest: /images/manifest.json</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#ms_browserconfig: /images/browserconfig.xml</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">keywords:</span> <span class="string">&quot;Hexo, NexT&quot;</span>                        <span class="comment"># 网站默认关键词</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">rss:</span>                            <span class="comment"># rss配置。false禁止；留空提供站点提供的；也可以自己指定</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">footer:</span>                        <span class="comment"># footer块配置</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#since: 2019      # 网站建站年份，如果不配，采用当前年份</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">icon:</span> <span class="string">user</span>            <span class="comment"># 年份和版权声明之间的图标</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">copyright:</span>            <span class="comment"># 版权声明。如为空，则取站点配置的`author`值。</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">powered:</span> <span class="literal">true</span>        <span class="comment"># 显示Hexo的链接（Power by Hexo）</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">theme:</span>                    <span class="comment"># 在footer块中显示主题信息</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">enable:</span> <span class="literal">true</span>    <span class="comment"># 显示主题信息</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">version:</span> <span class="literal">true</span>    <span class="comment"># 显示主题的版本。</span></span><br><span class="line"><span class="string">&gt;</span>      </span><br><span class="line"><span class="string">&gt;</span>      </span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># SEO设置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 标记为权威网站，有利于SEO搜索。如果打开该标签，务必在站点配置中设置url。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">canonical:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">seo:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 如果index_with_subtitle为true，则在主页标题中增加subtitle。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># subtitle: Subtitle # 此处也可以覆写，它会替代站点配置文件中的内容</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">index_with_subtitle:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 菜单设置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 用法: `Key: /link/ || icon`</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Key 菜单名，如果语言文件中有对应项，则用对应项，否则就用菜单名。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># `||` 前面部分，表示目标链接。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># `||` 后面部分，表示菜单的FontAwesome图标名。默认为question图标。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">menu:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">home:</span> <span class="string">/</span> <span class="string">||</span> <span class="string">home</span>                        <span class="comment"># 主页链接及其图标</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#about: /about/ || user                # 关于页链接及其图标</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#tags: /tags/ || tags                  # 标签页链接及其图标</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#categories: /categories/ || th        # 分类页链接及其图标</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">archives:</span> <span class="string">/archives/</span> <span class="string">||</span> <span class="string">archive</span>        <span class="comment"># 归档页及其图标</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#schedule: /schedule/ || calendar</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#sitemap: /sitemap.xml || sitemap</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#commonweal: /404/ || heartbeat</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">menu_icons:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">true</span>                           <span class="comment"># 是否启用图标</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 主题的主题设置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 只能选择一套。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Schemes </span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#scheme: Muse#默认 Scheme，这是 NexT 最初的版本，黑白主调，大量留白</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#scheme: Mist # Muse 的紧凑版本，整洁有序的单栏外观</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#scheme: Pisces # 双栏 Scheme</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">scheme:</span> <span class="string">Gemini</span> <span class="comment"># 类似 Pisces</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 侧边栏设置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 社交链接</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 用法: `Key: permalink || icon`</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Key 是最终显示的标签，`||` 前是永久链接,`||` 后面是标签的FontAwesome图标，默认glob</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#social:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#GitHub: https://github.com/yourname || github</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#E-Mail: mailto:yourname@gmail.com || envelope</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#Google: https://plus.google.com/yourname || google</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#Twitter: https://twitter.com/yourname || twitter</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#FB Page: https://www.facebook.com/yourname || facebook</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#VK Group: https://vk.com/yourname || vk</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#StackOverflow: https://stackoverflow.com/yourname || stack-overflow</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#YouTube: https://youtube.com/yourname || youtube</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#Instagram: https://instagram.com/yourname || instagram</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#Skype: skype:yourname?call|chat || skype</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">social_icons:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">true</span>             <span class="comment"># 是否在社交链接标签上显示图标</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">icons_only:</span> <span class="literal">false</span>        <span class="comment"># 只显示图标</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">transition:</span> <span class="literal">false</span>        <span class="comment"># 是否显示过渡效果</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 友情链接</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">links_icon:</span> <span class="string">link</span>                              <span class="comment"># 链接图标</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">links_title:</span> <span class="string">Links</span>                            <span class="comment"># 链接标签文字</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">links_layout:</span> <span class="string">block</span>                           <span class="comment"># 链接样式</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#links_layout: inline</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#links:                                       # 一个一个的友情链接。用法为`标题： 链接`</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#Title: http://example.com/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Sidebar Avatar                              # 侧边栏上个人头像图片。也支持是动态gif。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#avatar: /images/avatar.gif</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 在侧边栏中是否显示文章标题目录。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">toc:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">true</span>                                <span class="comment"># 是否</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">number:</span> <span class="literal">true</span>                                <span class="comment"># 是否自动编号</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">wrap:</span> <span class="literal">false</span>                                 <span class="comment"># 标题目录是否自动换行</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 创作声明</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># http://creativecommons.org/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Available: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#creative_commons: by-nc-sa</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#creative_commons:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">sidebar:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># 侧边栏位置: left | right (只有Pisces、Gemini有效).</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">position:</span> <span class="string">left</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#position: right</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># 侧边栏显示 (只对Muse、Mist有效)</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">display:</span> <span class="string">post</span>                               <span class="comment"># 默认，在post文章扩展时显示。</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#display: always                            # 对所有页面都显示</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#display: hide                              # 只有点击按钮显示</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#display: remove                            # 完全删除，不显示</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># 侧边栏距离顶部菜单条的距离，单位像素(只对Pisces、Gemini有效).</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">offset:</span> <span class="number">12</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">b2t:</span> <span class="literal">false</span>            <span class="comment"># 在侧边栏下方是否显示回到顶部(只对Pisces、Gemini有效).</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">scrollpercent:</span> <span class="literal">false</span>  <span class="comment"># 是否显示滚动百分比</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">onmobile:</span> <span class="literal">false</span>       <span class="comment"># 是否在窄屏设备上显示侧边栏 (只对 Muse | Mist有效).</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 文章设置（post类型）</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">scroll_to_more:</span> <span class="literal">true</span>      <span class="comment"># 自动折叠&lt;!--more--&gt;下面的正文部分</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">save_scroll:</span> <span class="literal">false</span>        <span class="comment"># 自动为每篇文章保存滚动位置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Automatically excerpt description in homepage as preamble text.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">excerpt_description:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 自动摘要，不建议。请使用&lt;!-- more --&gt;精确控制</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">auto_excerpt:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span>         <span class="comment"># 启动开关</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">length:</span> <span class="number">150</span>           <span class="comment"># 从开始往后选取的摘要文字数量。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 摘要元数据</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">post_meta:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">item_text:</span> <span class="literal">true</span>              <span class="comment"># 是否显示“发表于”这几个文字</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">created_at:</span> <span class="literal">true</span>             <span class="comment"># 文章创建日期</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">updated_at:</span> <span class="literal">false</span>            <span class="comment"># 文章修改日期</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">categories:</span> <span class="literal">true</span>             <span class="comment"># 文章所属分类</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">post_wordcount:</span>                <span class="comment"># 字数统计。依赖https://github.com/willin/hexo-wordcount</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">item_text:</span> <span class="literal">true</span>              <span class="comment"># 是否显示文字</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">wordcount:</span> <span class="literal">false</span>             <span class="comment"># 显示字数</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">min2read:</span> <span class="literal">false</span>              <span class="comment"># 显示阅读时间</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">totalcount:</span> <span class="literal">false</span>            <span class="comment"># 显示总数</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">separated_meta:</span> <span class="literal">true</span>         <span class="comment"># 是否分开</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#wechat_subscriber:            # 微信公众号订阅</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#enabled: true               # 是否启用</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#qcode:                      # 二维码图片链接</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#description:                # 描述性文字，会放在二维码上方</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 打赏</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#reward_comment: # 打赏文字</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#wechatpay: /images/wechatpay.jpg   # 微信打赏二维码</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#alipay: /images/alipay.jpg         # 支付宝打赏二维码</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#bitcoin: /images/bitcoin.png       # 比特币打赏二维码</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">post_copyright:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span>                     <span class="comment"># 文档许可声明</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">license:</span> <span class="string">CC</span> <span class="string">BY-NC-SA</span> <span class="number">3.0</span>          <span class="comment"># 文档声明协议</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">license_url:</span> <span class="string">https://creativecommons.org/licenses/by-nc-sa/3.0/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Misc 主题专用设置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Reduce padding / margin indents on devices with narrow width.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">mobile_layout_economy:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Android Chrome header panel color ($black-deep).</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">android_chrome_color:</span> <span class="string">&quot;#222&quot;</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 定制Logo，只对默认Muse有效。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Options:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#   enabled: [true/false] - # 是否启用</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#   image: url-of-image   - # 图片url</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">custom_logo:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enabled:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">image:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 代码高亮主题。可选值normal | night | night eighties | night blue | night bright</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">highlight_theme:</span> <span class="string">normal</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 字体设置儿</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># - 请从谷歌查找字体</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># - 所有字体必须具有下列样式</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#     light, light italic, normal, normal italic, bold, bold italic</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">font:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span>                  <span class="comment"># 是否启用</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">host:</span>                          <span class="comment"># 字体host地址</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># Font options:                # 字体选项</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># `external: true`             # true，则会从上面的host地址装载</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># `family: Times New Roman`.</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># `size: xx`. 单位是`px`.</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># 在&lt;body&gt;元素中设置全局字体</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">global:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">family:</span> <span class="string">Lato</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">size:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># 标题（h1~h6字体，有global字体设置托底）</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">headings:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">family:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">size:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># post文章字体，有global字体设置托底</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">posts:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">family:</span></span><br><span class="line"><span class="string">&gt;</span>        <span class="comment"># logo字体设置，有global字体设置托底</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">logo:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">family:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">size:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># 代码块字体</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">codes:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">external:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">family:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">size:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 第三方服务设置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># MathJax数学公式设置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">mathjax:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">per_page:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">cdn:</span> <span class="string">//cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Han Support docs: https://hanzi.pro/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">han:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Swiftype Search API Key</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#swiftype_key:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#baidu_analytics:          # 百度分析的id</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#duoshuo_shortname:        # 多说的shorname</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Disqus Disqus评论支持</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">disqus:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">shortname:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">count:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Hypercomments</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#hypercomments_id:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 畅言</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">changyan:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">appid:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">appkey:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 韩国来必力网站评论系统.https://valine.js.org</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">valine:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">appid:</span>  <span class="comment"># your leancloud application appid</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">appkey:</span>  <span class="comment"># your leancloud application appkey</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">notify:</span> <span class="literal">false</span> <span class="comment"># mail notifier , https://github.com/xCss/Valine/wiki</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">verify:</span> <span class="literal">false</span> <span class="comment"># Verification code</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">placeholder:</span> <span class="string">Just</span> <span class="string">go</span> <span class="string">go</span> <span class="comment"># comment box placeholder</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">avatar:</span> <span class="string">mm</span> <span class="comment"># gravatar style</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">guest_info:</span> <span class="string">nick,mail,link</span> <span class="comment"># custom comment header</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">pageSize:</span> <span class="number">10</span> <span class="comment"># pagination size</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 友言评论</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#youyan_uid: your uid</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># LiveRe评论系统。从https://livere.com/insight/myCode获取uid</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#livere_uid: your uid</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Gitment评论系统。https://imsun.net/posts/gitment-introduction/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># You can get your Github ID from https://api.github.com/users/&lt;Github username&gt;</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">gitment:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">mint:</span> <span class="literal">true</span> <span class="comment"># RECOMMEND, A mint on Gitment, to support count, language and proxy_gateway</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">count:</span> <span class="literal">true</span> <span class="comment"># Show comments count in post meta area</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">lazy:</span> <span class="literal">false</span> <span class="comment"># Comments lazy loading with a button</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">cleanly:</span> <span class="literal">false</span> <span class="comment"># Hide &#x27;Powered by ...&#x27; on footer, and more</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">language:</span> <span class="comment"># Force language, or auto switch by theme</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">github_user:</span> <span class="comment"># MUST HAVE, Your Github ID</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">github_repo:</span> <span class="comment"># MUST HAVE, The repo you use to store Gitment comments</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">client_id:</span> <span class="comment"># MUST HAVE, Github client id for the Gitment</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">client_secret:</span> <span class="comment"># EITHER this or proxy_gateway, Github access secret token for the Gitment</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">proxy_gateway:</span> <span class="comment"># Address of api proxy, See: https://github.com/aimingoo/intersect</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">redirect_protocol:</span> <span class="comment"># Protocol of redirect_uri with force_redirect_protocol when mint enabled</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Baidu Share</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Available value:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#    button | slide</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Warning: Baidu Share does not support https.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#baidushare:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">##  type: button</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Share</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># This plugin is more useful in China, make sure you known how to use it.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># And you can find the use guide at official webiste: http://www.jiathis.com/.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Warning: JiaThis does not support https.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#jiathis:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">##uid: Get this uid from http://www.jiathis.com/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#add_this_id:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Share</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#duoshuo_share: true</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># NeedMoreShare2</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># This plugin is a pure javascript sharing lib which is useful in China.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># See: https://github.com/revir/need-more-share2</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Also see: https://github.com/DzmVasileusky/needShareButton</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># iconStyle: default | box</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># boxForm: horizontal | vertical</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># position: top / middle / bottom + Left / Center / Right</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># networks: Weibo,Wechat,Douban,QQZone,Twitter,Linkedin,Mailto,Reddit,</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#           Delicious,StumbleUpon,Pinterest,Facebook,GooglePlus,Slashdot,</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#           Technorati,Posterous,Tumblr,GoogleBookmarks,Newsvine,</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#           Evernote,Friendfeed,Vkontakte,Odnoklassniki,Mailru</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">needmoreshare2:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">postbottom:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">options:</span></span><br><span class="line"><span class="string">&gt;</span>           <span class="attr">iconStyle:</span> <span class="string">box</span></span><br><span class="line"><span class="string">&gt;</span>           <span class="attr">boxForm:</span> <span class="string">horizontal</span></span><br><span class="line"><span class="string">&gt;</span>           <span class="attr">position:</span> <span class="string">bottomCenter</span></span><br><span class="line"><span class="string">&gt;</span>           <span class="attr">networks:</span> <span class="string">Weibo,Wechat,Douban,QQZone,Twitter,Facebook</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">float:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">options:</span></span><br><span class="line"><span class="string">&gt;</span>           <span class="attr">iconStyle:</span> <span class="string">box</span></span><br><span class="line"><span class="string">&gt;</span>           <span class="attr">boxForm:</span> <span class="string">horizontal</span></span><br><span class="line"><span class="string">&gt;</span>           <span class="attr">position:</span> <span class="string">middleRight</span></span><br><span class="line"><span class="string">&gt;</span>           <span class="attr">networks:</span> <span class="string">Weibo,Wechat,Douban,QQZone,Twitter,Facebook</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Google Webmaster tools verification setting</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># See: https://www.google.com/webmasters/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#google_site_verification:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Google Analytics</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#google_analytics:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Bing Webmaster tools verification setting</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># See: https://www.bing.com/webmaster/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#bing_site_verification:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Yandex Webmaster tools verification setting</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># See: https://webmaster.yandex.ru/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#yandex_site_verification:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># CNZZ count</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#cnzz_siteid:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Application Insights</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># See https://azure.microsoft.com/en-us/services/application-insights/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># application_insights:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Make duoshuo show UA</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># user_id must NOT be null when admin_enable is true!</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># you can visit http://dev.duoshuo.com get duoshuo user id.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">duoshuo_info:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">ua_enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">admin_enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">user_id:</span> <span class="number">0</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#admin_nickname: Author</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Post widgets &amp; FB/VK comments settings.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Facebook SDK Support.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># https://github.com/iissnan/hexo-theme-next/pull/410</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">facebook_sdk:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span>       <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">app_id:</span>       <span class="comment">#&lt;app_id&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">fb_admin:</span>     <span class="comment">#&lt;user_id&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">like_button:</span>  <span class="comment">#true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">webmaster:</span>    <span class="comment">#true</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Facebook comments plugin</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># This plugin depends on Facebook SDK.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># If facebook_sdk.enable is false, Facebook comments plugin is unavailable.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">facebook_comments_plugin:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span>       <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">num_of_posts:</span> <span class="number">10</span>    <span class="comment"># min posts num is 1</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">width:</span>        <span class="number">100</span><span class="string">%</span>  <span class="comment"># default width is 550px</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">scheme:</span>       <span class="string">light</span> <span class="comment"># default scheme is light (light or dark)</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># VKontakte API Support.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># To get your AppID visit https://vk.com/editapp?act=create</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">vkontakte_api:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span>       <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">app_id:</span>       <span class="comment">#&lt;app_id&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">like:</span>         <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">comments:</span>     <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">num_of_posts:</span> <span class="number">10</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Star rating support to each article.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># To get your ID visit https://widgetpack.com</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">rating:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">id:</span>     <span class="comment">#&lt;app_id&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">color:</span>  <span class="string">fc6423</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Show number of visitors to each article.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># You can visit https://leancloud.cn get AppID and AppKey.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">leancloud_visitors:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">app_id:</span> <span class="comment">#&lt;app_id&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">app_key:</span> <span class="comment">#&lt;app_key&gt;</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Another tool to show number of visitors to each article.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># visit https://console.firebase.google.com/u/0/ to get apiKey and projectId</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># visit https://firebase.google.com/docs/firestore/ to get more information about firestore</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">firestore:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">collection:</span> <span class="string">articles</span> <span class="comment">#required, a string collection name to access firestore database</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">apiKey:</span> <span class="comment">#required</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">projectId:</span> <span class="comment">#required</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">bluebird:</span> <span class="literal">false</span> <span class="comment">#enable this if you want to include bluebird 3.5.1(core version) Promise polyfill</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Show PV/UV of the website/page with busuanzi.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Get more information on http://ibruce.info/2015/04/04/busuanzi/</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">busuanzi_count:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># count values only if the other configs are false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># custom uv span for the whole site</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">site_uv:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">site_uv_header:</span> <span class="string">&lt;i</span> <span class="string">class=&quot;fa</span> <span class="string">fa-user&quot;&gt;&lt;/i&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">site_uv_footer:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># custom pv span for the whole site</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">site_pv:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">site_pv_header:</span> <span class="string">&lt;i</span> <span class="string">class=&quot;fa</span> <span class="string">fa-eye&quot;&gt;&lt;/i&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">site_pv_footer:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># custom pv span for one page only</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">page_pv:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">page_pv_header:</span> <span class="string">&lt;i</span> <span class="string">class=&quot;fa</span> <span class="string">fa-file-o&quot;&gt;&lt;/i&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">page_pv_footer:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Tencent analytics ID</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># tencent_analytics:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Tencent MTA ID</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># tencent_mta:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">baidu_push:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Google Calendar</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Share your recent schedule to others via calendar page</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># API Documentation:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># https://developers.google.com/google-apps/calendar/v3/reference/events/list</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">calendar:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">calendar_id:</span> <span class="string">&lt;required&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">api_key:</span> <span class="string">&lt;required&gt;</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">orderBy:</span> <span class="string">startTime</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">offsetMax:</span> <span class="number">24</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">offsetMin:</span> <span class="number">4</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">timeZone:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">showDeleted:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">singleEvents:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">maxResults:</span> <span class="number">250</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Algolia Search</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">algolia_search:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">hits:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">labels:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">input_placeholder:</span> <span class="string">Search</span> <span class="string">for</span> <span class="string">Posts</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">hits_empty:</span> <span class="string">&quot;We didn&#x27;t find any results for the search: $&#123;query&#125;&quot;</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">hits_stats:</span> <span class="string">&quot;$&#123;hits&#125; results found in $&#123;time&#125; ms&quot;</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Local search</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Dependencies: https://github.com/flashlab/hexo-generator-search</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">local_search:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># if auto, trigger search by changing input</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># if manual, trigger search by pressing enter key or search button</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">trigger:</span> <span class="string">auto</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># show top n results per article, show all results by setting to -1</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">top_n_per_article:</span> <span class="number">1</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 标签设置</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 对外链采用BASE64进行加密解密</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 用法: &#123;% exturl text url &quot;title&quot; %&#125;</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 别名: &#123;% extlink text url &quot;title&quot; %&#125;</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">exturl:</span> <span class="literal">false</span>    <span class="comment"># 是否对外链进行加密解密</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Note tag (bs-callout).</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">note:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># Note tag style values:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#  - simple    bs-callout old alert style. Default.</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#  - modern    bs-callout new (v2-v3) alert style.</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#  - flat      flat callout style with background, like on Mozilla or StackOverflow.</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment">#  - disabled  disable all CSS styles import of note tag.</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">style:</span> <span class="string">simple</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">icons:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">border_radius:</span> <span class="number">3</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6).</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="comment"># Offset also applied to label tag variables. This option can work with disabled note tag.</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">light_bg_offset:</span> <span class="number">0</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Label tag.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">label:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Tabs tag.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">tabs:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">transition:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">tabs:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">labels:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">border_radius:</span> <span class="number">0</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#! ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#! 下面慎重修改，除非你指定它的意义</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#! ---------------------------------------------------------------</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Use velocity to animate everything.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">motion:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">async:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">transition:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="comment"># Transition variants:</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="comment"># fadeIn | fadeOut | flipXIn | flipXOut | flipYIn | flipYOut | flipBounceXIn | flipBounceXOut | flipBounceYIn | flipBounceYOut</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="comment"># swoopIn | swoopOut | whirlIn | whirlOut | shrinkIn | shrinkOut | expandIn | expandOut</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="comment"># bounceIn | bounceOut | bounceUpIn | bounceUpOut | bounceDownIn | bounceDownOut | bounceLeftIn | bounceLeftOut |</span></span><br><span class="line"><span class="string">&gt;</span> <span class="string">bounceRightIn</span> <span class="string">|</span> <span class="string">bounceRightOut</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="comment"># slideUpIn | slideUpOut | slideDownIn | slideDownOut | slideLeftIn | slideLeftOut | slideRightIn | slideRightOut</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="comment"># slideUpBigIn | slideUpBigOut | slideDownBigIn | slideDownBigOut | slideLeftBigIn | slideLeftBigOut | slideRightBigIn |</span></span><br><span class="line"><span class="string">&gt;</span> <span class="string">slideRightBigOut</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="comment"># perspectiveUpIn | perspectiveUpOut | perspectiveDownIn | perspectiveDownOut | perspectiveLeftIn | perspectiveLeftOut |</span></span><br><span class="line"><span class="string">&gt;</span> <span class="string">perspectiveRightIn</span> <span class="string">|</span> <span class="string">perspectiveRightOut</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">post_block:</span> <span class="string">fadeIn</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">post_header:</span> <span class="string">slideDownIn</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">post_body:</span> <span class="string">slideDownIn</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">coll_header:</span> <span class="string">slideLeftIn</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="comment"># Only for Pisces | Gemini.</span></span><br><span class="line"><span class="string">&gt;</span>         <span class="attr">sidebar:</span> <span class="string">slideUpIn</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Fancybox</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">fancybox:</span> <span class="literal">true</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Progress bar in the top during page loading.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">pace:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Themes list:</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-big-counter</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-bounce</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-barber-shop</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-center-atom</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-center-circle</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-center-radar</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-center-simple</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-corner-indicator</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-fill-left</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-flash</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-loading-bar</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-mac-osx</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment">#pace-theme-minimal</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># For example</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># pace_theme: pace-theme-center-simple</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">pace_theme:</span> <span class="string">pace-theme-minimal</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Canvas-nest</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">canvas_nest:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># three_waves</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">three_waves:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># canvas_lines</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">canvas_lines:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># canvas_sphere</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">canvas_sphere:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Only fit scheme Pisces</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Canvas-ribbon</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># size: The width of the ribbon.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># alpha: The transparency of the ribbon.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># zIndex: The display level of the ribbon.</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">canvas_ribbon:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">size:</span> <span class="number">300</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">alpha:</span> <span class="number">0.6</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">zIndex:</span> <span class="number">-1</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 脚本提供者设置。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 为js文件指定CDN，加快加载速度</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 注意，CDN版本一致。如果CDN提供https，无别加上https协议。</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">vendors:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">_internal:</span> <span class="string">lib</span>    <span class="comment"># 本网站提供脚本的路径，不要轻易修改。</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">jquery:</span>    <span class="string">https://cdn.bootcss.com/jquery/2.1.3/jquery.min.js</span> <span class="comment"># 内部版本2.1.3。CDN版本应一致</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">fancybox:</span>       </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">fancybox_css:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">fastclick:</span>     </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">lazyload:</span>        </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">velocity:</span>       </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">velocity_ui:</span>    </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">ua_parser:</span>      </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">fontawesome:</span>    </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">algolia_instant_js:    fontawesome:</span>   </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">algolia_instant_css:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">pace:</span>           </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">pace_css:</span></span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">canvas_nest:</span>     </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">three:</span>        </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">three_waves:</span>    </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">canvas_lines:</span>    </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">canvas_sphere:</span>   </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">canvas_ribbon:</span>  </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">han:</span>            </span><br><span class="line"><span class="string">&gt;</span>       <span class="attr">needMoreShare2:</span>  </span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># 资源种类</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">css:</span> <span class="string">css</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">js:</span> <span class="string">js</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">images:</span> <span class="string">images</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="comment"># Theme version</span></span><br><span class="line"><span class="string">&gt;</span>     <span class="attr">version:</span> <span class="number">5.1</span><span class="number">.4</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;搭建完以后你会发现hexo的初始主题有些难看，所以我们选择修改主题。&lt;br&gt;这里只讲next主题修改&lt;br&gt;&lt;strong&gt;下载next&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先进入BLOG在themes文件夹里右键gitbash进入并输入&lt;/p&gt;
&lt;figure class=&quot;</summary>
      
    
    
    
    <category term="教程" scheme="https://dclef.icu/categories/%E6%95%99%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>JAV磁力链和封面爬取</title>
    <link href="https://dclef.icu/2020/09/20/JAV/"/>
    <id>https://dclef.icu/2020/09/20/JAV/</id>
    <published>2020-09-20T01:00:00.000Z</published>
    <updated>2022-01-20T17:46:42.496Z</updated>
    
    <content type="html"><![CDATA[<p> 博主在朋友建议下搞了这一个教程<br>接下来按我做的就行了<br><strong>第一步：下载该脚本</strong></p><blockquote><p>链接：<a href="https://pan.baidu.com/s/1tKn9P0r0vw4dU0GkRIIafA">https://pan.baidu.com/s/1tKn9P0r0vw4dU0GkRIIafA</a><br>提取码：mwfw<br>复制这段内容后打开百度网盘手机App，操作更方便哦<br><strong>第二步：安装node.js</strong></p></blockquote><blockquote><p><a href="http://nodejs.cn/download/">http://nodejs.cn/download/</a></p></blockquote><p><img src="https://img-blog.csdnimg.cn/20191117234500963.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RyY2xlZg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述">安装时一直点下一步就行了（安装位置自己想放哪就放哪）<br><strong>第三步：安装cmder</strong></p><blockquote><p><a href="https://cmder.net/">https://cmder.net/</a><br><img src="https://img-blog.csdnimg.cn/20191117234819136.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RyY2xlZg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>安装迷你版即可</p></blockquote><p>安装完以后在cmder查看是否有npm和node版本出现如果有说明你安装成功并进入下一步<br><img src="https://img-blog.csdnimg.cn/20191117235144275.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RyY2xlZg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p><p>PS：最好讲cmder和JAV文件夹放在一起方便一些</p><p><del><strong>第四步：进入JAV文件夹，在JAV文件夹安装npm依赖</strong></del> </p><p>这一步可能不起作用因为我给的是压缩包0.0里面自带<br><img src="https://img-blog.csdnimg.cn/20191118000005835.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RyY2xlZg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p><p><strong>第四步：运用该脚本</strong></p><blockquote><p>输入node jav -h    你可以看到一下内容</p></blockquote><p><img src="https://img-blog.csdnimg.cn/2019111800050577.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RyY2xlZg==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述">接下来你就可以为所欲为了<br>设置我就不用说了就说一点如果要让你磁力链成功播放那就输入</p><blockquote><p>node jav -a </p></blockquote><p>搜索番号用</p><blockquote><p>node jav -a -s XXXX-XXXX(输入你想要的番号)</p></blockquote><p>如果只要一个链接就不需要-a</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt; 博主在朋友建议下搞了这一个教程&lt;br&gt;接下来按我做的就行了&lt;br&gt;&lt;strong&gt;第一步：下载该脚本&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;链接：&lt;a href=&quot;https://pan.baidu.com/s/1tKn9P0r0vw4dU0GkRII</summary>
      
    
    
    
    <category term="教程" scheme="https://dclef.icu/categories/%E6%95%99%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>C语言中一些问题和代码的解释</title>
    <link href="https://dclef.icu/2020/09/01/C%E8%AF%AD%E8%A8%80%E4%B8%AD%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98%E5%92%8C%E4%BB%A3%E7%A0%81%E7%9A%84%E8%A7%A3%E9%87%8A/"/>
    <id>https://dclef.icu/2020/09/01/C%E8%AF%AD%E8%A8%80%E4%B8%AD%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98%E5%92%8C%E4%BB%A3%E7%A0%81%E7%9A%84%E8%A7%A3%E9%87%8A/</id>
    <published>2020-09-01T01:00:00.000Z</published>
    <updated>2022-09-22T15:32:07.797Z</updated>
    
    <content type="html"><![CDATA[<p>引言：这只针对学过C语言但没学懂和自己的总结经验，本文只按照自己的思路，关于错误和问题一概不论。<br>关于简单的代码一概不论，这里只单讲入门且不能理解的东西，至于前期环境安装和一些基础问题可以参考其他博客和我以前的博客。</p><p>首先需要明白什么是<strong>指令和头文件</strong>？</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br></pre></td></tr></table></figure><p>#include是一条C预处理器指令，C编译器在编译前做的准备工作，而stdio.h是头文件，此文件包含共编译器使用的输入和输出函数，如scanf(),printf()等等。<br>没有此头文件，你前期的代码根本完成不了，那么问题来了</p><p><strong>为什么不内置一个输入和输出，这样做不是更简单吗？</strong></p><p>原因很简单，有些程序根本用不到输入和输出，那么不就多此一举了吗。</p><p><strong>main()函数</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">mian</span><span class="params">()</span></span><br></pre></td></tr></table></figure><p>此为入口文件，C程序通常情况下按main()开始执行。<br>int是返回值，但也是默认值。表明main()函数返回值是整数。<br>在现有学生阶段我们还可以用这样写</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">viod <span class="title function_">mian</span><span class="params">()</span></span><br></pre></td></tr></table></figure><p>但是这种写法并不认可，如果你用多个编辑器写的程序用此可能会报错。<br><strong>注释</strong>过于简单不讲只讲风格</p><blockquote><p>  &#x2F;* 这也是一条注释<br> ， 被分成两行。*&#x2F;<br> &#x2F;&#x2F;这种注释只能写一行</p></blockquote><p><strong>花括号</strong><br>花括号把main()函数括起来。一般而言，所有的C函数都使用花括号标记函数体的开始和结束。<strong>这是死规定，不能省略。</strong></p><p><strong>声明</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> i,j,k;</span><br></pre></td></tr></table></figure><p>此代码声明有i,j,k三个标识符，也就一个变量、函数或其他实体的名称。int 表明i,j,k三个标识符是一个整数。<br><strong>return语句</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br></pre></td></tr></table></figure><p>有返回值的C函数要有return语句。该语句以return关键字开始，后面是待返回的值，并以分号结尾。<br><strong>getchar();</strong><br>这行代码会让程序等待击键，窗口会在用户按下一个键后才关闭。</p><p>关于<strong>浮点数</strong><br>1是整数，1.00是浮点数</p><p>C语言提供3个附属关键字修饰基本整数类型：short、long和unsigned。<br>应记住以下几点。<br>short 类型占用的存储空间可能比int少，short是有符号类型。</p><p>long占用的存储空间可能比int多，适用于较大数值，long是有符号类型。</p><p>unsigned int或unsigned只用于非负值。这种类型与有符号类型表示的范围不同。例如，16位unsigned int允许的取值范围是0～65535，而不<br>是-32768～32767。用于表示正负号的位现在用于表示另一个二进制位，所以无符号整型可以表示更大的数。</p><p><strong>char类型</strong>用于储存字符，它与int 声明都是一样的，这里只讲数组。<br><strong>float</strong> 单精度浮点数，至少精确到小数点6位。<br><strong>double</strong> 双精度浮点数，至少能表示小数点10位。<br><strong>long double</strong>，更高精度，这里不讲。</p><p><strong>字符串</strong></p><p>C语言没有专门用于储存字符串的变量类型，字符串都被储存在char类型的数组中。数组由连续的存储单元组成，字符串中的字符被储存在相邻的存储单元中，每个单元储存一个字符。<br>注意每一个数组末尾都有字符\0，这为控字符，它表示字符串的结束，这意味着你定义<strong>储存40个字符</strong>实际上只能储存39个字符，剩下一个给空字符\0用的。</p><p><strong>明示常量</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">define</span> N 100<span class="comment">//定义N为100</span></span></span><br></pre></td></tr></table></figure><p><strong>printf函数</strong>（针对常用的）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">%c <span class="comment">//单个字符</span></span><br><span class="line">&amp;d <span class="comment">//十进制整数</span></span><br><span class="line">%f <span class="comment">//浮点数十进制数</span></span><br><span class="line">%p <span class="comment">//指针</span></span><br><span class="line">%s <span class="comment">//字符串</span></span><br></pre></td></tr></table></figure><p>用法</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%8d %8d %8d\n&quot;</span>, a, b c);<span class="comment">//这样会间隔一样比较美观</span></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%10s%10s%10%10\n&quot;</span>, <span class="string">&quot;学号&quot;</span>, <span class="string">&quot;姓名&quot;</span>, <span class="string">&quot;成绩&quot;</span>, <span class="string">&quot;平均成绩&quot;</span>);</span><br></pre></td></tr></table></figure><p><strong>scanf函数</strong><br>printf()函数使用变量、常量和表达式，而scanf()函数使用指向变量的指针。</p><p>如果用scanf()读取基本变量类型的值，在变量名前加上一个&amp;。<br>但如果scanf()把字符串读入字符数组中，就不用&amp;。<br>如以下代码</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> main</span><br><span class="line">&#123;</span><br><span class="line">  <span class="type">int</span> age;  <span class="comment">//变量</span></span><br><span class="line">  <span class="type">char</span> id[<span class="number">30</span>];  <span class="comment">//字符数组，用于储存字符串</span></span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;请输入你的年龄和学号\n&quot;</span>);</span><br><span class="line">  <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;age); <span class="comment">//这里需要使用&amp;</span></span><br><span class="line">  <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,id);<span class="comment">//字符串不需要&amp;</span></span><br><span class="line">  <span class="built_in">printf</span>(<span class="string">&quot;%d%s\n&quot;</span>,age,id);</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> &#125;</span><br><span class="line">  </span><br></pre></td></tr></table></figure><p><strong>常用运算符</strong><br><strong>赋值运算符：&#x3D;</strong></p><p>等号左侧是一个变量名，右侧是赋给该变量的值。符号&#x3D;被称为赋值运算符。赋值行为从右往左进行。<br>如<code>i=i+1;</code><br>该语句的意思是：找出变量 i 的值，把该值加 1，然后把新值赋值变量i</p><p> <strong>加法运算符:+</strong>(不讲)<br> **减法运算符：-*<em>（不讲）<br><strong>乘法运算符：</strong></em>（不讲）<br> **除法运算符：&#x2F;**（不讲）</p><p> <strong>运算符的优先级</strong><br> 对于C语言，运算符的优先级是从乘除到加减，优先级相同从左到右的顺序，当然&#x3D;除外。（&#x3D;是从右往左）</p><p><strong>递增运算符：++</strong><br>前缀递增符:<strong>++a</strong><br>后缀递增符:<strong>a++</strong><br>不同：优先级不同，前缀递增符先递增后运算。<br>后缀递增符先运算后递增。<br>举个例子：<code>i=233*++a</code><br>a递增1，然后233乘以a，并赋值给i</p><blockquote><p>i&#x3D;233*a++</p></blockquote><p>2乘以a,并将结果给i,然后a递增1</p><p>**递减运算符：–**（与递增相同）</p><p><strong>循环</strong><br>C语言有3种循环：for、while、do while</p><p><strong>whlie循环</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> i;</span><br><span class="line">i = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">while</span> (i&lt;<span class="number">3</span>)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;烫&quot;</span>);</span><br><span class="line">i++;<span class="comment">//输出烫时加1</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>以上的代码打印2个的烫</p><p><strong>如何强制退出循环？</strong></p><p>break;<br>goto;等语句这里不必多讲</p><p><strong>for循环</strong><br>主要形式<br>for(初始值;初始值对比;初始值增加)<br>举个例子：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> i;</span><br><span class="line"><span class="keyword">for</span> (i = <span class="number">1</span>; i &lt; <span class="number">3</span>; i++)</span><br><span class="line">&#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;烫&quot;</span>);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>以上代码会输出两个烫<br><strong>do while</strong><br>至少执行循环体中内容一次<br>do<br>{<br>}while();<br>举个例子</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">  <span class="type">int</span> i;</span><br><span class="line">  <span class="keyword">do</span></span><br><span class="line">  &#123;</span><br><span class="line">   i++;</span><br><span class="line">   <span class="built_in">printf</span>(<span class="string">&quot;烫&quot;</span>);</span><br><span class="line">  &#125; <span class="keyword">while</span>(i&lt;<span class="number">3</span>);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure><p>以上代码会出现三个烫<br>switch和break语句</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">switch</span> ( 整型表达式）</span><br><span class="line">&#123;</span><br><span class="line">case1 常量<span class="number">1</span>:</span><br><span class="line">语句 </span><br><span class="line">case2 常量<span class="number">2</span>:</span><br><span class="line">语句 </span><br><span class="line"><span class="keyword">break</span>;<span class="comment">//跳出</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>数组</strong><br>数组类型<br>int ID[20];&#x2F;&#x2F;储存20个int类型整数的数组<br>char Name[20];&#x2F;&#x2F;储存20个字符的数组<br>float mark[20];&#x2F;&#x2F;储存20个float类型的数组<br>二维数组<br>float a[5][12];&#x2F;&#x2F;内含5个数组元素的数组，每个数组元素内含12个float类型的元素<br>float a[5][12]; &#x2F;&#x2F; rain是一个内含5个元素的数组<br>float a[5][12] ; &#x2F;&#x2F; 一个内含12个float类型元素的数组</p><p><strong>if语句常见错误</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (a &lt; x &lt; z) <span class="comment">// 错误，没有使用逻辑运算符</span></span><br><span class="line"><span class="keyword">if</span> (ch != <span class="string">&#x27;a&#x27;</span> &amp;&amp; != <span class="string">&#x27;b&#x27;</span>) <span class="comment">// 错误，缺少完整的测试</span></span><br></pre></td></tr></table></figure><p>正确的方式是用逻辑运算符连接两个关系表达式：</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> (a &lt; x &amp;&amp; x &lt; z) <span class="comment">// 使用&amp;&amp;组合</span></span><br><span class="line"><span class="keyword">if</span> (ch != <span class="string">&#x27;q&#x27;</span> &amp;&amp; ch != <span class="string">&#x27;Q&#x27;</span>) <span class="comment">// 使用&amp;&amp;组合两个表达式</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;引言：这只针对学过C语言但没学懂和自己的总结经验，本文只按照自己的思路，关于错误和问题一概不论。&lt;br&gt;关于简单的代码一概不论，这里只单讲入门且不能理解的东西，至于前期环境安装和一些基础问题可以参考其他博客和我以前的博客。&lt;/p&gt;
&lt;p&gt;首先需要明白什么是&lt;strong&gt;指</summary>
      
    
    
    
    <category term="教程" scheme="https://dclef.icu/categories/%E6%95%99%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>学生管理系统（C语言版）</title>
    <link href="https://dclef.icu/2019/12/11/%E5%AD%A6%E7%94%9F%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F%EF%BC%88C%E8%AF%AD%E8%A8%80%E7%89%88%EF%BC%89/"/>
    <id>https://dclef.icu/2019/12/11/%E5%AD%A6%E7%94%9F%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F%EF%BC%88C%E8%AF%AD%E8%A8%80%E7%89%88%EF%BC%89/</id>
    <published>2019-12-11T01:00:00.000Z</published>
    <updated>2022-09-22T15:30:02.214Z</updated>
    
    <content type="html"><![CDATA[<p>学校作业，先发到博客上<br>更新更改已知错误<br>再度更新最终版</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;string.h&gt;</span>  </span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> N 1000 </span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line">    <span class="type">char</span> ID[<span class="number">20</span>];</span><br><span class="line">    <span class="type">char</span> Name[<span class="number">20</span>];</span><br><span class="line">    <span class="type">float</span> Mark[<span class="number">3</span>];</span><br><span class="line">    <span class="type">float</span> Average;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="type">float</span> <span class="title function_">Avg</span><span class="params">(<span class="keyword">struct</span> Student stu)</span>;<span class="comment">//求平均值</span></span><br><span class="line"><span class="type">int</span> <span class="title function_">Student_SearchByIndex</span><span class="params">(<span class="type">char</span> id[])</span>;<span class="comment">//通过学号返回数组下标</span></span><br><span class="line"><span class="type">int</span> <span class="title function_">Student_SearchByName</span><span class="params">(<span class="type">char</span> name[])</span>;<span class="comment">//通过姓名返回数组下标</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_DisplaySingle</span><span class="params">(<span class="type">int</span> index)</span>;<span class="comment">//显示单条学生记录</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_Insert</span><span class="params">()</span>;<span class="comment">//插入学生信息</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_Modify</span><span class="params">()</span>;<span class="comment">//修改学生信息</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_Delete</span><span class="params">()</span>;<span class="comment">//删除学生信息</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_SelectByName</span><span class="params">()</span>;<span class="comment">//按姓名查询</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_SelectByID</span><span class="params">()</span>;<span class="comment">//按学号查询</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_SortByAverage</span><span class="params">()</span>;<span class="comment">//按平均值排序</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_Display</span><span class="params">()</span>;<span class="comment">//显示全部学生信息</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">IO_ReadInfo</span><span class="params">()</span>;<span class="comment">//将学生信息从文件读出</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">IO_WriteInfo</span><span class="params">()</span>;<span class="comment">//将学生信息写入文件</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/*声明学生数组及学生数量*/</span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Student</span> <span class="title">students</span>[<span class="title">N</span>];</span></span><br><span class="line"><span class="type">int</span> num = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*求平均值*/</span></span><br><span class="line"><span class="type">float</span> <span class="title function_">Avg</span><span class="params">(<span class="keyword">struct</span> Student stu)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">return</span> (stu.Mark[<span class="number">0</span>] + stu.Mark[<span class="number">1</span>] + stu.Mark[<span class="number">2</span>]) / <span class="number">3</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*通过学号返回数组下标</span></span><br><span class="line"><span class="comment">将学生学号与查询的学号做比较，</span></span><br><span class="line"><span class="comment">如果相等则返回该学生的下标 ，找不到则返回-1. */</span></span><br><span class="line"><span class="type">int</span> <span class="title function_">Student_SearchByIndex</span><span class="params">(<span class="type">char</span> id[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span> (i = <span class="number">0</span>; i &lt; num; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">strcmp</span>(students[i].ID, id) == <span class="number">0</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">return</span> i;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/*通过姓名返回数组下标*/</span></span><br><span class="line"><span class="type">int</span> <span class="title function_">Student_SearchByName</span><span class="params">(<span class="type">char</span> name[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span> (i = <span class="number">0</span>; i &lt; num; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">strcmp</span>(students[i].Name, name) == <span class="number">0</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">return</span> i;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/*显示单条学生记录*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_DisplaySingle</span><span class="params">(<span class="type">int</span> index)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%10s%10s%8s%8s%8s%10s\n&quot;</span>, <span class="string">&quot;学号&quot;</span>, <span class="string">&quot;姓名&quot;</span>, <span class="string">&quot;成绩&quot;</span>, <span class="string">&quot;成绩&quot;</span>, <span class="string">&quot;成绩&quot;</span>, <span class="string">&quot;平均成绩&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;-------------------------------------------------------------\n&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%10s%10s%8.2f%8.2f%8.2f%10.2f\n&quot;</span>, students[index].ID, students[index].Name,</span><br><span class="line">        students[index].Mark[<span class="number">0</span>], students[index].Mark[<span class="number">1</span>], students[index].Mark[<span class="number">2</span>], students[index].Average);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*插入学生信息*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_Insert</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请输入学号:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, &amp;students[num].ID);</span><br><span class="line">        getchar();</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请输入姓名:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, &amp;students[num].Name);</span><br><span class="line">        getchar();</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请输入成绩:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%f&quot;</span>, &amp;students[num].Mark[<span class="number">0</span>]);</span><br><span class="line">        getchar();</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请输入成绩:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%f&quot;</span>, &amp;students[num].Mark[<span class="number">1</span>]);</span><br><span class="line">        getchar();</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请输入成绩:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%f&quot;</span>, &amp;students[num].Mark[<span class="number">2</span>]);</span><br><span class="line">        getchar();</span><br><span class="line">        students[num].Average = Avg(students[num]);</span><br><span class="line">        num++;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;是否继续?(y/n)&quot;</span>);</span><br><span class="line">        <span class="keyword">if</span> (getchar() == <span class="string">&#x27;n&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/*修改学生信息*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_Modify</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="comment">//float Mark[0],Mark[1],Mark[2];  </span></span><br><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">char</span> id[<span class="number">20</span>];</span><br><span class="line">        <span class="type">int</span> index;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请输入要修改的学生的学号:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, &amp;id);</span><br><span class="line">        getchar();</span><br><span class="line">        index = Student_SearchByIndex(id);</span><br><span class="line">        <span class="keyword">if</span> (index == <span class="number">-1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;学生不存在!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;你要修改的学生信息为:\n&quot;</span>);</span><br><span class="line">            Student_DisplaySingle(index);</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;-- 请输入新值--\n&quot;</span>);</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;请输入学号:&quot;</span>);</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, &amp;students[index].ID);</span><br><span class="line">            getchar();</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;请输入姓名:&quot;</span>);</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, &amp;students[index].Name);</span><br><span class="line">            getchar();</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;请输入成绩:&quot;</span>);</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%f&quot;</span>, &amp;students[index].Mark[<span class="number">0</span>]);</span><br><span class="line">            getchar();</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;请输入成绩:&quot;</span>);</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%f&quot;</span>, &amp;students[index].Mark[<span class="number">1</span>]);</span><br><span class="line">            getchar();</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;请输入成绩:&quot;</span>);</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%f&quot;</span>, &amp;students[index].Mark[<span class="number">2</span>]);</span><br><span class="line">            getchar();</span><br><span class="line">            students[index].Average = Avg(students[index]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;是否继续?(y/n)&quot;</span>);</span><br><span class="line">        <span class="keyword">if</span> (getchar() == <span class="string">&#x27;n&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*删除学生信息*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_Delete</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">char</span> id[<span class="number">20</span>];</span><br><span class="line">        <span class="type">int</span> index;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请输入要删除的学生的学号:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, &amp;id);</span><br><span class="line">        getchar();</span><br><span class="line">        index = Student_SearchByIndex(id);</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (index == <span class="number">-1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;学生不存在!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;你要删除的学生信息为:\n&quot;</span>);</span><br><span class="line">            Student_DisplaySingle(index);</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;是否真的要删除?(y/n)&quot;</span>);</span><br><span class="line">            <span class="keyword">if</span> (getchar() == <span class="string">&#x27;y&#x27;</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">for</span> (i = index; i &lt; num - <span class="number">1</span>; i++)</span><br><span class="line">                &#123;</span><br><span class="line">                    students[i] = students[i + <span class="number">1</span>];<span class="comment">//把后边的对象都向前移动    </span></span><br><span class="line">                &#125;</span><br><span class="line">                num--;</span><br><span class="line">            &#125;</span><br><span class="line">            getchar();</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;是否继续?(y/n)&quot;</span>);</span><br><span class="line">        <span class="keyword">if</span> (getchar() == <span class="string">&#x27;n&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*按学号查询*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_SelectByID</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">char</span> ID[<span class="number">20</span>];</span><br><span class="line">        <span class="type">int</span> index;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请输入要查询的学生的学号:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, &amp;ID);</span><br><span class="line"></span><br><span class="line">        index = Student_SearchByIndex(ID); <span class="comment">//调用查询函数 </span></span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (index == <span class="number">-1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;学生不存在!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;你要查询的学生信息为:\n&quot;</span>);</span><br><span class="line">            Student_DisplaySingle(index);    <span class="comment">//调用显示单条记录函数</span></span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;是否继续?(y/n)&quot;</span>);</span><br><span class="line">        fflush(<span class="built_in">stdin</span>);</span><br><span class="line">        <span class="keyword">if</span> (getchar() == <span class="string">&#x27;n&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*按姓名查询*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_SelectByName</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">char</span> name[<span class="number">20</span>];</span><br><span class="line">        <span class="type">int</span> index;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请输入要查询的学生的姓名:&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, &amp;name);</span><br><span class="line">        getchar();</span><br><span class="line">        index = Student_SearchByName(name);</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> (index == <span class="number">-1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;学生不存在!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;你要查询的学生信息为:\n&quot;</span>);</span><br><span class="line">            Student_DisplaySingle(index);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;是否继续?(y/n)&quot;</span>);</span><br><span class="line">        <span class="keyword">if</span> (getchar() == <span class="string">&#x27;n&#x27;</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">/*按平均值排序*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_SortByAverage</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i, j;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">Student</span> <span class="title">tmp</span>;</span></span><br><span class="line">    <span class="keyword">for</span> (i = <span class="number">0</span>; i &lt; num; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span> (j = <span class="number">1</span>; j &lt; num - i; j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span> (students[j - <span class="number">1</span>].Average &lt; students[j].Average)</span><br><span class="line">            &#123;</span><br><span class="line">                tmp = students[j - <span class="number">1</span>];</span><br><span class="line">                students[j - <span class="number">1</span>] = students[j];</span><br><span class="line">                students[j] = tmp;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*显示全部学生信息*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">Student_Display</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%10s%10s%8s%8s%8s%10s\n&quot;</span>, <span class="string">&quot;学号&quot;</span>, <span class="string">&quot;姓名&quot;</span>, <span class="string">&quot;成绩&quot;</span>, <span class="string">&quot;成绩&quot;</span>, <span class="string">&quot;成绩&quot;</span>, <span class="string">&quot;平均成绩&quot;</span>);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;-------------------------------------------------------------\n&quot;</span>);</span><br><span class="line">    <span class="keyword">for</span> (i = <span class="number">0</span>; i &lt; num; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%10s%10s%8.2f%8.2f%8.2f%10.2f\n&quot;</span>, students[i].ID, students[i].Name,</span><br><span class="line">            students[i].Mark[<span class="number">0</span>], students[i].Mark[<span class="number">1</span>], students[i].Mark[<span class="number">2</span>], students[i].Average);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*将学生信息从文件读出*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">IO_ReadInfo</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE* fp;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">if</span> ((fp = fopen(<span class="string">&quot;Database.txt&quot;</span>, <span class="string">&quot;rb&quot;</span>)) == <span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;不能打开文件!\n&quot;</span>);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (fread(&amp;num, <span class="keyword">sizeof</span>(<span class="type">int</span>), <span class="number">1</span>, fp) != <span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        num = <span class="number">-1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span> (i = <span class="number">0</span>; i &lt; num; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            fread(&amp;students[i], <span class="keyword">sizeof</span>(<span class="keyword">struct</span> Student), <span class="number">1</span>, fp);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/*将学生信息写入文件*/</span></span><br><span class="line"><span class="type">void</span> <span class="title function_">IO_WriteInfo</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    FILE* fp;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">if</span> ((fp = fopen(<span class="string">&quot;Database.txt&quot;</span>, <span class="string">&quot;wb&quot;</span>)) == <span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;不能打开文件!\n&quot;</span>);</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (fwrite(&amp;num, <span class="keyword">sizeof</span>(<span class="type">int</span>), <span class="number">1</span>, fp) != <span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;写入文件错误!\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (i = <span class="number">0</span>; i &lt; num; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span> (fwrite(&amp;students[i], <span class="keyword">sizeof</span>(<span class="keyword">struct</span> Student), <span class="number">1</span>, fp) != <span class="number">1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;写入文件错误!\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    fclose(fp);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> choice;</span><br><span class="line">    IO_ReadInfo(); <span class="comment">//调用读学生信息函数</span></span><br><span class="line">    <span class="keyword">while</span> (<span class="number">1</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="comment">/*主菜单*/</span></span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n**********************欢迎使用学生成绩管理系统********************\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot; \n1.增加学生记录\t2.查看学生记录\t3.修改学生记录\t4.删除学生记录\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot; \n5.查询学生记录\t6.按平均成绩排序\t\t7. 退出\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n******************************************************************\n&quot;</span>);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;请选择(1-7):&quot;</span>);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;choice);</span><br><span class="line">        fflush(<span class="built_in">stdin</span>);</span><br><span class="line">        <span class="keyword">switch</span> (choice)</span><br><span class="line">        &#123;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">1</span>:</span><br><span class="line">            Student_Insert();</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">2</span>:</span><br><span class="line">            Student_Display();</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">3</span>:</span><br><span class="line">            Student_Modify();</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">4</span>:</span><br><span class="line">            Student_Delete();</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">5</span>:</span><br><span class="line">            Student_SelectByID();</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">6</span>:</span><br><span class="line">            Student_SortByAverage();</span><br><span class="line">            Student_Display();</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> <span class="number">7</span>:</span><br><span class="line">            <span class="built_in">exit</span>(<span class="number">0</span>);</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        IO_WriteInfo();</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;学校作业，先发到博客上&lt;br&gt;更新更改已知错误&lt;br&gt;再度更新最终版&lt;/p&gt;
&lt;figure class=&quot;highlight c&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;spa</summary>
      
    
    
    
    <category term="教程" scheme="https://dclef.icu/categories/%E6%95%99%E7%A8%8B/"/>
    
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="https://dclef.icu/2019/11/01/hello-world/"/>
    <id>https://dclef.icu/2019/11/01/hello-world/</id>
    <published>2019-10-31T16:00:00.000Z</published>
    <updated>2021-08-21T18:02:57.730Z</updated>
    
    <content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new &quot;My New Post&quot;</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Welcome to &lt;a href=&quot;https://hexo.io/&quot;&gt;Hexo&lt;/a&gt;! This is your very first post. Check &lt;a href=&quot;https://hexo.io/docs/&quot;&gt;documentation&lt;/a&gt; for</summary>
      
    
    
    
    <category term="教程" scheme="https://dclef.icu/categories/%E6%95%99%E7%A8%8B/"/>
    
    
  </entry>
  
</feed>
