从前端到全栈 -- 最全面向对象总结——《我的Java打怪日记》

简介: 从事前端的这两年中,也接触了后端领域,像 `PHP` `Node`, 并且都用它们做过一些 `demo` 和 `私活` ,站在职业发展道路上来讲,了解后端是好的,自己可以熟练前后的开发流程,整条链路下来,很清晰,懂了后端,在自己以后创业或者接私活,都是不错的。 而且现在在`Web`后台领域, `Java` 是 老大哥了,`Spring` 全家桶走遍天下,于是最近又重拾 `Java` 了,从前端迈向全栈

简介: 笔者前在某国企担任前端开发,两年半经验,某平台签约作者。我走上 前端这条路也是很有趣的,其实我接触的第一门编程语言是 Java ,那是在大一的时候,跟着学校的编程课学习,学习了半年多到 I O 流,整个过程下来又漫长又枯燥,那会不懂得自主找资料和视频学习,走了很多弯路。大一过后,我在大二上半学期刚开始,不断尝试各种编程语言,知道当下每门热门语言是干什么的,并写了一些实际 demo ,最终在 JavaScript 落脚了,没错,这就是我走上前端的开始,后来在大学里直接扎进这个方向学习了,毕业后顺利的从事了 前端开发工作。

从事前端的这两年中,也接触了后端领域,像 PHP Node, 并且都用它们做过一些 demo私活 ,
站在职业发展道路上来讲,了解后端是好的,自己可以熟练前后的开发流程,整条链路下来,很清晰,懂了后端,在自己以后创业或者接私活,都是不错的。 而且现在在Web后台领域, Java 是 老大哥了,Spring 全家桶走遍天下,于是最近又重拾 Java 了,从前端迈向全栈

这是我最近花了一周的时间复盘的 Java 面向对象 总结,希望能帮助到你.

微信图片_20210725231726.jpg

导读目录

重学Java 面向对象1.png

学习路线

这份学习路线 是 我跟着 某up主 视频总结的,很全面
Java 后端开发学习路线.png

重学Java

一、面向对象 OOP

1. 1 关于 superthis 区别

super

  1. super 调用父类的构造方法,必须在子类构造方法中第一个
  2. super 必须只能出现在子类的方法 或者 构造方法 中
  3. super this 不能同时出现在调用构造方法

this

代表的对象不同:

  1. this : 本身调用者这个对象
  2. super : 代表父类对象应用

1.2 多态

同一方法可以根据发送对象的不同而采用多种不同的行为方式。

一个对象的实际类型是确定的,但可以指向对象的引用类型有很多。

多态存在条件

  1. 有继承关系
  2. 子类重写父类的方法
  3. 父类引用指向了子类对象

注意

  1. 子类如果重写了父类方法,父类对象是调用的子类重写后的方法

类型转换

类型转换目的: 方便方法调用,降级,升级,减少代码重复性,但也有缺点,丢失精度性

  1. 向上转型 (子 转 父 ) 低转高 可直接转
  2. 向下转型 (父 转 子) 高转低 需要强制转换

    高 转 低 后, 然后再进行强制转换,

    子类型 子对象 = (子类型) 父对象

    Person per = new Student()
    Student student = (Student) per   //  ((Student) per).方法/属性
    
    per.子属性和方法

1.3 static

1.3.1 static 用途

在没有创建对象的情况下调用方法和属性(静态的)。

static 可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。

1.3.2 static 静态方法

  1. static 方法一般称作静态方法,静态方法不依赖于任何对象就可以进行访问, 因此对于静态方法来说,是没有this的。
  2. 在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
  3. 在非静态方法中是可以访问静态成员方法/变量的。

1.3.3 static 静态变量

静态变量和非静态变量的区别是

  1. 静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
  2. 非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

static成员变量的初始化顺序按照定义的顺序进行初始化。

1.3.4 static 代码块

static关键字来形成静态代码块以优化程序性能,。

static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

可以把方法中常量放入到 静态块中,这样不至于,每次调用,又重新创建,造成空间浪费。

