《码出高效 Java开发手册》第二章 面向对象
码云地址: https://gitee.com/forxiaoming/JavaBaseCode/tree/master/EasyCoding
第2章 面向对象
Object-Oriented Programming
软件工程3个主要目标: 可维护性、可重用性、可扩展性
2.1 OOP理念
- Object类中的三大哲学问题
- 我是谁? getClass() toString()
- 我从哪里来? Object() clone()
- 我到那里去? finalize()
clone()方法: 分为浅拷贝, 一帮深拷贝, 和彻底深拷贝
- java4大特性: 抽象,封装,继承,多态
2.3.2. 抽象类与接口
- 接口可以多重继承
- 接口可以有default实现(jdk8)
2.3.4 访问权限控制
- public,protected,无,private
- 有的地方会将无访问权限说成default, 注意jdk8的default
2.3.6 类的五种关系
- extends (is-a)
implements(can-do)
- 组合: 类是成员遍历(contains-a)
- 聚合: 类是成员变量(has-a)
依赖: import类(use-a)
2.3.7 序列化的三种方式
1. Java 原生序列化
Serializable接口类是实现该类对象的序列化, 该接口没有方法, 只有标记作用;
一定要显示设置serialVersionUID属性值
- 兼容升级, 不要修改serialVersionUID
- 不兼容升级, 需要修改
注意:
- Java反序列化时不会调用类的无参构造方法, 而是调用native方法将成员变量赋值未
对应类型的初始值;
* 基于性能及兼容性考虑,不推荐使用
2. Hessian 序列化
- 支持动态类型、跨语言、基于对象传输的网络协议;
- 自描述序列化类型(不依赖外部描述文件或接口定义)
- 语言无关, 支持脚本语言
- 协议简单, 比Java原生序列化高效
3. JSON 序列化
- 将数据对象转换未JSON字符串;
- 序列化时抛弃类型信息, 所以反序列化时只有准确提供类型才能准确的反序列化;
- 可读性好, 方便调试
序列化安全
- 序列化通过网络传输对象时, 对象中友敏感数据, 会容易成为黑客的攻击点;
- 反序列化漏洞
如何防范:
- transient 关键字
- 使用对称或非对称加密传输
2.4 方法
- 方法签名: 方法名称 + 方法参数
- 方法传参: 无论是基本数据类型, 还是引用变量, Java中的参数传递都是值传递
- 可变参数: 需要对参数预处理(入参保护+参数校验)
- 构造方法:
- 必须与类名相同
- 没有返回类型, void也没有 (返回对象的地址)
- 不能被继承, 不能被覆写, 不能被直接调用 (1. new ,2. 子类构造中super, 3.反射)
- 默认构造方法 (显示定义有参构造后默认构造会被覆盖)
- 构造方法可以私有
- 接口中不能定义构造(抽象类可以)
- 静态代码块优先级最高, 在父子类之前执行, 并且只运行一次;
- 覆写:
- 访问权限不能变小
- 返回类型能够向上转型成为父类的返回类型
- 异常能向上转型成为父类异常
- 方法名, 参数类型及个数一致
- (一大两小两桶)
- 向上转型:
Father f1 = new Son(); // 这就叫 upcasting (向上转型)
// 现在f1引用指向一个Son对象
Son s1 = (Son)f1; // 这就叫 downcasting (向下转型)
// 现在f1还是指向Son对象
Father father = new Son();
father.sonMethds(); // Son中的方法, 报错, 子类由于向上转型而失去丢失sonMethods()
2.5 重载
- 方法签名= 方法名称+参数类型+参数个数
- 在方法名称相同下, 一定要对参数进行操作, 才能算重载, 否则编译会失败
问题思考: 比如两个参数顺序调换SameMethodSinature.java
public void methodForOverload(int i, String s) { }
public void methodForOverload(String s, int i) { }
2.6 泛型
类型参数化
- E Element 集合中的元素
- T the Type of object 某个类
- K Key
- V Value
GenericDefinitionDemo.java
- 尖括号里的每个元素都指代一种未知类型(仅仅为一种代号)
- 尖括号的位置: 类名之后或方法返回值之前
- 泛型定义处只具备执行Object方法的能力
- 对于编译后的字节码指令, 其实没有这些花头花脑的方法签名, 充分说明了泛型只是一种编写代码时的语法检查
类型擦除
2.7 数据类型
基本类型 & 包装类型
包装类还是基本数据类型?
- 所有POJO类属性必须使用包装数据类型;
- RPC方法的返回值和参数必须使用包装;
- 所有的局部变量推荐使用基本数据类型;
《码出高效 Java开发手册》第二章 面向对象的更多相关文章
- 《码出高效 Java开发手册》第七章 并发与多线程
码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/concurrency/multithreading ...
- 《码出高效 Java开发手册》第六章 数据结构与集合
码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/collection/index.md 6.1 数据 ...
- 《码出高效 Java开发手册》第五章 异常与日志
码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/exception/index.md 5.2 try ...
- 《码出高效 Java开发手册》第三章 代码风格
第3章 代码风格 3.1 命名 符合语言特性 体现代码元素特征: Abstract xxx. Basexxxx.xxException.xxxTest等; 包名统一使用小写, 完整单词+点分隔符; 枚 ...
- 《码出高效 Java开发手册》第四章 走进JVM(未整理)
码云地址: https://gitee.com/forxiaoming/JavaBaseCode/tree/master/EasyCoding
- 《码出高效 Java开发手册》第一章计算机基础(未整理)
码云地址: https://gitee.com/forxiaoming/JavaBaseCode/tree/master/EasyCoding
- 《码出高效:Java开发手册》第四章学习记录,内容想当的多,前后花了几天的时间才整理好。
<码出高效:Java开发手册>第四章学习记录,内容想当的多,前后花了几天的时间才整理好. https://naotu.baidu.com/file/e667435a4638cbaa15eb ...
- 码出高效,阿里巴巴JAVA开发手册1.4.0
码出高效,阿里巴巴JAVA开发手册1.4.0阅读笔记 一.编程规约(三) 代码格式// 关键词if与括号之间必须有一个空格,括号内的f与左括号,0与右括号不需要空格 if (flag == 0) { ...
- 《阿里巴巴Java开发手册》码出高效详解(一)- 为什么要学习阿里编码手册
<Java 开发手册>(以下简称<手册>)是每个 Java 工程师人手必备的一本参考指南.该手册包括 编程规约.异常日志.单元测试.安全规约.MySQL 数据库.工程结构.设计 ...
随机推荐
- 记录一次BUG修复-Entity Framwork SaveChanges()失效
目录 一. 前言 二.问题背景 三.问题描述 四.问题解决步骤 六.总结 一. 前言 这是笔者在参与一个小型项目开发时所遇到的一个BUG,因为项目经验不足对Entity Framwork框架认识不足导 ...
- AJPFX:外汇的技术面分析
AJPFX平台:开设外汇保证金交易账户以及入金之后,通常就可以开始交易了,但是在选择买卖时点时通常会依据两种分析,两种主要分析方法通常会被称为基本面分析和技术分析.基本面分析注重金融,经济理论和政局发 ...
- ROC,AUC,Precision,Recall,F1的介绍与计算
1. 基本概念 1.1 ROC与AUC ROC曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,ROC曲线称为受试者工作特征曲线 (receiver operatin ...
- Linux巩固记录(9) keepalived+nginx搭建高可用负载分发环境
环境准备(继续服用hadoop节点) slave1 192.168.2.201(CentOs 7) slave2 192.168.2.202(CentOs 7) slave1 和 slave2 上 ...
- app绘制手势密码 、九宫格分解
什么是九宫格? 即是我们常见的手势绘制.一共有9个点,让我们进行绘制手势.我们手动操作的时候,通过是按住第一个点,然后移动到最后一点,然后松开,就完成手势的操作,那么,如果要用自动化代码,来让其自动绘 ...
- [原创]K8 Struts2 Exp 20170310 S2-045(Struts2综合漏洞利用工具)
工具: K8 Struts2 Exploit组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2014/7/31 10:24 ...
- 常用处理数据用法es6 语法糖总结
一 循环(数组 ,集合) 1 forEach-----------可以遍历得到vaue和index const arr = ['red', 'green', 'blue'];arr.forEa ...
- 主成分分析(PCA)原理详解(转载)
一.PCA简介 1. 相关背景 上完陈恩红老师的<机器学习与知识发现>和季海波老师的<矩阵代数>两门课之后,颇有体会.最近在做主成分分析和奇异值分解方面的项目,所以记录一下心得 ...
- MVC3学习:Sql Server2005中时间类型DateTime的显示
在Sql Server2005中,如果将某字段定义成日期时间类型DateTime,那么在视图中会默认显示成年月日时分秒的方式(如 2013/8/6 13:37:33) 如果只想显示成年月日形式,不要时 ...
- 业余实现一个统计A股数据工具
自己瞎捣鼓了几天 python,数据来源新浪财经,每天收盘启动爬虫抓取一遍,web 端呈现日线与周线数据:实时图表显示上证指数与个股指数等.技术点:scrapy apscheduler sqlalch ...