【对于Java语言中降低代码冗余性的认识】

对于Java语言中降低代码冗余性的认识

刚刚结束Java语言基础的学习,对于其中降低代码冗余性所做出的操作作一个总结,用于梳理自己的思路。
欢迎讨论和指正。
ps:之前我想写成对于封装性的认识的,因为我在学习过程中一直以为“封装”就是将一些重复使用的代码抽象出来的操作。。。
(现在看来这种操作可以看做是一种类似于“打包”,“包装”一类的操作,而不是Java语言中所指的“封装”)后来写到一半发现Java中的“封装”是有具体的含义的,为了不混淆,换成了现在这个题目。
ps:多亏这次总结,不然我对其中的一些概念还是有点认识不清。。。

下边是ChatGPT的回答,供参考。

在Java中继承算是封装的一种吗?

在 Java 中,继承不能算作封装的一种,虽然它们都是面向对象编程中的重要概念,但它们的本质和目的不同。
封装(Encapsulation)是指隐藏代码的实现细节,将类的内部状态和行为保护起来,避免外界直接访问和修改状态。在 Java 中,通过对类的成员变量进行 private 访问修饰符限定,再通过 public 方法或接口提供公共的访问接口,从而实现了对数据的封装。
继承(Inheritance)是指一个类从另一个类继承其属性和方法,并在此基础上添加自己的属性和方法的机制。它主要用于复用已有的代码,避免了在多个类中编写相同的代码。
虽然在继承中,子类可以继承父类的成员属性和方法,从而实现了具有“父子”关系的类间相互复用,但是这并不能算作封装的一种,因为继承和封装的目的是不同的。继承是为了实现代码复用和继承特征和行为,让类可以适应多种情况,而封装是为了保护类的内部实现,控制对数据的访问和操作。

一、概述

将代码中的一些常用的模块“打包”成一个固定的部分,当每次使用的时候直接调用,这样减少了代码的行数,降低了代码的冗余性,这样做有以下几个好处

Java中降低代码冗余性的重要原因有以下几个方面:

1、提高代码可维护性:当代码存在大量的重复时,程序员在修改代码时需要同时改动多处,在程序升级和维护时会变得非常繁琐。如果代码精简,程序员只需对少数几处进行修改,降低了维护的难度和成本。
2、提高代码可读性和可理解性:降低代码冗余性可以使代码更加简洁明了,易于理解和阅读,为后续程序维护和开发工作提供便利。
3、提高代码的运行效率:当一段代码被多次重复调用时,它执行的时间也会相应地增加。通过精简代码、去除重复部分,可以减少重复执行的代码,提高代码的执行效率。
4、提高软件的可靠性:冗余的代码意味着潜在的错误点更多,一旦这些错误点引入到软件中,将导致软件的不稳定、出错等问题。精简代码可以减少错误并最终提高软件的质量。

接下来将分别介绍Java中为了降低代码冗余性的操作

二、相关操作

2.1 继承

在现实生活中,常常会出现某事物隶属于另一事物的情况,比如猫和狗都属于动物这一大类,男人和女人又都属于人这一大类,其中一些公共的特征比如动物都会叫,都需要吃饭,都有自己的名字,年龄等信息都可以再次抽象成一个类,而让猫和狗都继承于这一个大类,这样就不用把这些属性或方法在写一遍,降低了代码的冗余性,同时也为多态的使用提供了前提。
在这里插入图片描述

2.2 静态变量、方法

静态变量在内存中只会被创建一次,随着类的加载而加载,在后续创建对象时每个对象里都有这一个变量,静态方法主要用来提供公用的功能模块,例如数学计算、字符串处理等常用工具类,避免了每一次实例化对象时都执行相同的操作,从而提高整体效率和代码的复用性,降低了代码的冗余性。

2.3 代码块(静态 非静态)

静态代码块同静态变量一样,也是随着类的加载而加载,用于初始化类的信息,内部可以声明变量、调用属性或方法、编写输出语句等操作,例如当创建一个
非静态代码块虽然随着对象的创建而执行,但是也是用作初始化实例变量以及执行一些初始化操作,比如可以用来初始化实例变量的id用于标识这个创建的对象是第几个被创建的。

public class Example {
    private static int count;            // 静态变量
    private int id;                      // 实例变量

    static {
        count = 0;                        // 初始化静态变量count
        System.out.println("执行静态代码块");      // 输出日志
    }

