![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
努力的小海龟
从事java开发5年
展开
-
java反射机制解读
1. 概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.2.作用反射是框架设计的灵魂,反射...原创 2018-03-15 12:04:59 · 148 阅读 · 0 评论 -
final关键字的4种用法
final的用法在java的关键字中,static和final是两个我们必须掌握的关键字。不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构。下面我们来了解一下final关键字及其用法。final关键字在java中,final的含义在不同的场景下有细微的差别,但总体上来说,它指的是“这是不可变的”。下面,我们来讲final的四种主要用法。...原创 2018-08-08 17:12:35 · 22239 阅读 · 0 评论 -
jdk1.8中map中compute,computeIfAbsent,computeIfPresent方法介绍
1.computecompute:V compute(K key, BiFunction < ? super K, ? super V, ? extends V> remappingFunction)compute的方法,指定的key在map中的值进行操作 不管存不存在,操作完成后保存到map中 HashMap<String,Integer>...原创 2018-09-11 11:06:27 · 23211 阅读 · 3 评论 -
java中枚举enum在项目中实际应用
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承),但可以继承接口下面是自定义构造方法的使用情况,项目中也经常这么使用public enum Day{ MONDAY("星期一"), TUESDAY("星...原创 2018-09-11 14:27:42 · 2190 阅读 · 1 评论 -
java 中ServiceLoader的使用即SPI
ServiceLoader也像ClassLoader一样,能装载类文件,但是使用时有区别,具体区别如下:(1) ServiceLoader装载的是一系列有某种共同特征的实现类,而ClassLoader是个万能加载器;(2)ServiceLoader装载时需要特殊的配置,使用时也与ClassLoader有所区别;(3)ServiceLoader还实现了Iterator接口。作用:...原创 2018-09-11 14:52:16 · 425 阅读 · 0 评论 -
java 建造者Builder设计模式解析
Builder模式介绍 1.用户使用简单,不需要知道内部怎么创建的 2.解耦,将构建的过程和表示分离开来Builder模式的使用场景 1.相同的方法,不同的执行顺序,产生不同的时间结果时。 2.多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不同时。 3.产品类非常复杂,或者产品类中的调用顺...原创 2018-09-11 16:35:32 · 184 阅读 · 0 评论 -
Java 类初始化顺序
静态属性:static 开头定义的属性 静态方法块: static {} 圈起来的方法块 普通属性: 未带static定义的属性 普通方法块: {} 圈起来的方法块 构造函数: 类名相同的方法 方法: 普通方法 父类静态变量 > 父类静态初始块 > 子类静态变量 > 子类静态初始块 > 父类成员变量 > 父类非静态初始块 > 父类构造器 ...原创 2018-09-11 18:56:04 · 162 阅读 · 0 评论 -
jkd1.8 lambda 表达式之函数式接口
函数式接口(也叫SAM接口,Single Abstract Method)的对象可以作为函数的参数,这样参数在引用时,可以以lambda表达式的方式出现。 每个函数式接口里仅允许有一个抽象方法,这个方法叫做函数式方法,lambda表达式的参数和返回类型必须和该函数的参数和返回类型保持一致。你无须去创建这个类,编译器会帮你实现。函数式接口仅允许有一个抽象方法,用注解@FunctionalInt...原创 2018-09-13 14:58:16 · 295 阅读 · 0 评论 -
Java中forEach使用lambda表达式,数组和集合区别
1.数组怎么使用lambda数组不能直接在forEach中使用lambda表达式 PartnerType[] values = PartnerType.values(); //提示Cannot resolve method 'forEach(<method reference>) values.forEach(System.out...原创 2018-09-14 11:27:10 · 18610 阅读 · 1 评论 -
java 使用subList痛彻心扉的领悟
背景 刚开始截取List集合时使用笨的方法自己截取,后来发现Java api 有方法使用 subList方法,但是由于不清楚原理拿来就用,做项目就掉坑里了List<UclassUser> subList = list.subList(0, GameRoom.CAPACITY / 2); subList.forEach(item -> {...原创 2018-12-25 14:28:40 · 1662 阅读 · 0 评论 -
ConcurrentHashMap原理和机制
一、背景:线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTabl...原创 2018-08-01 19:32:58 · 314 阅读 · 0 评论 -
volatile关键字的作用、原理
volatile关键字的作用、原理在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到“半个”单例。而发挥神奇作用的volatile,可以当之无愧的被称为Java并发编程中“出现频率最高的关键字”,常用于保持内存可见性(随时见到的都是最新值)和防止指令重排序。保持内存可见性内存可见性(Memory Visibi...原创 2018-08-01 17:44:54 · 649 阅读 · 0 评论 -
java中atomic原子类的原理介绍
atomic原子类导图无锁即无障碍的运行, 所有线程都可以到达临界区, 接近于无等待.无锁采用CAS(compare and swap)算法来处理线程冲突, 其原理如下CAS原理CAS包含3个参数CAS(V,E,N).V表示要更新的变量, E表示预期值, N表示新值.仅当V值等于E值时, 才会将V的值设为N, 如果V值和E值不同, 则说明已经有其他线程做了更新, 则当前线程...原创 2018-08-01 17:40:14 · 3770 阅读 · 0 评论 -
Java注解分析以及自定义注解
注解对于开发人员来讲既熟悉又陌生,熟悉是因为只要你是做开发,都会用到注解(常见的@Override);陌生是因为即使不使用注解也照常能够进行开发;注解不是必须的,但了解注解有助于我们深入理解某些第三方框架(比如Spring,Hibernate,Mybatis等),提高工作效率。Java注解又称为标注,是Java从1.5开始支持加入源码的特殊语法元数据;Java中的类、方法、变量、参数、包都可以被注...原创 2018-03-15 17:04:24 · 253 阅读 · 0 评论 -
十大java人物
James Gosling : Java之父文/陶文作 为Java之父,James Gosling的名字可谓是耳熟能详。当人们评论一种编程语言时,总喜欢捎带着把下蛋的母鸡一起带上。Java做为中国的编程语言学习者餐桌上有限的那么 几样餐点中的流行款式,自然是让James Gosling风光不已。虽然James Gosling现在已经不是领导Java发展潮流的领军人物了,做为Sun的开发者产品组的C...转载 2018-04-03 18:31:06 · 7042 阅读 · 0 评论 -
Java多线程
引如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。很多人都对其中的一些概念不够明确...转载 2018-04-19 17:10:02 · 137 阅读 · 0 评论 -
java之IO学习
Java IO流学习总结一:输入输出流Java流类图结构:流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由来: 因为数据编码的不同,而有了对字...转载 2018-04-19 17:18:25 · 125 阅读 · 0 评论 -
Java中的异常
简介程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?。 Java提供了更加优秀的解决办法:异常处理机制。 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。Java中...原创 2018-04-25 14:23:20 · 183 阅读 · 0 评论 -
Java如何防止单例模式被反射攻击
如何防止JAVA反射对单例类的攻击? 在我的上篇随笔中,我们知道了创建单例类有以下几种方式: (1).饿汉式; (2).懒汉式(、加同步锁的懒汉式、加双重校验锁的懒汉式、防止指令重排优化的懒汉式); (3).登记式单例模式; (4).静态内部类单例模式; (5).枚举类型的单例模式。在上面的5种实现方式中,除了枚举类型外,其他的实现方式是可以被JAVA的反射机制给攻击的,即使他的构造方...原创 2018-04-25 15:22:00 · 564 阅读 · 0 评论 -
Java反射机制--是什么,为什么,怎么用
1.反射是什么首先看书要理解反射,很难完全理解,这关系到Java的语言特性,jvm的内存细节,当初我看反射,就像高票答案那样,照着写一遍,结果是你并没有理解,你只是照猫画虎,要想真正理解,我建议题主,不断深入探究,当你踩得足够深回过头来,你会柳暗花明!这里我不打算像别的答案上来就上代码,给你讲怎么用,是啥是啥,老实说那样比较像培训java程序员的感觉,一点对知识的好奇心都没有,如果是想速成...原创 2018-04-27 16:09:40 · 2245 阅读 · 3 评论 -
Java虚拟机详解
Java的性能优化,整理出一篇文章,供以后温故知新。JVM GC(垃圾回收机制)在学习Java GC 之前,我们需要记住一个单词:stop-the-world 。它会在任何一种GC算法中发生。stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行。当stop-the-world 发生时,除GC所需的线程外,所有的线程都进入等待状态,直到GC任务完成。GC优化很多时...原创 2018-04-27 16:52:39 · 263 阅读 · 0 评论 -
jvm调优具体参数配置
jvm调优具体参数配置3.JVM参数 在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标:GC的时间足够的小 GC的次数足够的少 发生Full GC的周期足够的长 前两个目前是相悖的,要想GC时间小必须要一个更小的堆,要...原创 2018-07-31 10:33:31 · 219 阅读 · 0 评论 -
oss对zip包中的所有文件进行上传并且对每个获取文件md5值
上传zip包方法 public static List<String> uploadZipMultiFile(MultipartFile fileData) { List<String> urls = new ArrayList<>(); ZipInputStream zip = new ZipInputStream(fi...原创 2019-01-10 15:34:47 · 2485 阅读 · 0 评论