java-规约-OOP
public class OOP {
/**
* 避免通过一个类的对象引用访问此类的静态变量或者静态方法
* 直接通过类名去访问
*/
// 错误使用例子:
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.name);
// 应该直接使用
System.out.println(Student.name);
Name name = new Name();
name.setName(Student.print0());
}
/**
* 所有的复写方法必须加@Override注解
* 可以及时确保是否复写成功,
*/
/**
* 相同参数类型,相同业务含义,才可以使用java的可变参数,避免使用Object
* 例子:public List<user> listUsers(String type,Long ... ids){}
*/
/**
* 外部正在调用或者三方库依赖的接口,不允许修改方法签名,避免调用方产生影响
* 接口过时必须加入@Deprecated注解,并注释说明应该采用新的哪个接口
*/
/**
* Object的equals方法容易抛空指针异常,应使用常量或者确定的对象来调用
* 正确例子: "quan".equals(name)
* 错误:name.equals("quan")
*/
/**
* 所有的相同类型的包装类对象之间值的标记,都使用equals方法比较
* 注意:Integer var = ? 在-128~127范围的时候是直接在
* IntegerCache里面取出已经建立好复用对象的,这个区间的可以直接使用==
* 不再这个范围的时候,都是在堆上产生的,都是新的对象,所以使用==是不对的
* 推荐使用equals方法进行判断
*/
/**
* 基本数据类型&包装数据类型
* 1-POJO类属性必须使用包装数据类型
* 2-RPC方法返回值和参数必须使用包装数据类型
* 3-所有的局部变量使用基本数据类型
*
* 例子:
* Name name = new Name();
* name.setName(Student.print0());
* 报错:
* Exception in thread "main" java.lang.NullPointerException
* 因为name是int ,print0返回为Integer,会进行拆箱,找不到对象,空指针异常
*/
/**
* 使用索引访问String的split方法得到的数组时,需要做最后一个分隔符后有无内容的检测
* 否则可能出现IndexOutofBoundException异常
*/
/**
* 当一个类有多个构造方法,或者多个同名方法,这些方法一共按顺序放置在一起,
* 其他的类内定义的方法顺序依次为:
* 公有方法或者保护方法>私有方法>getter/setter方法
*/
/**
* 循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展
* 因为如果这样子写str = str + "hello" 会new一个StringBuilder对象,然后
* 进行append操作,最后通过toString返回String对象
*/
/**
* final 能够声明类,成员变量,方法以及本地变量。下列情况使用final关键字
* 1-不允许使用继承的类
* 2-不允许修改引用的域对象
* 3-不允许被重写的方法
* 4-不允许运行过程洪重新赋值的局部变量
* 5-避免上下文重复使用变量,使用final描述可以强制重新定义一个变量。
*/
/**
* 类成员变量与方法访问控制从严:
* 1-如果不允许外部直接通过new来创建对象,构造方法设置为private
* 2-工具类不允许有public或default构造方法
* 3-非static成员变量并且与子类共享,必须时protected
* 4-非static成员变量并且在本类使用,必须时private
* 5-static成员变量如果仅在本类使用,必须是private
* 6-如果是static成员变量,考虑是否为final
* 7-类成员方法只供类内部调用,必须是private
* 8-类成员方法只对继承类公开,必须为protected
*/
}
class Student{
public static String name = "quan";
/**
* @see Student#print0() 如果这个不可用,应该用哪个
*/
@Deprecated
public void print(){}
public static Integer print0(){
return null;
}
}
class Name{
private Integer name;
public Integer getName() {
return name;
}
public void setName(Integer name) {
this.name = name;
}
// public int getName() {
// return name;
// }
//
// public void setName(int name) {
// this.name = name;
// }
}
java-规约-OOP的更多相关文章
- Java的OOP三大特征之一——继承
Java的OOP三大特征之一——继承 子类继承父类的特征和行为(属性和方法),使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类 ...
- 为什么阿里Java规约禁止使用Java内置线程池?
IDEA导入阿里规约插件,当你这样写代码时,插件就会自动监测出来,并给你红线提醒. 告诉你手动创建线程池,效果会更好. 在探秘原因之前我们要先了解一下线程池 ThreadPoolExecutor 都有 ...
- 为什么阿里Java规约要求谨慎使用SimpleDateFormat
前言 在阿里Java开发规约中,有强制性的提到SimpleDateFormat 是线程不安全的类 ,在使用的时候应当注意线程安全问题,如下: 其实之前已经介绍过使用JDK1.8的DateTimeFor ...
- 为什么阿里Java规约要求谨慎修改serialVersionUID字段
serialVersionUID简要介绍 serialVersionUID是在Java序列化.反序列化对象时起作用的一个字段.Java的序列化机制是通过判断类的serialVersionUID来验证版 ...
- Java实现OOP(面向对象编程)
一.对象的综述 面向对象编程(OOP)具有多方面的吸引力.对管理人员,它实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.易于维护的设计方案.对程序员,对象模型显 ...
- 阿里巴巴Java规约插件试用
阿里Java开发规约Eclipse插件介绍 阿里巴巴集团配合<阿里巴巴Java开发手册>PDF终极版开发的IDE插件,目前包括IDEA插件.Eclipse插件. 安装 检查环境 插件要求: ...
- Java的OOP三大特征之一——多态
OOP(面对对象)三大特征之一——多态 What:多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活.抽象.行为共享.代码共享的优势,很好的解决了应用 ...
- Java面向对象OOP思想概述
目录 OOP思想(Object Oriented Programming) 类和对象 接口 抽象类 OOP三大特性 封装 继承 多态 OOP复用的形式 OOP思想(Object Oriented Pr ...
- 初识JAVA之OOP
有一段时间没发博客了,每次手打还是很累,但感觉很充实.. 最近发现很多初学者到了面向对象编程这个知识点时,不太清楚类是如何转化成为对象的,很是困扰,今天我在这里谈谈我的理解,大家一起来研究学习... ...
- Java复习-oop
我们可理解“纯粹”的面向对象程序设计方法是什么样的:(1) 所有东西都是对象.可将对象想象成一种新型变量:它保存着数据,但可要求它对自身进行操作.理论上讲,可从要解决的问题身上提出所有概念性的组件,然 ...
随机推荐
- 『德不孤』Pytest框架 — 6、Mark分组执行测试用例
目录 1.Pytest中的Mark介绍 2.Mark的使用 3.Mark的注册和使用 4.使用Mark完成失败重试 5.扩展 1.Pytest中的Mark介绍 Mark主要用于在测试用例/测试类中给用 ...
- Ubuntu20.04 Focal Cloudimage扩容以及KVM安装的问题记录
运行Ubuntu20.04的KVM虚机遇到一些问题, 单独总结一下 镜像扩容 不能用virt-resize --expand /dev/sda1 old.qcow2 new.qcow2这样的命令, 这 ...
- Zookeeper基础入门
Zookeeper简介 基本概念 Zookeeper是一个开源的分布式协调服务.其设计目标是将那些复杂的容易出错的分布式一致性服务封装起来,以简单的接口提供给用户使用.它是一个典型的分布式数据一致性的 ...
- NSSCTF-easyupload1.0
2.0和3.0已经说过,这个1.0上传也可以使用那两个题目的做法,就是使用htaccess的方式进行定义上传文件的类型来进行连接shell,1.0肯定是没有2.0和3.0难的,所以说,也不要将这个题目 ...
- 利用AWVS扫描Web漏洞
实验目的 利用AWVS扫描Web漏洞. 实验原理 AWVS是一款知名的网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞. 实验内容 AWVS是一个自动化的web应用程序安全测试工具, ...
- RENIX报文两个字段嵌套变化——网络测试仪实操
RENIX软件如何实现报文中两个字段嵌套变化,以下为您实操讲解详细步骤. 1.打开Renix软件,连接机框并预约测试端口: 2.创建一条RAW流量(Binding流量也可以,这里用RAW流做例子) 3 ...
- 100G/40G/25G/10G网络测试解决方案
一.100G概述 随着CDN等视频直播业务和P2P业务的快速发展,带宽的要求越来越高.当前5G业务势头正盛,其基于400G的主干网络通信业务也在积极部署之中.但当前在很多的业务场景中,100G系统的部 ...
- 【C# IO 操作 】详解去掉字符顺序标记(BOM)头的方法
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别 ...
- Map<String,String>转Json转Base64
Map<String,String> configMap = new HashMap<String,String>();System.out.println("JSO ...
- Python:在一个Python程序中,运行另一个Python程序
学习自: 1~3学习自如何在python中执行另一个py文件_python_脚本之家 4~6学习自Python中四种运行其他程序的方式 - hankleo - 博客园 1.os.system方法 用法 ...