
java
文章平均质量分 77
helianus
这个作者很懒,什么都没留下…
展开
-
java 泛型笔记
这两天看了晚上看了一些泛型的解释,现在脑子有点晕乎乎的。做个笔记梳理一下。1.泛型使干什么用的。为了集合的类型安全。早期java没有泛型的时候每次取元素都是需要手动强转为某个具体类型的,而集合里面可能会有不同的类型存在,因此这种方式是很不安全的。即使是现在你没有指定的话,依旧会有这个问题。 List list = new ArrayList(); li原创 2017-03-14 16:56:43 · 683 阅读 · 0 评论 -
转 string
https://rednaxelafx.iteye.com/blog/774673/转载 2018-12-21 14:31:25 · 100 阅读 · 0 评论 -
集合类copyProperties
spring的BeanUtils.copyProperties挺好用的,但是不支持list复制,也没有集合的相关方法。所以自己就写了一个。这里反射好像不能获取到目标集合的未知类型类信息??如果有知道怎么获取的请务必留言告诉我,谢谢!public class ArrayUtils { public static void copyProperties(List<?> so...原创 2019-02-28 10:48:38 · 891 阅读 · 0 评论 -
笔记-Java基础之运行时数据区域。
java在程序执行阶段将内存划分为了几个区域。但大致可以从堆栈,线程是否私有两个角度来看。程序计数器 线程私有,可以看做当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等出功能都是需要有这个计数器来完成。 由于java虚拟机的多线程是通过处理器在多线程之间轮流切换分配时间执行的...原创 2019-03-31 17:48:21 · 130 阅读 · 0 评论 -
笔记-Java基础之Hotspot虚拟机对象概念
对象的创建基本上Java有四种创建对象的方法:1.new关键字。2.实现Cloneable接口,调用clone方法。3.反射。4.反序列化。以new关键字举例,执行到new关键字,首先会验证new符号引用代表的类是是否已被加载,没有则先进行加载步骤。如果有,则直接在堆中开辟一个固定大小的内存空间,内存的大小在类加载完成后便可以完全确定。而为新对象分配一块空间有以下两...原创 2019-03-31 19:32:28 · 121 阅读 · 0 评论 -
JVM虚拟机性能监控。
首先查询java进程端口ps -ef | grep java 上面命令查出java进程详情,然后红框中就是进程pid了。然后用java命令进行查询,比如查询虚拟机运行状态的jstat命令,-guutil位置是参数,2567就是上面查到的端口了。jstat-gcutil 2567...原创 2019-04-09 16:33:59 · 186 阅读 · 0 评论 -
笔记-Java基础Class文件之魔数和版本号
魔数与Class文件的版本魔数:每个Class文件的头四个字节称为魔数,它的唯一作用就是确定这个文件是否为一个能被虚拟机接受的Class文件,很多存储文件都有这个魔数,不以扩展名作为标识的原因是因为扩展名可以随意更改。魔数值可以被文件格式的制定者自由选择,只要这个魔术值没有被广泛的应用同时又不会引起混淆即可。而Class文件的魔数为CAFEBABE。版本:紧接着魔数的四个字节存储的是C...原创 2019-04-16 11:13:45 · 227 阅读 · 0 评论 -
笔记-Java基础Class文件之常量池
常量池紧接着版本号后的是常量池,它是一个表类型数据项目,意味着常量池会有多个数据项构成。它是Class文件的资源库,同时也是占用Class文件空间最多的数据项目之一。常量池中的常量数量是不定的, 因此,在常量池的入口是一个u2类型数据,代表着常量池计数值,这个计数值是从1而不是0开始的。因此,常量池为21时,实际上你的常量是20,而第0项常量是空出来的,这样做的目的在于满足“不引用任何一个...原创 2019-04-16 11:15:03 · 293 阅读 · 1 评论 -
笔记-Java基础之Class类文件的结构
无关性Java刚刚诞生之初的宣传口号:“一次编写,到处运行(write once,run anywhere)”。平台无关性-支撑这句话的关键在于:运行在不同平台之上的各种各样的虚拟机。各种不同平台的虚拟机和平台都统一使用的程序存储格式-字节码(ByteCode)是构成平台无关性的基石。语言无关性-虚拟机还有另外一种无关性,在Java发展之初,设计者就曾经考虑过并实现了让其他语言运行在J...原创 2019-04-16 11:15:32 · 122 阅读 · 0 评论 -
笔记-Java基础Class文件之访问标志
在常量池结束之后,紧接着的两个字节代表访问标志(access_flag),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口;是否定义为public类型;是否定义为abstract类型;如果是类的话,是否被声明为final等。具体的标志位以及标志的含义如下表所示:access_flag中一共有有16个标志位可以使用,当前之定义了8个,没有使用到的标志位要求一律为...原创 2019-04-16 11:30:04 · 473 阅读 · 0 评论 -
笔记-Java基础Class文件之类索引,父类索引与接口索引
类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,而接口索引集合(interfaces)是一组u2类型的数据的集合,class文件中由这三项数据来确定这个类的继承关系。类索引用用于确定这个类的全限定名,父类索引用于确定这个类的父类的全限定名。由于Java语言不孕育多重继承,所以父父类索引只有一个,除了java.lang.Object之外,所有的Java类...原创 2019-04-16 11:56:32 · 258 阅读 · 0 评论 -
笔记-Java基础之Hotspot虚拟机编译对象与触发条件
程序在运行过程中会被即时编译器编译的“热点代码”有两类,既: 1.被多次调用的方法。 2.被多次执行的循环体。 前者很好理解,一个方法被调用得多了,方法体内代码执行的次数自然就多了,它成为“热点代码”是理所当然的。而后者则是为了解决一个方法只被调用一次或少数的几次,但是方法体内部存在循环次数较多的循环体的问题,这样循环体的代码也被重复执行多次,因此这些代码也应...原创 2019-07-01 15:17:21 · 278 阅读 · 0 评论 -
笔记-Java基础之虚拟机概述
Java语言的“编译器”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)把*.java文件转变成*.class文件的过程,也可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变成机器码的过程,还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把*....原创 2019-07-07 15:39:01 · 133 阅读 · 0 评论 -
笔记-Java基础之类加载器
虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。类与类加载器 对于一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。这句话可以表达的更通俗一些:比较两...原创 2019-06-26 20:50:49 · 104 阅读 · 0 评论 -
笔记-Java基础之语法糖的味道
泛型与类型擦除 泛型是JDK1.5的一项新增特性,他的本质是参数化类型(Parametersized Type)的应用,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。 泛型技术在C#和Java之中的使用方式看似相同,但实现上却有着根本性的分歧,C#里面泛型无论在程序源码中、编译后的IL中(Interme...原创 2019-06-30 20:57:58 · 253 阅读 · 0 评论 -
设计模式-工厂方法
结构图工程结构图其中framework是对客户端开放的抽象层,也就是抽象工厂和抽象产品,另外两个是具体的实现。/** * 抽象工厂 * * Created by Administrator on 2018/5/15 0015. */public abstract class Factory { public final Product create(String owner){...原创 2018-05-17 11:24:53 · 160 阅读 · 0 评论 -
spring-基于java的配置
传统的spring是xml与java代码相结合。xml部分: java部分:public class Dog{ String name = "dog wangwang.."; public String getName() {原创 2017-12-05 17:01:12 · 503 阅读 · 0 评论 -
[java集合]comparable与comparator
/** * comparable 接口在类设计中就应该由类去实现,并实现compareTo方法。 接口位于java.lang包下。 对比方法叫compareTo comparator 接口在类已经完成之后还想再要比较。 接口位于java.util包下 对比方法叫compare */TreeSet treeSet = new TreeSet<>();treeSet.add(原创 2017-04-13 14:04:35 · 289 阅读 · 0 评论 -
Servlet接口继承图解
原创 2017-08-16 14:29:59 · 1907 阅读 · 0 评论 -
java事件。
事件一共有三个主体。1.事件源(Source Object),事件的发起者。2.监听器(Listener),监听事件的人。3.事件(Event)本身。举个栗子:你在看某个漂亮小姐姐的直播,当这个小姐姐给你唱了首歌的时候,你给他打赏了一个土豪土匪礼物。1.上面这句话中,小姐姐是事件源,而你则是监听器,监听着小姐姐。2.小原创 2017-08-11 17:48:21 · 303 阅读 · 0 评论 -
笔记-java四大引用(强引用,软引用,弱引用,虚引用)
一个系统里有成千上万个类,如果不及时清理的话,就会造成内存溢出。java在jdk1.2版本的时候优化了提供了类来和GC进行交互,回收长时不用的对象,释放内存空间。避免内存溢出。这些类都在java.lang.ref包下。而一个类的清理则分为四个等级,依次是强,软,弱,虚四个等级。强引用下面这行代码就是强引用。Object obj = new Object();...原创 2017-09-14 18:16:26 · 289 阅读 · 0 评论 -
java线程状态图解
原创 2017-08-30 17:13:19 · 289 阅读 · 0 评论 -
设计模式-代理模式
代理模式有三个主体,代理,委托代理,具体实例。它最大的作用就是做到了代理和具体实例的解耦,让代理与具体实例之间没有直接关系。举个栗子:最近刚好ipx出来,你高高兴兴的买了回来,刚买好回到家没想到一不小心就掉地上,碎屏了,那当然不开心了,找到专卖店去必须让他们维修。因为你知道专卖店是可以搞定这个事情的,具体是给你换一个呢还是修一下呢,你不知道也不用清楚。第二天来拿果然是好了,美滋原创 2017-09-25 16:44:16 · 205 阅读 · 0 评论 -
笔记-java基础,静态代码块,构造代码块,构造函数。
1.构造代码块:直接被两个{}叫做构造代码块,既然有构造两个字,那就和类构造有着关系,构造代码会在每次调用类的构造函数之前先执行一遍。也就是说构造代码块是对所有对象的统一构造。{}2.静态代码块:被static修饰的代码块叫做静态代码块,当类被加载带jvm虚拟机时执行且只执行一遍。而类什么时候会被加载。当你new对象或者直接调用类中的静态方法时jvm就会加载这个类。static原创 2017-09-18 19:22:53 · 392 阅读 · 0 评论 -
笔记-spring aop。
横切关注点在应用中分布于多处的与业务逻辑代码无关的处理逻辑,最经典的就是日志记录,记录每个请求以及请求的时间。这些代码和业务逻辑混合在一起造成了我们的代码结构混杂以及难以维护的后果。如果能把这些关注点全部抽取出来那不是很好么,因此想到之前java的动态代理和cglib代理,其实这并不是很难的事情。代理类拦截方法,记录日志,然后调用业务逻辑方法。而这件事情,而专门干这件事情的就是AO原创 2017-09-30 11:52:34 · 300 阅读 · 0 评论 -
java基础-内部类
内部类,顾名思义,就是在一个类中定义另外一个类。内部类分为成员内部类,静态内部类,局部内部类,匿名内部类。成员内部类://外部类public class Outer { //内部类 class Inner{ }}成员内部类就是外部类的一个成员,因此,成员内部类依赖于外部类的存在而存在。底层的实现为,jvm为成员内部类添加了一个参数为指向外部原创 2017-10-06 10:58:32 · 251 阅读 · 0 评论 -
CGLib代理
前篇说过,java自身动态代理是基于接口的。真正的业务逻辑必须实现你要代理的接口,java在运行时根据接口动态生成一个实现类,该实现类代理了真正的业务逻辑(内部调用业务方法)。因此是面向接口代理,业务类和代理接口之间是实现关系。而CGLib则是面向对象代理的,底层是jvm用一个类的字节码创建一个子类,子类代理了真正的业务逻辑,子父类之间是继承关系,所以你要代理的类最好不要申明成原创 2017-09-29 15:21:20 · 277 阅读 · 0 评论 -
spring-Condition条件化配置
spring4.0引入的新特性,当你注册bean时,可以对这个bean添加一定的自定义条件,当满足这个条件时,注册这个bean,否则不注册。条件化最重要的是Condition接口,如下定义。public interface Condition { boolean matches(ConditionContext var1, AnnotatedTypeMetadata var原创 2017-12-08 17:15:17 · 5902 阅读 · 1 评论 -
spring-配置小结
传统的spring是xml与java代码相结合。xml部分: java部分:public class Dog{ String name = "dog wangwang.."; public String getName() {原创 2017-12-07 19:17:54 · 337 阅读 · 0 评论 -
spring-@Profile源码跟踪
@Profile标签可以让你的不同的环境切换bean。@Profile也是一个条件化配置,因此,一个被@Profile注解的bean最后是能否注册到上下文由ProfileCondition.class决定。package org.springframework.context.annotation;import java.lang.annotation.Documented;原创 2017-12-11 15:27:24 · 445 阅读 · 0 评论 -
笔记-Java基础之Hotspot虚拟机解释器与编译器
在部分的商用虚拟机(Sun HotSpot、IBM J9)中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这个代码认定为"热点代码",为了提高热点代码的执行,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compile...原创 2019-07-01 13:38:31 · 769 阅读 · 0 评论