疯狂的java进阶之01搬砖从砖头(对象)开始

搬砖也要搬的不一般。

一、前言

岁月匆匆而来,时光匆匆而去。转眼间,做java开发已有3、4年的时间了,期间做过后台开发,写过前端web,而最主要的则是做android开发。语言也接触过好多种,什么Python、Kotlin、swift、Js、C等等,而最让我迷恋的还是个java。
java的优点我便不多说了,网上有太多的解释。而本文则是我三年来对java的理解,以及对网上收集资料的总结,是最java进阶的知识整理。

进入编程的第四年,不应该仅仅处于java的使用,而java的理解才是一道不得不迈的一道坎。

二、java第一步:啥是面向对象

2种主流的开发方法:结构化程序设计和面向对象程序设计;

* 结构化程序设计:

理解:

结构化程序设计就是将程序功能,进行一层一层的剥离,进行功能细分。一个细分功能就是一个函数,然后再由上层函数进行调用,在函数的层层调用之后,最终由主函数进行调用,实现完整的功能。

原则:

自顶向下、逐步求精、模块化。

* 面向对象程序设计:

理解:

1.什么是对象?
对象是实际存在的该类事物的个体,即对象是类的实例化,现实中的万物都可以理解为一个对象;
如:一辆汽车,将其抽象为具体的属性,即速度、大小、颜色、座位数等属性,以及具体的行为,即加速、刹车、载客等行为。
2.什么是对象?
类是具有共同属性和行为的一组对象的抽象。类是对象的抽象表现,是对象在代码中的具体表现形式;它必须具有属性和行为,才是一个完整的对象。
3.对象就是类?

对象是类的实例化,而类是对象的抽象;

类是面向对象编程中的最小的单元,但是类并不一定是一个对象,而类只是对象的一种表现形式;
对象可以是一个类,也可以是一个函数,或者多个类的集合,即万物皆可为对象;
而有些类在严格的意义上来讲,却并不是一个对象;
如: 一个仅仅包含常量的类,就不是一个对象。它仅仅具有属性缺不具有行为。

4.面向对象的特征

封装、继承、多态

  • 封装:

是把对象的属性和行为结合成一个整体,对细节隐藏,对操作开放。

如:一台智能手机,你不要关心手机内部有什么?怎么运行的程序?你只要点亮屏幕,就可以实现打电话、玩游戏、聊天等功能。

java的封装由权限修饰符:private、public、protected、default实现;
  • 继承:

是对一系列对象的公共属性和行为进行提取封装,而后由其他类继承,并实现自己独有的属性或行为。
父类独立于子类,而子类则依赖于父类。

如:水果是一个父类,其具有酸、甜等属性,也具有吃、腐烂等行为;而橘子也是水果的一种,它不仅具有父类的属性,同时还具有剥皮的特殊行为。因此,橘子是水果的一个子类,它实现了父类的所有方法,但要独立实现剥皮的行为。
简单说,没有橘子,水果依旧还是水果。但是,橘子如果不能吃,那他就一定不是水果。

java的继承使用extends或implements进行标记,通过override(重写)标记父类的行为,通过super实现父类的方法。
  • 多态:

是对象的同种行为的不同表现形式。
多态仅仅针对行为,与属性无关。
java的多态可以划分为同一个类中的多态(重载),以及父类与子类间的多态(重写)

如:‘吃’这个行为。可以表现为,吃饭、吃水果、吃茶等等。

java的多态,由重写(override)和重载(overload)来实现;

三、对象的番外篇

1.权限修饰符

修饰符 类内部 本包 子类 外部包
public 可访问 可访问 可访问 可访问
protected 可访问 可访问 可访问
default 可访问 可访问
private 可访问

备注:⚠️没有填写的内容为不可访问。
问题:被protected标注的外部包的子类是否可以访问?
答:可以访问的,类优先与包,而被protected标注的变量,在子类中是可以访问的。

2.重写和重载的对比

  • 什么是重写?

重写父类与子类之间的多态性,是子类对父类的方法重新定义,可以实现父类的方法,也可以不实现父类的方法。
即,方法名、参数与返回值完全相同,且子类方法的访问权限不可以小于类;

  • 什么是重载?

