大数据学习记录--JAVA篇--面向对象进阶

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 这一部分的语法和相关知识非常多,重在理解方便后续能流程的读代码,也不需要死记一些太细的知识点。

Static关键字--静态的意思

常常用于修饰成员变量或者成员方法,代码块等,静态static的核心!!就是说明这个东西一开始就在这,归属于类,随着类的加载而加载,不需要实例化具体对象
1、Static修饰的成员变量
a、static修饰的变量属于整个类,在内存里就只存一份,被所有类成员共享。
image.png
b、这个变量不需要实例化对象就一直存在在那。所以在访问静态变量的时候,直接 ( 类名.xxx )的形式访问。
2、Static的修饰的成员方法
a、static修饰的方法属于整个类,静态方法在类加载的时候就一起放到方法区中,常用来实现一些共有功能。
image.png
b、同样,在访问静态方法的时候,直接 ( 类名.xxx )的形式访问。
3、static用在工具类,
a、定义一个类,里面全是静态方法,直接用类名调用这些共有的方法,供其他类使用,同时将工具类的构造器私有,因为用不着实例对象。

代码块--类中第四大部分

1、理解是什么,方便以后代码中看到能懂
a、代码块是和成员变量,方法,构造器同一级别的东西,同样归属于类,一般写在成员变量之后,方法之前。
b、写法就是直接写一个{}大括号,然后里面写一些代码。
2、一般有两种--static{}代码块和无static的{}代码块
a、static{}同样是归属于类,不需要实例化对象,在类加载时就直接执行,一般就常用于作静态资源的初始化。举了个例子,假设定义了一个类中有一个扑克牌成员变量,类型是ArrayList。那我们就可以定义一个static{}代码块,用于把这个扑克牌成员变量给填充了,就是把各种牌放进这个定义的扑克牌ArrayList中。
b、无static{}修饰的,就是只有在用构造器new一个对象的时候,才会跟着执行的代码块,不常用。

单例--可以理解为一种固定的写法模式

1、理解概念
a、用于保证类只能实例化一个对象,在某种需求下需要设计相应的代码实现。
2、怎么实现--饿汉单例和懒汉单例
--饿汉单例就是直接在类中定义static成员变量的时候就new出来一个对象
image.png

--懒汉单例就是在类中定义static成员变量的时候先不new,后面定义一个方法来new,同时判断对象是否已经存在,不存在才能new,否则就把原来的对象返回。
image.png

--注意在单例这种设计模式下构造器一定要私有!!!其余的区别就是那个唯一的对象是如何定义,在何时定义的问题了。

JAVA中的继承

1、理解概念和最重要的内存机制!!

a、定义的时候用extend来表明继承的关系,同时子类在定义对象的时候会开辟一对空间,因为子类中可能有一些父类的信息。
b、后面的一切的一些规则,什么可以什么不可以的核心其实就是理解这个内存关系!从这个内存中推理哪些可以访问可以哪些不可以。
image.png

2、继承里的一些访问规则

a、java是单继承,但是可以多层的继承,就近原则,同样的变量或方法,优先自己内部的,再到直接父类,再到父类的父类。java有一个究极大爹--object类,是所有类的最终的父类,什么equal和tostring这种方法就是属于object的,所以除了基本数据类型以外的所有类都可以调用!
b、子类是可以继承父类里的private的成员变量的,相当于子类也有同样的变量,只不过不能直接访问,要用相应的getter和setter的方法访问,从内存图那里理解。
c、但是!但是!父类的private的方法子类是无法直接访问的,是调用不了的,因为私有方法只有在类内部才可以用。虽然内存里也存了,但是由于访问规则限制,访问不了。
d、子类也可以直接访问父类里定义的一些static的变量成员,内存图理解,那个static的变量就放在父类那个空间里呢,当然可以访问。
--这些个访问规则通通可以用内存图来理解清楚

3、this,super关键字和其余一些继承后的特点