public class Test {
    private  static Date date ;
    private  static SimpleDateFormat formatter;
    static {
         formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
         date = new Date(System.currentTimeMillis());
    }
    public static void main(String[] args) {
        getTime();
    }
    public static void  getTime(){
        System.out.println(formatter.format(date));
    }
}

以上例子是 用来获取当前时间,在调用getTime 静态方法时,它不会重复创建Date SimpleDateFormat

执行顺序: 优于构造器

1.3.5 static 注意

  1. static关键字不能会改变类中成员的访问权限, 能改变访问权限只有 privatepublicprotected.
  2. 通过 this 可以在非静态方法中是可以访问静态方法和静态成员的

    public class Test {
        private  static Date date ;
        private  static SimpleDateFormat formatter;
        private  static String name = "前端自学社区";
        
        public static void main(String[] args) {
             Test test = new Test();
             test.getStatic();
        }
        public static void func(){
            System.out.println("我是静态方法");
        }
        public  void getStatic(){
            System.out.println(this.name);
            this.func();
        }
    }

    例子中,在非静态方法中,可以直接通过 this 来进行访问的静态方法和静态成员 ,然后通过类实例化后,对象即可通过非静态方法来获取到静态方法中得静态属性和方法。

1.4 抽象类 abstract

我们先来了解一下抽象方法,抽象方法是一种特殊的方法:它只有声明,而没有具体的实现

抽象方法的声明格式为:

abstract int getNum();

1.4.1何为 抽象类 呢 ?

abstract关键词修饰的类就是抽象类,抽象类含有属性和抽象方法。

抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。

当 子类 继承 了 抽象类 ,那么必须的实现抽象类的抽象方法,同时 子类的实例化对象拥有抽象类的属性

public abstract class Animal {
    abstract String name;
    abstract void eat();
}

1.4.2 抽象类作用?

抽象类主要用来抽离事物的共性,抽离出属性和方法,子类 继承 抽象类,提高代码效率。

1.4.3 抽象类与普通类区别

  1. 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
  2. 抽象类不能用来创建对象;
  3. 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

1.5 接口 interface

1.5.1 什么是接口?

它是对行为的抽象,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

当一个类需要用到这些抽象行为的话,需要 实现接口 implements , 而且必须实现接口中方法。

public interface person {
    void study(){}  
}

1.5.2 接口特性

  1. 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。 也可不写,默认就是public abstract

    public interface Aniaml{
        public abstract void eat(); // 抽象方法 == 等同于  void eat();
    }
  2. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

1.5.4 接口的作用

  1. 使用接口可以继承超过一个以上的来源,这样可以为不同的需求组合出不同的继承层次。
  2. 接口规范了实现类,必须实现的方法和属性。

1.6 接口与抽象类

在Java中,可以通过两种形式来体现OOP的抽象:接口抽象类, 它俩有很多相似之处。

1.6.1 接口与抽象 区别

  1. 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
  3. 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
  5. interface 接口 是针对事物的 行为 [ 方法 ] 来进行抽象的, 而 抽象类 是针对事物的共性来 对 行为 和 属性 来进行抽象的。

1.6.2 例子

接口 interface

public interface PeopleInterface {
    void eat();
    void study();
    void play();
}

抽象类 abstract

public abstract class People {
   String name = "人类";
    abstract void watch();
}

子类

public class Test extends People implements PeopleInterface {
    public static void main(String[] args) {
        Test test = new Test(); // 子类拥有抽象类的属性
        System.out.println(test.name);
        test.eat();
    }

    @Override
    public void eat() {
        System.out.println("吃的功能");
    }

    @Override
    public void study() {
        System.out.println("学习功能");
    }

    @Override
    public void play() {
        System.out.println("玩的功能");
    }

    @Override
    void watch() {
        System.out.println("看的功能");
    }

}

上面例子中讲了 类 与 接口 抽象类之间关系。 首先 Test 类 继承了 People 抽象类,然后又 实现了 PeopleInterface 接口。

子类继承 抽象类的同时,必须实现抽象类的抽象方法,子类实例化时,拥有抽象类的属性。

子类实现 接口的同时, 必须实现接口中所有的接口行为。

结语

以上是对Java 面向对象 的总结分享,希望能对你有所启发,欢迎提出意见!

