Java基础知识
军伟@
Java开发工程师
展开
-
Java异常
一、java异常的超类是java.lang.Throwable异常处理的类结构组成:二、java异常分为两类Error和Exception:Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等,这些异常发生JVM选择线程终止。Exception是程序本身可以处理的异常分为两种: (1)非运行时异常(发生在编译阶段,称为原创 2015-08-25 00:01:59 · 1207 阅读 · 2 评论 -
Java spi机制浅谈
最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制。所以简单的总结下java spi机制的思想。 我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,转载 2016-10-10 15:26:32 · 4276 阅读 · 0 评论 -
Java关键字之finalize
纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹Java中提供了finalize方法,在垃圾回收器在进行内存释放时会首先调用finalize,但会有一些误区。1)、对象可能不被垃圾回收。2)、垃圾回收并不等于"析构",finalize不是析构函数。3)、垃圾回收只与内存有关。4)、垃圾回收和finalize都是靠原创 2015-08-24 13:54:42 · 1980 阅读 · 2 评论 -
Java关键字之this
纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹this的作用:1) this是当前对象的一个引用,便于对当前对象参数的使用;2)可以返回对象的自己这个类的引用,同时还可以在一个构造函数当中调用另一个构造函数this示例:public class ThisDemo {原创 2015-08-24 11:15:51 · 1375 阅读 · 2 评论 -
Java关键字之static
static 表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,原创 2015-08-24 10:40:52 · 1552 阅读 · 1 评论 -
Java反射机制
ava 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。 Java 反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类。在运行时构造转载 2017-07-04 18:23:29 · 831 阅读 · 2 评论 -
Java--Proxy代理介绍及实现机制
Proxy,也就是“代理”了。意思就是,你不用去做,别人代替你去处理。比如说:赚钱方面,我就是我老婆的 Proxy;带小孩方面,我老婆就是我的 Proxy;家务事方面,没有 Proxy。 它在程序开发中起到了非常重要的作用,比如传说中的 AOP(面向切面编程),就是针对代理的一种应用。此外,在设计模式中,还有一个“代理模式”。在公司里要上外网,要在浏览器里设置一个 HTTP 代理。wocao,代理转载 2017-07-07 10:05:18 · 1514 阅读 · 0 评论 -
Java-transient总结
transient有“临时的”,"短暂的"含义,我们了解过Serializable,Java序列化,当对某些变量我们不想对它进行序列化的时候就可以将此变量设置为transient,transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。transient说明一个属性是临时的,不会被序列化。public class TransientDemo implements原创 2015-08-27 09:03:33 · 4334 阅读 · 2 评论 -
从零开始玩转JMX——简介和Standard MBean
JMX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展。这种机制可以方便的管理、监控正在运行中的Java程序。常用于管理线程,内存,日志Level,服务重启,系统环境等。简介基本术语MBean:是Managed Bean的简称,可以翻译为“管理构件”。在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理...转载 2017-09-20 20:49:04 · 708 阅读 · 0 评论 -
Java内存模型
Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此Ja...转载 2018-04-15 11:08:55 · 568 阅读 · 0 评论 -
java对象大小
Java对象的内存布局:对象头(Header),实例数据(Instance Data)和对齐填充(Padding)对象头在32位系统上占用8B,64位系统上占16B。 无论是32位系统还是64位系统,对象都采用8字节对齐。Java在64位模式下开启指针压缩,比32位模式下,头部会大4B(mark区域变位8B,kclass区域被压缩),如果没有开启指针压缩,头部会大8B(mark和kcl原创 2016-08-10 00:14:16 · 2195 阅读 · 0 评论 -
Java四种引用类型
Java从1.2版本开始引入了4种引用,这四种引用的级别由高到低依次为:强引用>软引用>弱引用>虚引用。一、强引用(StrongReference): 强引用是使用最普遍的引用,一般我们将对象初始化之后就是一个强引用。当一个对象具有强引用时,JVM不会对它进行垃圾回收。当内存不足时,宁愿抛出OutofMemoryError,让程序异常终止,也不会回收强引用。二、软原创 2015-08-26 00:12:02 · 1630 阅读 · 1 评论 -
Java 接口和抽象类
接口,interface,接口泛指供别人调用的方法和函数。接口的形式:public interface interfaceName{ public static final 变量; void FunctionName(args);}接口的特点:1)、接口中可以含有变量和方法。2)、其中变量被隐式的指定为public static final 变量并且只能是这种变量。...原创 2015-08-24 15:17:16 · 1163 阅读 · 2 评论 -
Java 类加载机制 ClassLoder
一个类从被加载到内存中开始到卸载出内存为止,它的整个生命周期包括了:加载(loading)、验证(Verification)、准备(Preparetation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Uploading)七个阶段。其中验证’准备和解析称为链接。一、ClassLoader类加载的架构原创 2015-08-25 00:09:33 · 2099 阅读 · 3 评论 -
Java序列化Serializable和Externalizable
什么是Java序列化?为什么出现Java序列化?怎样实现Java序列化?一、什么是Java序列化Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。二、为什么出现Java序列化两个进程之间进行通信时,需要传输各种信息,比如文本,图像,声音等等,这些信息是通过二进制流的形式进行传输的。那么进程之间是不是也可以传递原创 2015-08-25 00:04:53 · 1459 阅读 · 2 评论 -
Java泛型
泛型是JDK1.5中最重要的特征,通过引入泛型,我们将获得编译时类型的安全和运行时更小的抛出ClassCastException的可能。泛型用的最多的地方是集合。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。表面上看起来,无论语法还是应用的环境(比如容器类),泛型类型(或者泛型)都类似于 C原创 2015-08-26 00:07:59 · 1140 阅读 · 2 评论 -
Java-clone总结
纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹clone和Copy:当有一个对象Person p1=new Person("name",age);Person p2=p1;此时只是简单的copy了一下引用,p1和p2都指向了内存中的同一个对象,修改p1和p2中任何一个都会影响到对方。当函数的参数是对象时,传递的是引用类型,在对象函数原创 2015-08-27 09:06:23 · 2043 阅读 · 2 评论 -
Java-instanceof总结
纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹instanceof其实是Java的一个二元操作符,用于判断左边的对象是否是右边这个特定的类或者它的子类的实例,返回boolean类型的数据。一般在使用无泛型的集合(List、set等)时,比较多的使用 instanceof ,由于集合能够存各种对象,所以在读取时一般要进行相应的判断原创 2015-08-30 00:30:57 · 2707 阅读 · 0 评论 -
Java虚拟机
一、JVM主要的结构如下:二、各个区域功能介绍1)、方法区(Method Area): (1)用于存储虚拟机加载的类信息、常量、静态变量等,是各个线程共享的内存区域; (2)默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小; (原创 2015-08-25 00:00:13 · 1356 阅读 · 2 评论 -
一致性Hash(Consistent Hashing)原理剖析
引入在业务开发中,我们常把数据持久化到数据库中。如果需要读取这些数据,除了直接从数据库中读取外,为了减轻数据库的访问压力以及提高访问速度,我们更多地引入缓存来对数据进行存取。读取数据的过程一般为: 图1:加入缓存的数据读取过程对于分布式缓存,不同机器上存储不同对象的数据。为了实现这些缓存机器的负载均衡,可以使用式子1来定位对象缓存的存储机器:m = hash(o) mod n ——式子1其中,o为...转载 2018-03-24 12:57:43 · 411 阅读 · 0 评论