a、在子类中如果要访问大家都有的一些成员变量或者方法,访问的原则是就近原则,如果不指明的话。或者可以用this.和super.来指明要访问哪个类的变量和方法。
b、this和super除了用来指明引用的是子类还是父类以外,还可以用来调用,子类其他构造器或者父类构造器,下面有说。
c、方法的重写
--就是子类中重写父类的某个方法,要求方法名和参数列表全部一致,其他一些什么规则其实也不用太在意,就明白子类中有些行为和父类一样但是具体细节不同,所以要重写就行。
c、子类构造器的特点
--子类构造器在调用的时候会默认先调用父类的无参构造器,同样用那个内存图来理解。
--具体实现:子类构造器里会默认写一个super()来调用了父类的无参,所以其实可以手动调用父类的有参,就是在子类的有参里,第一行加上super(x,x)来先调用父类有参,为一些来自父类的成员变量幅值,再对自己独有的一些成员变量赋值。
--所以this(...)和super(...)分别代表的就是访问子类中其他兄弟构造器,和访问父类中的构造器。且这两个都必须放在构造器的第一行,所以不能同时存在。

权限修饰符

1、四种权限修饰符:作用范围从小到大(private->缺省->protected->public)
2、四种修饰符的作用域如下:
image.png
具体在定义时,一般参考如下:
image.png

final关键字--最终的意思

1、可以修饰--类、方法、变量,--类--不可被继承,--方法--不可被重写,--变量--第一次赋值后,不可被重新赋值。
2、对变量来说,分为两种情况,若修饰基本类型的变量,那么变量存储值不可改变,若修饰引用类型的变量,那么变量存储的地址不能变,但是内容是可以更改的。
3、常量!用public static final修饰的成员变量
image.png

枚举--一种特殊的类

1、枚举实例化在一开始就进行,且不能修改,
image.png
--相当于定义了一个类,这个类就固定几个实例对象--
2、枚举的具体实现方式,其编译后的代码如下:
image.png

抽象类--abstract修饰

image.png
1、用来作为父类给子类继承,子类必须重写全部的抽象方法,否则也必须定义成抽象类。
2、重写方法的时候,可以写一个@override,重写方法标志。
3、抽象类不能定义对象,只是用来给子类继承的。
image.png

接口--一种定义的规范

image.png
image.png
1、接口定义一种规范,用来被类实现,可以多实现
2、有人问那有内部类不久行了,要接口干嘛?接口的优势就是类可以实现多个接口。
3、同时接口和接口之间还可以多继承!
image.png

多态--面向对象最后一个特征

image.png
1、理解什么是多态就行,就是对象是父类的,但是方法是子类重写的。
image.png
2、对象还是定义成父类的,所以父类中没有的方法,子类独有的功能是不能调用的。
3、对象类型的转换--两种:
自动的类型转换(子赋给父)和强制的类型转换(父赋给子)
image.png
---instanceof关键字,用来判断对象的真实类型

内部类--类的五大成分中的最后一个

1、回顾一下类的五大成分:成员变量,成员方法,构造器,代码块,内部类
image.png
2、主要从定义上分为三种:
--静态内部类
image.png
image.png
--成员内部类
image.png
image.png
--私有内部类
看看书咯!
3、匿名内部类
image.png
image.png

一些常见的API--object、objects

1、object,所有类的大爹,toString方法就是object中的。
image.png
注意,在定义类的时候必须要重写toString方法,否则的话当你用sout输出对象的时候默认就是输出地址,而不是你想要的内容,这个object的toString方法就是让子类去重写适合自己的内容去进行输出的!
2、还有equals方法
image.png
3、还有一个objects这个是object的一个子类,里面提供了新的equals方法等
image.png

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
2月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
95 43
Java学习十六—掌握注解:让编程更简单
|
1月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
36 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
1月前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
存储 SQL 分布式计算
大数据学习
【10月更文挑战第15天】
49 1
|
2月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
52 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
2月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
36 0
|
2月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
23天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
181 7