登录后台

页面导航

本文编写于 2420 天前,最后修改于 1668 天前,其中某些信息可能已经过时。

1x0 引子

这是我不想讲的一节,但是还真绕不过去,因为他太抽象了却又很重要。我不打算按传统的概念堆积来教学,正头疼呢,突然发现又到月底了,欠钱的该还钱了,于是给老王发了一条微信:

又到月底了,老王你也知道,我零花钱花的差不多了,欠我的那一个亿,该还我了吧。

然后又想了想,老李也欠我两个亿:

又到月底了,老李你也知道,我零花钱花的差不多了,欠我的那两个亿,该还我了吧。

猛然想起老刘,老张,老马,老安都欠我一堆钱,一个个打字太费劲了,于是,把重复的信息*精简(抽象)成了这样一*条(类),复制进了剪贴板:

又到月底了,你也知道,我零花钱花的差不多了,欠我的那个亿,该还我了吧。

给老刘*发(调用)的时候*粘贴进去(实例化),然后写上老刘和他欠的三个亿;

又到月底了,老刘你也知道,我零花钱花的差不多了,欠我的那三个亿,该还我了吧。

给老张,老马,老安发的时候都是这样,不到一分钟就发完了。舒舒服服睡了一觉,醒来之后回忆起来,老金把我香蕉借走了,还没还我呢。打开微信粘贴了进去,写上老金和他欠的香蕉:

又到月底了,老金你也知道,我零花钱花的差不多了,欠我的那香蕉个亿,该还我了吧。

觉得太别扭了,之前那个模板不适用了。于是在之前的基础上,修改了几个句子(继承自父类,重写了几个方法)

又到月底了,老金你也知道,我香蕉吃的差不多了,欠我的那个香蕉,该还我了吧。

上面毫无营养的文章简要介绍了 Java 中面向对象编程的 类,对象 和 继承 。

1x2 类和对象

人们在遇到一类类似的问题的时候,发现解决他们有许多相似的地方。爱发明工具的人们就把解决这一类问题的通用过程抽象成一个类。就像上面的例子,每一次发讨债的微信都有一部分相同的文字,我们就把他抽象出来变成模板。在 Java 中把通性通法抽象出来叫做 。具体给每个人发的时候就把模板粘贴进来修改使用。在 Java 中就是把类实例化为 对象 。这种思维叫做面向对象编程,缩写 OOP。再来个经典的比喻:人抽象成人类;人是人类的实例;人类实例化成每个人。仔细品味一下。

定义类

[修饰符] class 类名 {
    零到多个构造器定义
    零到多个成员变量
    零到多个方法
}//[] 代表可省略

在上面的格式中,修饰符可以是 public , final , abstract ,或者干脆省略(此处混眼熟,日后介绍)。类通过构造器来执行实例化。方法用于定义该类或该类的实例的行为特征。Java 通过 new 关键字来调用构造器,从而返回该类的实例。如果没有在程序中定义构造器,系统会提供一个默认的构造器。

定义成员变量

定义成员变量的语法格式如下:

[修饰符] 类型 成员变量名 [= 默认值];  //[]代表可省略
  • 修饰符:修饰符是 public protected private static final ,此处混眼熟即可。
  • 类型:类型可以是Java 语言允许的任何数据类型,包括基本类型(如 int )和引用类型(如 String)
  • 成员变量名:自己起个名字,建议由一个或多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。
  • 默认值: 定义成员变量还可以指定一个可选的默认值。

定义方法

[修饰符] 方法返回值类型 方法名 (形参列表){
    由零到多条可执行语句构成的方法体
}   //[]代表可省略

对定义方法语法格式的详细说明如下:

  • 修饰符:同上,日后还会重点介绍
  • 方法返回值类型,返回值类型可以是 Java 语言允许的任何数据类型,包括基本类型(如 int)和引用类型(如 string),如果声明了方法返回值类型,则方法体内必须有一个有效的 return 语句。除此之外,如果一个方法没有反回值,则必须使用void 来声明没有返回值。
  • 方法名:起个名
  • 形参列表: 形参列表用于定义该方法可以接受的参数,形参列表由零组到多组“参数类型 形参名”组合而成,多组参数之间以英文逗号(,) 隔开,形参类型和形参名之间以英文空格隔开。一旦在定义方法时指定了形参列表,则调用该方法时必须传入对应的参数。说的这么抽象,到时候一看就懂。

大括号里的叫方法体,里面可以有多条语句,按前后顺序执行

定义构造器

[修饰符] 构造器名(形参列表){  
    你的代码
}

这东西和方法很像,可以理解为特殊的方法。

  • 修饰符:同上
  • 构造器名:构造器名必须和类名相同。
  • 形参列表:和定义方法形参列表的格式完全相同。

注意一点,构造器既不能定义返回值类型,也不能使用void 声明构造器没有返回值。如果为构造器定义了返回值类型,或使用void 声明构造器没有返回值,编译时不会出错,但Java 会把这个所谓的构造器当成方法来处理一一它就不再是构造器。

2x0 总结

没有图就是显着文章短,扎心,现在我已经不知不觉写了快两千字了,现在是半夜 12:48 ,不行今天就到这里吧。这东西我估计你们也是看着迷迷糊糊的,这样吧,你们先消化消化,咱们明天就是往上扔代码实战。


欢迎关注我的公众号,
每日一文,轻轻松松带你入门 Android 开发

二维码

2020/5/24 注:
这是我 2018 年高中毕业的假期写的,当时并没有自己搭建博客,近期我给这一系列的文章都放到我自己的博客上。
当时写这个系列文章的想法就是扎实下基础,然后能帮到更多的人就更好了,但是大学开学之后就开始了新生活,没有大块的时间去编撰,系列文章也没有再更新过。但是我其实并不想放弃这个系列,那就,有缘再见吧,拜拜ヾ(•ω•`)o