Java 进阶
文章平均质量分 86
哈哈,柳暗花明
资深Android开发工程师。
个人网站:https://zhangjun666.fun
github: https://github.com/coderJohnZhang
展开
-
Java并发编程---线程池的使用
一般我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。Java中创建线程池很简单,只需要调用Executors中相应的便捷方法即可,比如Executors.newFixedThreadPo原创 2022-02-18 12:13:01 · 563 阅读 · 0 评论 -
深入解析Java反射(2) - invoke方法
上篇文章中回顾了一下Java反射相关的基础内容。这一节我们来深入研究Method类中的invoke方法,探寻它的奥秘。注: 本篇文章的所有源码都基于OpenJDK 1.8。深入解析Java反射(2) - invoke方法引入浅析invoke过程1、权限检查2、调用MethodAccessor的invoke方法寻根溯源 - 在JVM层面探究invoke0方法寻根溯源 - Java版的实现本篇总结...转载 2019-11-02 17:25:41 · 953 阅读 · 0 评论 -
深入解析Java反射(1) - 基础
因为本人最近正筹备Samsara框架的开发,而其中的IOC部分非常依靠反射,因此趁这个机会来总结一下关于Java反射的一些知识。本篇为基本篇,基于JDK 1.8。深入解析Java反射(1) - 基础一、回顾:什么是反射?二、反射的主要用途三、反射的基本运用1、获得 Class 对象2、判断是否为某个类的实例3、创建实例4、获取方法5、获取构造器信息6、获取类的成员变量(字段)信息7、调用方法8、...转载 2019-11-02 16:56:26 · 191 阅读 · 0 评论 -
详解Java中的clone方法 -- 原型模式
Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?使用new操作符创建一个对象使用clone方法复制一个对象那么这两种方式有什么相同和不同呢?new操作符的本意是分配内存。程序执行到...转载 2019-10-29 17:52:07 · 246 阅读 · 0 评论 -
Java笔记之组合大于继承
继承是一种多态工具,而不是一种代码复用工具。有些开发者喜欢用继承的方式来实现代码复用,即使是在没有多态关系的情况下。是否使用继承的规则是继承只能用在类之间有“父子”关系的情况下。 不要仅仅为了代码复用而继承。当你使用组合来实现代码复用的时候,是不会产生继承关系的。过度使用继承(通过“extends”关键字)的话,如果修改了父类,会损坏所有的子类。这是因为子类和父类的紧耦合关系是在编译期产...原创 2018-04-22 20:24:14 · 1314 阅读 · 0 评论 -
Java锁机制--synchronized
在理解锁机制前,我们需要了解线程安全和并发相关的知识。Java内存模型lock(锁定):作用于主内存的变量,它把一个变量标识为一个线程独占的状态;unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定;read(读取):作用于主内存的变量,它把一个变量的值从主内存传送到线程中的工作内存,以便随后的load动作使用;load(载入):作用原创 2017-06-09 22:37:29 · 492 阅读 · 0 评论 -
Effective Java 第20条:类层次优于标签类
标签类(tagged class)有着许多的缺点破坏可读性内存消耗域不能做成final的一句话:标签类过于冗长、容易出错、并且效率低下。其实有更好的方法定义能表示多种风格对象的单个数据类型:子类型化(subtyping)。标签类正是类层次的一种简单的仿效。为了将标签类转变成类层次,首先要为标签类中的每个方法都定义一个包含抽象方法的抽象类,这每个方法的行为都依赖于标签值...原创 2019-05-26 21:02:39 · 192 阅读 · 0 评论 -
Effective Java 第19条:接口只用于定义类型
当类实现接口时,接口就充当可以引用这个类的实例的类型(type)。因此类实现了接口,就表明客户端可以对这个类的实例实施某些动作。为了其他目的而定义接口是不恰当的。有一种接口被称为常量接口(constant interface),他不满足上面的条件。这种接口没有包含任何方法,他只包含静态的final域,每个域都到处一个常量。使用这些常量的类实现这个接口,以避免用类名来修饰常量名。常量接口模式...原创 2019-05-25 22:16:05 · 242 阅读 · 0 评论 -
Effective Java 第18条:接口优于抽象类
Java程序设计语言提供了接口和抽象类两种机制来定义允多个实现的类型。这两种机制的主要区别有:抽象类中可以存在某些方法的实现,接口不可以如果要实现抽象类定义的类型,类必须成为抽象类的子类。而对接口来说,任何一个类,只要实现接口里面必要的方法,就可以了,而且不用管这个类处于类的层次的哪个位置(例如:内部类也可以实现)java是单继承多实现,所以抽象类作为类型定义受到了极大的限制...原创 2019-05-25 20:49:26 · 211 阅读 · 0 评论 -
Effective Java 第17条:要么为继承而设计,并提供文档说明,要么就禁止继承
对于专门为了继承而设计并且具有良好文档说明的类而言,该类的文档必须精确地描述覆盖每个方法所带来的影响。该类必须有文档说明它可覆盖的方法的自用性。好的API文档应该描述一个给定的方法做了什么工作,而不是描述它是如何做到的。类必须通过某种形式提供适当的钩子,以便能够进入到它的内部工作流程中,这种形式可以是精心选择的受保护的方法,也可以是受保护的域,后者比较少见。对于为了继承而设计...原创 2019-05-25 15:40:45 · 219 阅读 · 0 评论 -
覆盖equals时请遵守通用约定
转载:https://www.cnblogs.com/wangliyue/p/4448085.html==是物理相等 equals是逻辑相等因为每个类的实例对象本质上都是唯一的 ,利用物理相等(==)是指一个实例只能相等于它自己。利用逻辑相等是(equals)指 一个实例是否和另一个实例的某些关键域相等,从而来判断这两实例是否相等。Object类的equals方法的实现:物理...原创 2018-04-06 20:47:17 · 345 阅读 · 0 评论 -
Java编程学习笔记
最近在看Effective Java这本书,在这里简单记录下书中78条建议,因为有一定的编程经验,书中一大半条理规范都在践行中,还有一部分在用但是不知道为什么这么用,当然如枚举、并发等,还是需要多加以实践。考虑用静态工厂方法代替构造器遇到多个构造器参数时要考虑用构建器用私有构造器或者枚举类型强化Singleton属性通过私有构造器强化不可实例化的能力避免创建不必要的对象消除过期的对...原创 2018-03-31 17:25:24 · 247 阅读 · 0 评论 -
Java中多线程通信实例:生产者消费者模式
线程间的通信:其实就是多个线程在操作同一个资源,但是操作的动作不同当某个线程进入synchronized块后,共享数据的状态不一定满足该线程的需要,需要其他线程改变共享数据的状态后才能运行,而由于当时线程对共享资源时独占的,它必须解除对共享资源的锁定的状态,通知其他线程可以使用该共享资源。Java中的 wait(),notify(),notifyAll()可以实现线程间的通信。生产者–消费者问题是典原创 2017-10-21 17:01:42 · 1068 阅读 · 0 评论