在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外部类,里面的叫内部类 2.内部类通常只服务于外部类,对外不具备可见性 3.内部类对象通常是在外部类中创建 4.内部类可直接访问外部类成员,包括私有的.因为内部类中有个隐式的引用指向创建它的外部类对象. 具体代码如下: public class HelloWorld { public static v…
在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入的,如下: 如果我们使用刷卡的形式进行付账,我们需要出示一张有足够余额的银行卡或者会员卡来进行付款,在付款的时候我们仅仅是通过刷卡,输入密码来完成支付,在这个过程中,收银员是不能看到我们的卡号,密码,余额这些私密性的数据,否则可能会出现被盗刷或者其他问题,收银员在收银的时候只需要做的就是我们输入密码…
在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更突出,因为 Java 就是一门面向对象的编程语言. 我们先来看下面的代码: public class Main { public static void main(String[] args) { Person person = new Person(); // person.age = 1000;…
之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 在日常生活中,我们会养些猫和狗,从程序的角度讲猫和狗都属于对象,那么我们就可以根据其特性来定义,如下: class Dog extends Animal { String name;…
在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态. 在日常生活中,很多意思并不是我们想要的意思,如下: 1.领导:“你这是什么意思?” 小明:“没什么意思,意思意思.” 领导:“你这就不够意思了.” 小明:“小意思,小意思.” 领导:“你这人真有意思.” 小明:“其实也没有别的意思.” 领导:“那我就不好意思了.” 小明:“是我不好意思.” 2.电视剧<快把我哥带走> 妹:“你根本就不懂我.” 哥:“你不说我怎么懂你啊,” 妹:“真的懂不需要说出来,” 哥…
在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时候不用去考虑它到底能不能插进去,只要型号对了就肯定能插进去,接口就相当于一个标准,你要想把鼠标插到我的电脑上,在出厂时就必须遵守该电脑定义的接口标准. 在 Java 中同样有接口的概念,当然也会有接口的定义标准. 1.有 interface 定义: 2.只能包含常量和抽象方法: 3.接口不能被实例化…
在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,char,boolean,是以值的形式存在的,所以他们并没有面向对象的特征,自然也不继承自 Object,所以不能使用多台,用 Object 的角度去接受基本类型. 假设现在我们有一个计算 1+1 的值,代码如下: public class Main { public static void main(…
之前的文章我们介绍了几种可以爬取网站信息的模块,并根据这些模块爬取了<糗事百科>的糗百内容,本章我们来看一下用于专门爬取网站信息的框架 Scrapy. Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛.Scrapy 使用了 Twisted['twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求. Scrapy架构图 Scrap…
在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java 中的日期操作. 从上图可以看出 Java 为我们提供了三个标准类库来工我们使用,三个类库之间在使用过程中又需要相互协作,接下来我们就一一看一下. Java中的时间 1.Java 中的时间使用标准类库的 Date 类表示,是用距离一个固定时间点的毫秒数(可正可负,long 类型)表示一个特定的时间点:…
之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这些关键字不能被用作变量名称. 类别 关键字 说明 访问控制 private 私有的 protected 受保护的 public 公共的 类.方法和变量修饰符 abstract 声明抽象 class 类 extends 扩充,继承 final 最终值,不可改变的 implements 实现(接口) i…
在之前的文章我们介绍了一下 Java 中的日期操作,本章我们来看一下 Java 集合框架中的Collection. 早在 Java 2 中之前,Java 就提供了特设类.比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组. 虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题.由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同. 集合框架被设计成要满足以下几个目标. 该框架必须是高性能的.…
在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator. 当我们创建完成集合后,怎么样从集合中取元素呢?Java 为我们提供了迭代器 Iterator 来帮我们实现,如下: import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * 遍历集合 *…
写在前面:从本片文章开始,将记录自己学习 Java 的点滴路程,目标定的并不是让自己成为一个 Java 高手,而是让自己多掌握一门语言,使自己的知识面更广一些,在学习 Java 的过程中如有不对的地方还请各位大佬批评指教. 在之前看过一些文章,说互联网知识到底要学到什么程度,有人认为不在多而在精,有人认为要广而猎之,我认为在自己可承受范围内其实应该更多的取接触新的事物,也许这辈子你可能都用不到,但你学习的过程也是个人成长的路程,其余就不多说了,免得招来口诛笔伐. 在开始编写我们第一个程序之前我们…
之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符 算术运算符 算术运算符用在数学表达式中,它们的作用和在数学中的作用一样.下表列出了所有的算术运算符. 表格中的实例假设整数变量A的值为10,变量B的值为20: 操作符 描述 例子 + 加法…
之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的要素: - 循环变量的初始化 - 循环条件(以循环变量为基础) - 循环变量的改变(向着循环的结束进行改变) Java中有三种主要的循环结构: while 循环 do…while 循环 for 循环 while 循环 while是最基本的循环,它的结构为: while(布尔表达式){ //循环内容…
之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. 数组 - 相同数据类型的元素组成的集合 - 元素按线性顺序排列.所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素,除最后一个元素外,每一个元素都有唯一的后继元素(一个跟一个) - 可以通过元素所在的位置的顺序号(下标)做标识来访问每一个元素(下标为0开始,最大到元素个数 -1) 创建数组 public class…
之前的文章我们介绍了 Java 的数组,本章我们来看一下 Java 的对象和类. Java 是一种面向对象语言,那什么是对象呢,对象在编程语言中属于一个很宽泛的概念,我们可以认为万事万物都是对象,每个对象都有其状态和行为,例如一只狗会有颜色,品种,性别等状态,也有跑,吃,睡等行为. 在编程语言中,会用一个类来承载这个对象,类是一个模板,它描述一类对象的行为和状态. 在之前的文章中我们没有引入对象的概念,如果我们想要打印输出一个人的基本信息,如下: public class HelloWorld…
在之前的文章中我们介绍了一下 java 中的对象和类,接下来我们来看一下 Java 中的方法重载. 在显示生活中,我们肯定会遇到这样一个问题,那就是我们再商场买东西的时候在付账时的选择.如下 A:在收银台处设三个窗口,分别满足现金,手机,刷卡三种形式的付款. B:可以设置一个窗口,这个窗口满足以上三种付款方式. 对于消费者和商场而言,B 方案无疑比 A 方案更好,商场可以减少雇佣员工和占地,消费者不必去刻意选择支付方式. 在代码的世界里,以上三种支付方式其实都是程序的运行,我们可以将上面的支付方…
在之前的文章我们介绍了一下 Java 中的重载,接下来我们看一下 Java 中的构造方法. 我们之前说过,我们在定义一个变量的时候,java 会为我们提供一个默认的值,字符串为 null,数字为 0.如下: public class HelloWorld { public static void main(String[] args) { User e = new User(); // 创建一个 User 对象 e.print(); // 姓名:null 年龄:0 性别:null } } cla…
之前的文章我们介绍了一下 Java 中的构造方法,接下来我们再来看一下 Java 中的引用型数组类型. 现在我们想定义一个坐标系,然后通过横坐标(row)和纵坐标(col)来确定一个坐标点,代码如下: public class HelloWorld { public static void main(String[] args) { Point p1 = new Point(1, 2); p1.print(); // (1,2) Point p2 = new Point(3, 4); p2.pr…
之前的文章我们介绍了一下 Java 中的继承,接下来我们继续看一下 Java 中的继承. 在有些时候,我们通过类继承的方式可以获取父类的方法,但是有些时候父类为我们提供的方法并不完全符合我们的需求,这时候我们就要对类方法进行重写,如下: public class HelloWorld { public static void main(String[] args) { Student student = new Student(); student.name = "张三"; stude…
在之前的文章我们介绍了一下 Java 类的 private,static,final,本章我们来看一下 Java 中的抽象类和抽象方法. 我们先来看下面一段代码: // 根据周长求面积 class Square { // 方形类 double c; double area() { // 方形面积 return 0.0625 * c * c; } } class Circle { // 圆形类 double c; double area() { // 圆形面积 return 0.0796 * c…
在之前的文章我们介绍了一下 Java 中类的内部类,本章我们来看一下 Java 中的正则表达式. 在任何一种语言中,都绕不开正则表达式,而且大部分语言的正则表达式都有预定义的字符集,且预定义的字符集也都差不多,如下: 上面的预定义字符集,在JavaScript,Java,Python 中其实是通用的,那接下来我们就利用 Java 的语法来对其进行一下解释. public class HelloWorld { public static void main(String[] args) { Str…
之前的文章我们介绍了 re 模块和 lxml 模块来做爬虫,本章我们再来看一个 bs4 模块来做爬虫. 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会局部遍历,而Beautiful Soup 是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml. BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CS…
之前的文章我们介绍了一下 vue 中插槽的使用,本章我们接着介绍一下 vue 中的作用域插槽. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue</title> <script src="https://cdn.jsdelivr.net/npm/vue"></s…
之前的文章我们已经可以根据 re 模块,Xpath 模块和 BeautifulSoup4 模块来爬取网站上我们想要的数据并且存储在本地,但是我们并没有对存储数据的格式有要求,本章我们就来看数据的存储格式 JSON 及 Python 中的 json 模块. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. JSON和XML的比较…
之前的文章我们介绍了一下 Python 的 json 模块,本章我们就介绍一下之前根据 Xpath 模块做的爬取<糗事百科>的糗事进行丰富和完善. 在 Xpath 模块的爬取糗百的案例中我们只是爬取了其中的糗事,然后存储到本地,并没有作者姓名,头像等信息,所有我们通过之前介绍的 path 模块讲获取到的完整信息以 json 的形式存储到本地. 我们要爬取的网站链接是 https://www.qiushibaike.com/text/page/1/ . 我们通过 Xpath Helper 的谷歌…
在之前的文章我们通过 scrapy 框架 及 scrapy.Spider 类做了一个<糗事百科>的糗百爬虫,本章我们再来看一下相较于 scrapy.Spider 类更为强大的 CrawlSpider 类. CrawlSpider 是Spider的派生类,Spider 类的设计原则是只爬取start_url列表中的网页,而 CrawlSpider 类定义了一些规则 (rule) 来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的工作更适合. 源码参考 class CrawlS…
之前的文章我们介绍了一下 Python 中正则表达式和 re 模块来做一个案例,爬取<糗事百科>的糗事并存储到本地.本章我们来看一下另一种爬取数据的方式 XPath. 我们在前面爬取<糗事百科>的时候处理 HTML 文档的时候发现会有些累人,还要对正则表达式非常熟悉爬起来才得心应手,那有没有更为方便的方法呢,答案当然是有的,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素. 什么是XML XML 指可扩展标记语言(EXtensible…
之前的文章我们对 vue 的基础用法已经有了很直观的认识,本章我们来看一下 vue 中的生命周期函数. 上图为 Vue官方为我们提供的完整的生命周期函数的流程图,下面的案例我们只是走了部分情况流程,但所有的生命周期函数都涉及到了. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue</title> &…