关注类和接口
最小化可访问性
1:包括方法,属性,内部类,提供最少方法的接口供外部使用。
2:一个类如果只被另一个类使用,应该作为类的内部类
3:可以default 方便测试类访问,不能超过default了。
不要有public属性
提供private 和一个public方法
最小化可变性
不可变类好处,随便被各个类引用,随便被多线程并发,随便被使用
对象提供的时候就设置好了属性,不提供set方法
final class防止子类提供set方法,构造器私有,提供静态方法(valueOf()等)
final修饰属性,仅在构造函数提供设置机会,完全完成初始化
private修饰属性,防止被访问
可变属性中,不要引用不可变属性
复合优于继承
为了复用代码,最好是互相引用,而不是继承,父类稍微改一下就爆炸
慎用继承
继承破坏了封装性,能不用就不用。
1:一般final class
2:非要继承,请提示好哪些方法可以覆盖,哪些方法是不能动的。
3:abstract class 和interface ,除外。他们可以很好的使用继承
接口优于抽象类
类只能单继承,可以多实现接口,所以接口更灵活,更加随意。
抽象类的单继承,觉得了多个抽象类必须是互相有上下游,才能公用多个。实现符合功能。而接口随意。
模版类,优先选择抽象类型。
接口仅包含方法
不要把常量放接口里,常量一般是实现细节,和接口无关
同类继承
同类实现继承分开,不要写个大类,type ==xxx之类的模式
匿名函数使用对象
callback function 等回调函数最好不要有属性,提供单例供其他需要者使用。
静态内部类
非静态,匿名类,局部类 三种内部类,缺点比静态内部类多
类结构
自上而下
1:类注释
2:静态常量
3:静态类
4:属性
5:构造函数
6:方法
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
关注对象公共方法
hashcode 默认对象在内存中的存储地址用来配合hashSet 等集合框架,put的时候,快速判断不存在用的,hashcode一样再比equal。(小心:equal一样的对象一定要有一样的hashcode,可以使用equal中的相关属性的hashcode,否则hashMap分分钟给你空指针) equal 比一样的值的。比如你和我一样是P6,但是你的P6是你的P6,不是一个,但是值是一样的。复用集合时重要方法,覆盖equal时一定要覆盖hashcode不然集合框架就不工作了。 == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。 toString 默认返回 类+hashcode。一定要覆盖toString,反馈对象的属性,他只在调试和日志中其诊断作用,反馈更多的内容,方便api使用者诊断问题。在单元测试中也起重要作用! public String toString() { return MoreObjects.toStringHelper(this).omitNullValues() .add...
- 下一篇
C++--内存管理与释放
C++--内存管理与释放 1、为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下: typename * pointer_name = new typename; 2、堆和栈的区别: 栈区(stack),由编译器自动分配释放,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈,速度较快。 堆区(heap),一般由程序员分配释放,若程序员不释放,程序结束时由操作系统回收。它不是数据结构中的堆,分配方式类似于链表。一般速度比较慢,而且容易产生内存碎片。C中使用malloc函数在堆上分配内存, char* p1=(char *)malloc(10);//由free释放 C++中用new运算符在堆上分配内存 char* p2=new char[10];//由delete[]释放 p1,p2本身是在栈中的,它们指向在堆上分配的内存。 一定要配对地使用new和delete,否则将发生内存泄露,也就是说,被分配的内存再也无法使用了。如果内存泄露严重,则程序将由于不断寻找更多内存而终止。 3、在编译时给数组分配内存称为静态联编,在程序运行时创建的数组称为动态数组...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程