目录
相关文章
|
19天前
|
Cloud Native 前端开发 JavaScript
前端开发者必看:不懂云原生你就OUT了!揭秘如何用云原生技术提升项目部署与全栈能力
【10月更文挑战第23天】随着云计算的发展,云原生逐渐成为技术热点。前端开发者了解云原生有助于提升部署与运维效率、实现微服务化、掌握全栈开发能力和利用丰富技术生态。本文通过示例代码介绍云原生在前端项目中的应用,帮助开发者更好地理解其重要性。
53 0
|
23天前
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
17天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
12 2
|
22天前
|
JavaScript 前端开发 测试技术
前端全栈之路Deno篇(五):如何快速创建 WebSocket 服务端应用 + 客户端应用 - 可能是2025最佳的Websocket全栈实时应用框架
本文介绍了如何使用Deno 2.0快速构建WebSocket全栈应用,包括服务端和客户端的创建。通过一个简单的代码示例,展示了Deno在WebSocket实现中的便捷与强大,无需额外依赖,即可轻松搭建具备基本功能的WebSocket应用。Deno 2.0被认为是最佳的WebSocket全栈应用JS运行时,适合全栈开发者学习和使用。
|
24天前
|
缓存 前端开发 JavaScript
前端的全栈之路Meteor篇(二):容器化开发环境下的meteor工程架构解析
本文详细介绍了使用Docker创建Meteor项目的准备工作与步骤,解析了容器化Meteor项目的目录结构,包括工程准备、环境配置、容器启动及项目架构分析。提供了最佳实践建议,适合初学者参考学习。项目代码已托管至GitCode,方便读者实践与交流。
|
23天前
|
存储 前端开发 JavaScript
前端的全栈之路Meteor篇(四):RPC方法注册及调用-更轻量的服务接口提供方式
RPC机制通过前后端的`callAsync`方法实现了高效的数据交互。后端通过`Meteor.methods()`注册方法,支持异步操作;前端使用`callAsync`调用后端方法,代码更简洁、易读。本文详细介绍了Methods注册机制、异步支持及最佳实践。
|
23天前
|
前端开发 JavaScript 中间件
前端全栈之路Deno篇(四):Deno2.0如何快速创建http一个 restfulapi/静态文件托管应用及oak框架介绍
Deno 是由 Node.js 创始人 Ryan Dahl 开发的新一代 JavaScript 和 TypeScript 运行时,旨在解决 Node.js 的设计缺陷,具备更强的安全性和内置的 TypeScript 支持。本文介绍了如何使用 Deno 内置的 `Deno.serve` 快速创建 HTTP 服务,并详细讲解了 Oak 框架的安装和使用方法,包括中间件、路由和静态文件服务等功能。Deno 和 Oak 的结合使得创建 RESTful API 变得高效且简便,非常适合快速开发和部署现代 Web 应用程序。
|
23天前
|
JSON 分布式计算 前端开发
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
|
24天前
|
JavaScript 前端开发 Docker
前端的全栈之路Meteor篇(一):开发环境的搭建 -全局安装或使用容器镜像
本文介绍了如何搭建 Meteor 开发环境,包括全局安装 Meteor 工具和使用 Docker 镜像两种方法,以及创建和运行一个简单的 Meteor 项目的基本步骤。 Meteor 是一个全栈 JavaScript 框架,适用于构建实时 Web 应用程序。文章还提供了遇到问题时的解决建议和调试技巧。
|
23天前
|
JavaScript 前端开发 Serverless
前端全栈之路Deno篇:Deno2.0与Bun对比,谁更胜一筹?可能Deno目前更适合serverless业务
在前端全栈开发中,Deno 2.0 和 Bun 作为新兴的 JavaScript 运行时,各自展现了不同的优势。Deno 2.0 重视安全性和多平台兼容性,尤其是对 Windows 的良好支持和原生 TypeScript 支持;而 Bun 则以卓越的性能和简便的开发体验著称,适合快速迭代的小型项目。两者在不同场景下各具特色,Deno 更适合企业级应用和serverless,Bun 则适用于追求速度的项目。
102 1