`
roruby
  • 浏览: 342078 次
  • 来自: ...
社区版块
存档分类
最新评论

Java咖啡馆---品味第一杯咖啡

阅读更多
品味第一杯咖啡


 

一、注释与文档

    

  之所以把Java注释和文档功能放在最前面介绍,是因为Java程序的理念使然——所谓兵马未动粮草先行。

  几乎所有编程语言都提供在源代码中添加注释的功能,开发者通过注释给自己或代码的阅读者进行备忘或提示,好比读书时在书上的空白处写笔记,或在屋子里使用N次贴。Java语言一个优秀思想便是——编写源代码并非唯一重要的工作,给源代码加上详细的注释同样重要。道理很简单,源代码和Java的字节码不同,字节码是给电脑看的,而源代码是给人阅读的,没有好的文档与注释,阅读源代码必须猜测源代码作者的意图,势必枯燥而且效率低下。

  Java中的注释一共有两种,我们的Hello World!程序麻雀虽小但是五脏俱全,全部都用到了。下面是Hello World!程序的源代码:

/*
* Created on 2004-6-4
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/

/**
* @author gary chan
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class HelloWorldApp {

    public static void main(String[] args) {
        // 打印Hello World!字样
        System.out.println("Hello World!");
    }
}

  第一种注释是从C语言继承过来的风格,注释从/*开始,到*/结束,它们必须成对使用,之间可以换行。Hello World!程序开头部分就是这种风格的注释,记载着这个源程序的创始时间和一些提示。许多程序员为了美观,喜欢在多行注释前加入一个*符号,从而就形成了上面的格局。当然,这个注释的内容是Eclipse自动生成的,你可以通过修改Eclipse的代码模板来修改自动生成的内容。
第二种注释是从C++语言继承过来的单行注释风格,注释从//开始,一直到这行结束。这种风格的注释非常容易使用,你不必低头在键盘上连续寻找/和*键,只需要连续按下/键两次。同时,不需要像C语言风格注释那样特意使注释符号配对。Hello World!程序中“// 打印Hello World!字样”就是这种风格的注释。

  如果你的洞察力敏锐,你会发现Hello World!程序中还有一处用/**和*/包裹起来的的代码并不属于以上任何一种注释。没错,这是Java文档(Java documentation)。文档与注释不同,注释一般比较随意,反映的是局部语句的功能或声明,而文档是与代码的结构相关的,好比是代码的摘要,给人一个结构化的总体观念。特别地,Java文档所注释的,是紧随其后的类、变量或方法。

  我们还是结合Eclipse来说明Java文档的应用。首先在Eclipse中打开Hello World!程序。试试看把鼠标移动到HelloWorldApp字符上面去,是不是显示了如图1所示的效果(图1  Eclipse自动显示Java文档的功能)?

 

  没错,当你把鼠标移动到一个Java类、变量或方法上,Eclipse将通过代码分析技术在源代码中萃取出相应的Java文档并且显示给你看,如果该Java元素有文档的话。
下面让我们为main方法编写Java文档来亲自体验一下。首先把光标移动到public class HelloWorldApp {之后并回车以便插入一空白行。然后,输入/**并且回车,你会发现Eclipse自动为你生成如一个Java文档块,并且自动识别出main方法有一个名为args的参数(很神奇吧?)。把该文档改写成这样:

/**
* 这是主函数,程序将从这里开始运行。
* @param args 命令行参数
*/

  然后你把鼠标移动到main上面,是不是得到明明白白的文档信息了?

  实际上,Java文档功能是贯穿于Java语言中的重要功能。但当你把光标移动到System.out.println("Hello World!")语句上,却得不到有用的含义以及参数的用法,该语句还是Java内置的API呢。怎么会这样子?

  聪明的你一定想到答案了——一定是Java API的Java文档没有配置好嘛。没错,J2SE SDK并不包含Java API的Java文档,需要单独下载。你可以从http://java.sun.com/j2se/1.4.2/download.html下载到J2SE 1.4.2的文档,如果你从国外下载不方便,还可以到http://garychan.3322.org的Java资源栏目下载,约32.80MB。下载以后请把压缩包中的doc目录解压缩到C:\j2sdk1.4.2_04\中。

  Eclipse默认使用JRE作为Java虚拟机。然而,使用J2SE SDK本身是更好的选择,因为你可以开启查看Java API文档的重要功能,这对于提高软件的开发效率以及深刻体验Eclipse,有着重要意义。方法如下:

  1.依次点击Eclipse菜单项中的Windows、Preferences。

  2.展开Java/Installed JRE,按下Add,按照图2所示填写参数(图2   完成后按下OK键)。

  3.在Installed JREs对话框中的J2SDK 1.4.2_04前面打上勾,按下“OK”关闭Preferences对话框。Eclipse会提示你需要重新编译一次,“OK”即可。

  好了,现在把光标移动到println上看看是不是和图3所示一样呢(图3)?

  怎么样,该方法的详细使用说明都有了吧?如果内容比较多,按下F2锁定之后便可以察看全部的信息。以后有什么API不明白,不用苦苦上网搜索了,Java API文档本身就是Java API的大百科,再配合Eclipse的自动显示功能,实在方便得不行。

  顺便说一句,Java还提供了从源代码中自动萃取Java文档,生成HTML文件以便单独阅读的机制,那就是J2SE SDK提供的javadoc工具。在Eclipse中,可以通过File菜单中的Export选项进行操作。

  Just do it

  试试把HelloWorldApp的Java文档改得更有调理,并且修改author属性成为你的名字。然后通过Eclipse内置的javadoc输出功能生成该项目的Java文档,感受一下Java文档代码并重的开发理念。

  Java文档是一门学问。除了上面用到的param和author标签,Java文档还支持许多特定的标签,可以直接内嵌HTML代码以便得到优美的输出,还可以通过doclets自行扩展javadoc的处理机制。完整的说明文档请参考C:\j2sdk1.4.2_04\docs\tooldocs\windows\javadoc.html。

品味第一杯咖啡


 

二、类

    

  在品味第一杯咖啡时,我们说Hello World!程序定义了一个HelloWorldApp类(class)。

  类是Java等面向对象语言的基础单位??一个定义了从类生成的实例(instance)中的数据和行为的关系的模板。当你实例化(instantiate)一个类以后便得到一个该类的对象(object),拥有类的全部数据和行为。一般我们把类和对象的数据称为变量,把行为称为方法。Java语言使用class关键词来定义一个类,之后的一对大括号定义了该类的变量和方法。我们的HelloWorldApp类没有变量,只有一个main方法。

  类和对象的关系很好理解??类是一个抽象概念,好比“人”,而对象是一个具体的人,比如小布什、普京,他们作为人都有七情六欲(变量),都会衣食住行(方法)。

  在第二篇连载《第一杯咖啡》中,为了避免类和对象的概念,我直接把HelloWorldApp称作了对象。现在你应该明白,这个说法是不准确的,HelloWorldApp是一个类,而main是这个类的方法。现在正式拨乱反正。

品味第一杯咖啡


 

三、main方法

    

  每个Java应用程序都必须包含一个main方法,语法如下:

public static void main(String[] args)

  main方法包含三个修饰词:

  (1)public:表示main方法可以由任何对象调用。
  (2)static:表示这是一个类方法,区别于实例方法,与具体的对象无关。
  (3)void:表示main方法没有返回值。

  main方法是Java语言中非常特殊的方法,类似于C/C++中的main函数。当Java解析器执行Java应用程序,它首先执行这个Java类的main方法。你应该把程序的逻辑,比如打印Hello World!字样,写在main里面。

  main方法有一个参数,即args,它是一个字符串数组,操作系统通过这个机制传递命令行参数。由于Hello World!程序忽略命令行参数,所以这里不展开讨论了。

品味第一杯咖啡


 

四、使用类和对象

    

  让我们以Hello World!程序来详细解释类和对象的使用。

  Hello World!程序很小,只定义了最基本的HelloWorldApp类。虽然如此,它的确使用了其他类??System类:

System.out.println("Hello World!");

  System类是Java API的成员之一,提供了操作系统无关地操作操作系统相关功能的能力,很拗口,不过的确如此。out是System的类变量(与前面提到的类方法的意思一致)。实际上,System的所有变量都是类变量,所有方法都是类方法??都是用static修饰的,你可以通过“.”操作符直接访问。比如,System类有一个getProperty类方法可以获取操作系统属性,至于具体是什么操作系统,你无需事必躬亲了。若把Hello World!程序的main方法修改成:

public static void main(String[] args) {
System.out.print("Hello ");
System.out.println(System.getProperty("user.name"));
}

  运行程序,便会得到“Hello Gary Chan”的结果。呵呵,我们的程序可以认人了,长大了许多啊!

  下面说说类变量的原理。Java应用程序装载System类的时候,一看到out是System的类变量,便自动初始化PrintStream类得到一个PrintStream对象,并且把这个对象赋给out变量。从而,你调用out的println方法,实际上是调用一个对象的实例方法。这样,Hello World!字样便输出了。

  总结一下类变量、类方法和实例变量、实例方法的关系:

  (1)类变量或者类方法是和特定的类相关的,Java将给每个类分配一个类变量,无论这个类有多少实例。可以通过类名来操作类变量和类方法。
  (2)实例变量或者实例方法是与特定的对象(类的实例)相关,每个对象都有自己专用的实例变量。可以通过实例名来操作实例变量和实例方法。

五、小结

  这回我们把Hello World!程序剖析得淋漓尽致。虽然一个小小的Java程序就有那么多门道,但是,不经历风雨怎么见彩虹,希望你能够透彻感受Java语言的点滴道理,从而快速步入Java的圣堂。

  不要小看Java文档的重要性。Java有许多值得尊敬的理念,所谓没有规矩不成方圆,你应该理解并且贯彻它,这样才能够写出漂亮的代码。

分享到:
评论

相关推荐

    JAVA咖啡馆

    叹咖啡 第一杯咖啡 EcliPse 品味第一杯咖啡 Java语言基础 编写猜数字游戏 大话面向对象 个压缩归档实用软件 情人节的Applet Java插件技术 Tic-Tac-Toe 终结者

    Java咖啡馆

    《Java咖啡馆》是一部以Java编程为...通过《Java咖啡馆》的学习,读者可以逐步掌握Java编程语言,从新手成长为熟练的Java开发者,正如在咖啡馆品味一杯精心调制的咖啡,享受学习过程的同时,也吸收了丰富的知识养分。

    Java咖啡馆电子书

    用通俗易懂的语言介绍了java,主要内容包括:叹咖啡、第一杯咖啡、Eclipse、品味第一杯咖啡、Java语言基础、编写猜数字游戏、大话面向对象、一个压缩归档实用软件、情人节的Applet、Java插件技术、Tic-Tac-Toe、终结...

    DeepSeek与AI幻觉-清华大学团队制作

    DeepSeek与AI幻觉-清华大学团队制作 一、什么是AI幻觉 (定义与基础概念) 二、DeepSeek为什么会产生幻觉 (聚焦特定AI模型的幻觉成因分析) 三、AI幻觉评测 (评估AI幻觉的频率、类型与影响的方法) 四、如何减缓AI幻觉 (解决方案与技术优化方向) 五、AI幻觉的创造力价值 (探讨幻觉在创新场景中的潜在益处,如艺术生成、灵感激发等)

    协同过滤算法商品推荐系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计

    协同过滤算法商品推荐系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 前台用户可以实现注册登录、商品浏览,在线客服,加入购物车,加入收藏,下单购买,个人信息管理,收货信息管理,收藏管理,评论功能。 后台管理员可以进行用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。

    MES系统数字化工厂解决方案.pptx

    MES系统数字化工厂解决方案.pptx

    MUI调用照片以及裁剪和图库照片上传到服务器

    MUI调用照片以及裁剪和图库照片上传到服务器

    ChatGPT付费创作系统V3.1.3独立版 WEB端+H5端+小程序端 (新增DeepSeek高级通道+新的推理输出格式)

    GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序, 是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。这是一种基于人工智能技术的问答系统, 可以实现智能回答用户提出的问题。相比传统的问答系统,ChatGPT可以更加准确地理解用户的意图, 提供更加精准的答案。同时系统采用了最新的GPT3.5接口与GPT4模型,同时还支持型,文心一言,腾讯混元, 讯飞星火,通义千问,DeepSeeK,智普等等国内各种大模型,可以更好地适应不同的应用场景,支持站点无限多开, 可以说ChatGPT付费创作系统目前国内相对体验比较好的一款的ChatGPT及多接口软件系统。 新增接入DeepSeek-R1、DeepSeek-V3(Ollama自部署和第三方均支持)、高级通道增加DeepSeek、 支持AI接口输出的reasoning_content字段(新的推理输出格式)、更新模型库、修复导出Excel的bug等功能, 优化了云灵Midjourney接口,出图更快更稳定。小程序端变化不大该系统版本测试下来比较完美, 老版本升级时数据库结构同步下,同时把原来

    基于java的美食点餐管理平台设计的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了一款基于Java技术的美食点餐管理平台的设计与实现。该平台旨在优化传统餐饮行业的服务流程,通过智能化的点餐系统、高效的订单处理、智能库存管理和数据分析等功能,为用户提供便捷高效的点餐体验,并提升餐厅管理效率和服务质量。系统涵盖了前端设计、后端开发、数据库设计等方面,采用了成熟的Java技术和现代Web开发框架,如Spring Boot、Vue.js或React,确保系统的高效性和稳定性。此外,文档还包括详细的用户界面设计、模块实现以及系统部署指南,帮助开发者理解和搭建该平台。 适合人群:具备一定的Java编程基础和技术经验的研发人员、IT从业者以及有意开发类似系统的企业和个人。 使用场景及目标:①为餐厅提供一个集点餐、订单处理、库存管理于一体的高效平台;②优化传统餐饮服务流程,提升客户服务体验;③利用大数据分析辅助决策,助力餐饮企业精细化运营;④通过集成多种支付方式和其他外部系统,满足多样化的商业需求。 其他说明:本项目不仅提供了完整的技术方案和支持文档,还针对实际应用场景提出了多个扩展方向和技术优化思路,旨在引导用户不断迭代和完善该平台的功能和性能。

    相场模拟与激光制造技术:选择性激光烧结、激光融覆中的凝固与枝晶生长研究,相场模拟与激光制造技术:选择性激光烧结、激光融覆及凝固过程中的枝晶生长研究,相场模拟 选择性激光烧结 激光融覆 凝固 枝晶生长

    相场模拟与激光制造技术:选择性激光烧结、激光融覆中的凝固与枝晶生长研究,相场模拟与激光制造技术:选择性激光烧结、激光融覆及凝固过程中的枝晶生长研究,相场模拟 选择性激光烧结 激光融覆 凝固 枝晶生长 ,相场模拟; 选择性激光烧结; 激光融覆; 凝固; 枝晶生长,相场模拟与激光工艺:枝晶生长的凝固过程研究

    基于ssh框架开发的厂区管理系统,集成增删改查功能。.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    关于加强新能源汽车安全管理涉及的法规标准分析.pptx

    关于加强新能源汽车安全管理涉及的法规标准分析.pptx

    基于SSM的校园二手交易平台.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    机器学习课程设计——基于AdaBoost的银行用户逾期行为检测.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    UI+svg+规范设置打包

    UI+svg格式

    关于乘用车燃料消耗量评价方法及指标强制性国家标准的分析.pptx

    关于乘用车燃料消耗量评价方法及指标强制性国家标准的分析.pptx

    openjpeg-1.5.1-18.el7.x64-86.rpm.tar.gz

    1、文件内容:openjpeg-1.5.1-18.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/openjpeg-1.5.1-18.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,fpga

    FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,FPGA Verilog实现BT656与1120视频协议组帧解帧代码详解:含文档介绍与仿真验证,fpga verilog实现视频协议bt656和1120组帧解帧代码 有文档介绍协议,有mod仿真,matlab代码仿真 ,FPGA; Verilog; BT656协议; 1120组帧解帧代码; 文档介绍; Mod仿真; Matlab代码仿真,FPGA Verilog:实现BT656与1120组帧解帧代码的仿真与文档化研究

    基于 RAG 与大模型技术的医疗问答系统(毕设&课设&实训&大作业&竞赛&项目)

    基于 RAG 与大模型技术的医疗问答系统,利用 DiseaseKG 数据集与 Neo4j 构 建知识图谱,结合 BERT 的命名实体识别和 34b 大模型的意图识别,通过精确的知识检索和问答生成, 提升系统在医疗咨询中的性能,解决大模型在医疗领域应用的可靠性问题。.zip项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    基于 vue+elementUI+springboot 设计的 模仿'猪八戒'的服务外包平台.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

Global site tag (gtag.js) - Google Analytics