Java 回顾 ( Revisiting Java )

2024-02-19 15:10
文章标签 java 回顾 revisiting

本文主要是介绍Java 回顾 ( Revisiting Java ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在看一些工程代码,于是看了看设计模式,看设计模式之前发现Java是先修知识,又重新补了一遍Java,温故知新,获得一些新的体会。

Java应该是目前用的最多的编程语言,以前觉得Java老要点点点(调用方法),变量名也很长,C++/Python很少代码写完的东西Java可能要写很多行……

拿变量类型来说,Java只有两种变量类型,primitive主数据类型和引用数据类型。

Java中最关键的概念是面向对象,面向对象最关键的东西就是类和对象,所有的Java程序都定义在类中,你不能像python那样,打开.py文件就开始写东西,就可以执行了,也不像C++,定义一个main函数即可运行。在Java中即使main函数也要包括在类中。

为什么面向对象是核心内容?它的好处在哪呢?可以说,OO(面向对象)无处不在,OO使得我们很方便的扩展功能,而不需要重复写很多代码!另外,OO的设计思想其实是抽象思维的一种体现,它改变了我们设计程序的方式,我们不再是根据程序需要什么功能就开始从头到尾实现什么功能,我们更多考虑的是类和对象,程序包含几种类型的实体?有什么共同点?可以进行怎样的抽象?用继承还是接口?……

说说类和对象,类是对象的模板,类定义好“像我这样的人应该有什么状态,特征,能够做到那些事”,而对象具体化了类,真正获得了具体的状态,具体的特征,以及做某些事的方法。

我们说到,Java只有两种变量,primitive主数据类型和引用数据类型。主数据类型包括我们所指的int,double,float等等,这些不是对象。而引用变量是一个到对象的引用,相当于一个遥控器,指向堆上的某个对象,通过此引用可以获得对象,重新赋值此引用并不改变对象,只是引用指到了另一个对象上而已。没有对象变量,只有指向对象的引用变量。

话题回到面向对象,提到面向对象,不得不提其三大特性,这也是面试中经常会问到的,即封装,继承和多态。

  • 封装(encapsulation),即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;

  • 多态(polymorphism),一句话,“接口的多种不同的实现方式即为多态”,但是这个不太好理解,甚至我觉得它不够准确,因为光说接口是不是有点不够?换一种说法,多态即允许将子类对象的引用赋值给父类对象的引用,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。因为:编译器根据引用类型来判断可以调用哪些方法,而不是根据确实的类型。

  • 继承(inheritance) 是指一个对象直接使用另一对象的属性和方法,很简单,父类是球,子类是足球,那么足球可以直接使用“滚动”这个方法,如果需要特殊的“滚”,那子类自己实现就好了。

之所以继承放在最后讲,是因为我们关于继承有更多要说的。

【继承方法调用时的最近原则】调用对象引用的方法时,会调用到与该对象类型最接近的方法,就是说如果子类实现了某继承的方法,那就调用子类的,如果没有实现,那就往上找最近的实现的类的方法。

继承的IS-A测试,即“足球”IS-A“球”,总得满足这样的关系才好说继承,就像你不太好意思继承隔壁王叔叔财产。

继承的意义何在?这是显然的,首先避免了大量重复的程序代码,其次可以定义出一组共同的协议,所有继承者都需要满足这个协议,你知道,在很多时候大家遵守一些共同的规则是很重要的。

继承的一些使用建议:

如果最高的父类不能抽象出一些对所有族类都使用的方法,或者不太好初始化,比如你不好新建一个“球”对象,它是啥球呢?地球还是足球?这样一些情况我们可以定义抽象类,它不能被初始化,只能被继承。。抽象类中可以定义抽象方法,抽象方法只存在于抽象类中,一个类只要有一个抽象方法,那他必是抽象类。

有时候,你会想要继承多个父类,以便使用更多的已有代码,但是不幸的是Java并不支持多重继承,要多重继承请关闭本文,搜索”C++”关键词谢谢。

为啥不支持多重继承呢?因为存在多重继承(继承多个类)的“致命方块”问题,即如果两个父类继承自同一个祖父类,都实现了某个方法,那么子类(如果没有实现该方法)该调用那个版本?

解决“致命方块”问题?接口!

接口是100%纯抽象类,每个方法都是抽象的,必须被实现。

如果想要定义出类可以扮演的角色,使用接口。

接下来从生物学的角度谈谈对象?什么是生物学角度??即生老病死~

对象生存在堆上(可以理解为垃圾堆,随时可能有人来回收…),引用变量或局部变量生存在栈上。

一旦一个对象,它的引用没有了或者离弃了它,那么他就可以等待被回收了。Java有一套垃圾回收机制(GC)保证对象的回收来腾出堆空间,有时候,GC又常常被人诟病,在大数据应用中常常面临这大量的shuffle,大量的对象,有时候需要花费大量的时间来做GC,体验不佳。

总的来说,对象的出生靠调用构造函数,生存在堆上,一旦没了引用,就向生命的终点走去,直到GC(黑白无常)带走了它。。

新建对象时,父类的构造函数先于子类被调用,以此类推,Object的构造函数先被执行,然后往下推,直到目标对象类型

谈谈实例变量,实例变量即对象的成员变量。

JAVA的实例变量具有如下特点:

你可能想问,如果Java中只有对象和primitive主数据类型,那么我想定义全局变量或者常量怎么办?比如PI=3.141592653589..(后面忘了)

Java常量 = final static 的变量

插一句字符串的格式化:

谈谈异常吧,谁能保证自己的程序不出问题呢?与其系统运行的时候报一大堆乱七八糟的错误trace,早早地预见并处理一下,以自己的方式处理或者打印它,总要漂亮些吧?甚至可以在抓到异常后,给出“没关系,一个小错误,已经报告给开发者~”这样温和的语句,是不是显得b格很高?……

序列化对象:有时候需要保存一下对象,以便于恢复,被调用,而不用重新生成,因为生成过程可能很麻烦。

序列化对象:

0?wx_fmt=png

或者不序列化,而是将信息写入文本文件:

0?wx_fmt=png

可以把File想象成文件的路径,代表磁盘上的某个文件,但并不是文件内容

0?wx_fmt=png

这句代码形成如下链接:

0?wx_fmt=png

对象序列化以后,类继续演进,这时会出现无法还原的情况。通过将serialVersionUID放在class中,让类在演化过程中维持同样的ID,可以保证还原的时候能够识别,从而正确还原出对象。但要注意有些修改会损害解序列化。

好吧,先说到这,其实还有一些内容,网络,集合与泛型,以及许多高级特性,反射,虚拟机的深入理解等等,后面再说吧。

Reference

推荐一个不错的微信公众号有兴趣的可以多学学:

0?wx_fmt=jpeg

这篇关于Java 回顾 ( Revisiting Java )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725058

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项