程序人生——Java中类、对象及方法的建议(2)

目录

引出

程序人生------Java中类、对象及方法的建议(2)


类、对象及方法

建议41:让多重继承成为现实

  • Java中一个类可以多种实现,但不能多重继承。使用成员内部类实现多重继承。内部类一个重要特性:内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,多重继承才会成为可能

建议42:让工具类不可实例化

  • 工具类的方法和属性都是静态的,不需要实例即可访问。**实现方式:**将构造函数设置为private,并且在构造函数中抛出Error错误异常

建议43:避免对象的浅拷贝

  • 浅拷贝存在对象属性拷贝不彻底的问题。对于只包含基本数据类型的类 可以使用浅拷贝 ;而包含有对象变量的类 需要使用序列化与反序列化 机制实现深拷贝

建议44:推荐使用序列化实现对象的拷贝

  • 通过序列化方式来处理,在内存中通过字节流的拷贝来实现深拷贝。使用此方法进行对象拷贝时需注意两点:1、对象的内部属性都是可序列化的;2、注意方法和属性的特殊修饰符,比如final、static、transient变量的序列化问题都会影响拷贝效果。一个简单办法,使用Apache下的commons工具包中的SerializationUtils类,直接使用更加简洁方便

建议45:覆写equals方法时不要识别不出自己

  • 需要满足p.equals§返回为真,自反性

建议46:equals应该考虑null值情景

  • 覆写equals方法时需要判一下null,否则可能产生NullPointerException异常

建议47:在equals中使用getClass进行类型判断

  • 使用getClass方法来代替instanceof进行类型判断

建议48:覆写equals方法必须覆写hashCode方法

  • 需要两个相同对象的hashCode方法返回值相同,所以需要覆写hashCode方法,如果不覆写,两个不同对象的hashCode肯定不一样,简单实现hashCode方法,调用org.apache.commons.lang.builder包下的Hash码生成工具HashCodeBuilder

建议49:推荐覆写toString方法

  • 原始toString方法显示不人性化

建议50:使用package-info类为包服务

  • package-info类是专门为本包服务的,是一个特殊性 主要体现在3个方面:1、它不能随便被创建;2、它服务的对象很特殊;3、package-info类不能有实现代码;package-info类的作用:1、声明友好类和包内访问常量;2、为在包上标注注解提供便利;3、提供包的整体注释说明

建议51:不要主动进行垃圾回收

  • 主动进行垃圾回收是一个非常危险的动作,因为System.gc要停止所有的响应(Stop 天河world),才能检查内存中是否有可回收的对象,所有的请求都会暂停

深入认识JVM

JVM内存分配,类加载

Java进阶(1)------JVM的内存分配 & 反射Class类的类对象 & 创建对象的几种方式 & 类加载(何时进入内存JVM)& 注解 & 反射+注解的案例

创建对象的4种方法总结

Java进阶(4)------结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化

垃圾回收GC

Java进阶(垃圾回收GC)------理论篇:JVM内存模型 & 垃圾回收定位清除算法 & JVM中的垃圾回收器

简介:本篇博客介绍JVM的内存模型,对比了1.7和1.8的内存模型的变化;介绍了垃圾回收的语言发展;阐述了定位垃圾的方法,引用计数法和可达性分析发以及垃圾清除算法;然后介绍了Java中的垃圾回收器,由串行、到并行再到并发,最后到G1的演变;最后给出了垃圾回收器的对比和使用指引。

JVM调优,Arthas使用

认识多线程

创建多线程方法+了解线程池

Java进阶(5)------创建多线程的方法extends Thread和implements Runnable的对比 & 线程池及常用的线程池

多线程下-1非原子性问题即解决

Java进阶(6)------抢购问题中的数据不安全(非原子性问题)& Java中的synchronize和ReentrantLock锁使用 & 死锁及其产生的条件

再论线程,创建、生命周期

Java进阶(再论线程)------线程的4种创建方式 & 线程的生命周期 & 线程的3大特性 & 集合中的线程安全问题

主要内容:

1.线程创建的方式,继承Thread类,实现Runable接口,实现Callable接口,采用线程池;

2.线程生命周期: join():运行结束再下一个, yield():暂时让出cpu的使用权,deamon():守护线程,最后结束,sleep():如果有锁,不会让出;

3.线程3大特性,原子性,可见性,有序性;

4.list集合中线程安全问题,hash算法问题;


总结

程序人生------Java中类、对象及方法的建议(2)

相关推荐
hakesashou1 分钟前
python交互式命令时如何清除
java·前端·python
攒了一袋星辰2 分钟前
今日指数项目项目集成RabbitMQ与CaffienCatch
java·分布式·rabbitmq
wrx繁星点点8 分钟前
事务的四大特性(ACID)
java·开发语言·数据库
IT学长编程16 分钟前
计算机毕业设计 Java酷听音乐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·音乐系统·计算机毕业设计选题
IT学长编程33 分钟前
计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·毕业论文·协同过滤算法·计算机毕业设计选题·个性化音乐推荐系统
希望有朝一日能如愿以偿34 分钟前
力扣题解(飞机座位分配概率)
算法·leetcode·职场和发展
小小娥子38 分钟前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
几何心凉1 小时前
已解决:org.springframework.web.HttpMediaTypeNotAcceptableException
java
华农第一蒟蒻1 小时前
Java中JWT(JSON Web Token)的运用
java·前端·spring boot·json·token
两点王爷1 小时前
使用WebClient 快速发起请求(不使用WebClientUtils工具类)
java·网络