重载是在同一个类中,相同的行为的不同表现形式。
即,方法名相同,参数的个数或类型不同,返回值可以相同,也可以不同。

  • 概述

重写与重载是java多态性的具体表现形式.
⚠️使用的原则是:相同的行为,表现形式不同时使用

参考链接

3.普通类、抽象类和接口的区别

  • 普通类:
    是具有一系列属性和行为的类,它可以被实例化成一个对象。

  • 抽象类:
    是普通类的抽象形式,它仅仅代表一个分类或抽象概念,它的实例化没有任何意义,因此不希望它被实例化。即,抽象类并不是一个完整的对象。
    特征:
    1.抽象类使用abstract class对类名进行标记;
    2.抽象类可以有抽象方法,也可以没有抽象方法,其使用 abstract标记;
    3.抽象类不可以被实例化;
    4.抽象类可以有普通方法,并实现具体行为。
    5.抽象类的子类,必须实现父类的抽象方法,或者子类也是抽象类。
    6.抽象类通过extends使用,一个类只能继承一个抽象类。

  • 接口:
    接口是特殊的抽象方法,在接口中所有的方法都是抽象方法。
    特征:
    1.接口使用interface对类名进行标记;
    2.接口中全部都是抽象方法,不可以写方法的实现,由子类实现具体的行为;
    3.接口不可以被实例化;
    4.接口通过implements使用,一个类可以实现多个接口。

  • 接口和抽象类的之间的区别。
    1.变量,抽象类可以有实例变量,而接口不能拥有实例变量,接口中的变量都是静态的常量。
    2.方法,抽象类中可以有非抽象方法,而接口中只能拥有抽象方法。
    3.接口可以多继承,抽象类只能继承一个。

  • 接口和抽象类的使用场景
    在考虑使用抽象类还是使用接口时,应该从以下两点出发。
    1.父类中不需要实现具体的功能,使用接口;
    2.子类需要继承多个父类,才能实现完整的功能时,使用接口;
    其他情况,一般会使用抽象类。
    参考链接

4.类的初始化流程

父类:

public class ClassA {
    //构造方法
    ClassA() {
        System.out.println("父类-构造方法");
    }

    //非静态代码块
    {
        System.out.println("父类-非静态代码块");
    }

    //静态代码块
    static {
        System.out.println("父类-静态代码块");
    }

    //静态方法
    public static void mothedA() {
        System.out.println("父类-静态方法");
    }
}

子类:

 public class ClassB extends ClassA {
    //构造方法
    ClassB() {
        System.out.println("子类-构造方法");
    }

    //非静态代码块
    {
        System.out.println("子类-非静态代码块");
    }

    //静态代码块
    static {
        System.out.println("子类-静态代码块");
    }

    //静态方法
    public static void mothedB() {
        System.out.println("子类-静态方法");
    }

    //静态方法
    public static void mothedA() {
        System.out.println("父类-静态方法");
    }

}

备注:
1.父类的方法优先与子类的方法;
2.同一个类中的非静态代码块与构造方法先后执行,执行完成后才会执行到子类;
3.若直接调用静态方法,优先于非静态代码块。

调用方式 执行顺序
new ClassA(); 父类-静态代码块
子类-静态代码块
父类-非静态代码块
父类-构造方法
new ClassB(); 父类-静态代码块
子类-静态代码块
父类-非静态代码块
父类-构造方法
子类-非静态代码块
子类-构造方法
ClassA.mothedA(); 父类-静态代码块
子类-静态代码块
父类-静态方法
ClassB.mothedA(); 父类-静态代码块
子类-静态代码块
父类-静态方法
ClassB.mothedB(); 父类-静态代码块
子类-静态代码块
子类-静态方法

总结:
1.直接调用静态方法,即没有实例化,不会运行非静态代码块和构造方法;
2.同一个类中的非静态代码块与构造方法先后执行,执行完成后才会执行到子类;
3.相同方法,父类优先于子类;


以上是我对java象的简单理解。
若有问题,欢迎指正、留言,欢迎大家一起讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容