    {
        id = ++count;                     // 初始化实例变量id
        System.out.println("执行非静态代码块"+id);   // 输出日志
    }

    public Example() {
        System.out.println("执行构造方法");       // 输出日志
    }
}

对上述代码进行测试

public class TestExample {
    public static void main(String[] args) {
        Example e1 = new Example();
        Example e2 = new Example();
    }
}

最终会得到结果

执行静态代码块
执行非静态代码块1
执行构造方法
执行非静态代码块2
执行构造方法

可见其中创建的两个对象分别被冠以1 和 2 ,上述程序将初始化实例变量id的操作包装起来放到代码块中,降低了代码的冗余性。

2.4 泛型(类 方法)

在学完集合框架后,还有点念念不忘,又蹦出来一个重磅炸弹–泛型,在集合框架中,有一个这样的问题,我并不知道你要对什么类型的数据进行操作,那么我在设计增删改查等方法的时候是不还得需要进行数据类型的判断,然后再执行相应的方法,对于Java中8个基本数据类型的对应引用数据类型还有集合框架里3大类数据类型,需要提供的方法未免太多了,而泛型就是为了解决这一问题而诞生的,其在定义方法的时候,将数据类型用或表示,当使用时一旦确定数据类型,那么他就能处理对应数据类型的数据,极大地减少了各种数据类型的方法,仅需要使用带泛型的方法即可。

2.5 “万事万物皆对象” (包装类 迭代器类 scanner类 集合类 file类 io流类 网络编程类 Class类)

怎样理解Java中“万事万物皆对象” ?

Java 中的 “万事万物皆对象”(Everything in Java is an Object)是它的基本哲学之一,它提高了程序的可读性、可扩展性和可维护性。简单来说,就是Java 语言内部的所有事物(包括基本数据类型、数组、函数等)都能被视作对象。
具体来说,Java 中主要特点表现为:
1、原始数据类型也能被看作是对象,例如 int 和 char 等基本数据类型也是对象标准库类和用户定义的类一样。
2、所有的对象都继承自Object类,包括数组和基本数据类型的封装类如Integer和Double等。
每个对象都有一个 toString() 方法,继承自Object类,可以将对象转换成字符串形式。
3、操作对象的方法都存储在对象所属的类中。
因此,在Java中,“万事万物皆对象”,这种面向对象的思想非常深入,它允许开发者合理地组织程序结构,并且降低了复杂度。同时,对象的面向设计思想也方便了各种设计模式的实施,体现了OOP(Object-Oriented Programming)编程思想的优越性。

众所周知,Java是一门面向对象(OOP)的语言,那么首先就得理解Java中"万事万物皆对象",Java可以说是彻底颠覆了我对对象的认知,之前也接触过面向对象的语言,python,那时候只知道调用一些库,学完Java后才真正理解什么是面向对象。
刚开始学的int,double 这些和c语言中也没什么不同,只是有个String和它们稍微有些区别,直到后来学到这些居然也可以用类来表示,Integer和Double类,里边除了可以创建基本的数据之外还包装了一些常用的方法,到这时才刚刚感觉到Java的趣味;
再后来,什么迭代器(就是管遍历的)也是一个类,sanner(就是类似于c语言中的scanf函数,从键盘读取数据)也是一个类,又给了我不小的冲击,再再后来,数据结构(集合框架)、File(操作文件)、IO(管理数据传输的)、网络节点也是一个类,从此我慢慢接受了类,也慢慢了解什么是“万事万物皆对象”。

到了最后一章反射的时候,它居然class本身也是也是一个类的对象,隶属于Class类,啊啊啊到现在我才真正明白果然“万事万物皆对象”(连类本身也是对象!!!)

将几乎所有的操作都包成一个类,在使用的时候通过实例化一个对应的对象来进行操作或调用里边的相应的方法,这何尝不是一个降低代码冗余度的方法,在你想要执行某个操作的时候,只需要调用对应的方法即可(虽然这在python中也存在,但是当时并没有“万事万物皆对象”这一想法,没有形成面向对象编程的思想),或许这种面向对象的编程本身就是为了降低代码的冗余度而存在的吧。

后记

先总结这么多吧,接下来将学习MySQL相关的内容了,Java基础先暂告一段落,后边可能去刷一下题,实战操作一下,关于Java基础内容欢迎讨论留言!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值