java
文章平均质量分 68
java
車輪の唄
atarik@163.com
展开
-
反射的一个应用
当需要在进程启动后,加载指定路径下的jar包,就需要用到反射1.需要自己重新实例化一个类加载器,因为类加载器只能在实例化的时候指定jar包路径2.这个类加载器必须重写以打破双亲委托,因为必须优先加载执行路径下jar包的所有类,没有再去父加载器去找,why?3.关于线程上下文加载器,同样可以破坏系统的双亲委托https://blog.csdn.net/yangcheng33/article/details/52631940...原创 2021-08-25 20:23:41 · 230 阅读 · 0 评论 -
类加载器
1.类加载器的父类(非父子继承关系) 启动类加载器,由C++实现,没有父类。 拓展类加载器(ExtClassLoader),由Java语言实现,父类加载器为null 系统类加载器(AppClassLoader),由Java语言实现,父类加载器为ExtClassLoader 自定义类加载器,父类加载器肯定为AppClassLoader。 2.在JVM中表示两个class对象是否为同一个类对象存在两个必要条件类的完整类名必须一致,包括包名。 加载这个类的ClassL原创 2021-01-01 13:04:54 · 244 阅读 · 0 评论 -
Lambda 表达式的作用
从Java 8开始,Java开始提供Lambda表达式,这里不再介绍Lambda表达式怎么用,只总结Lambda表达式的作用:使用更清楚简洁的一个表达式代替一个函数式接口 减少代码量 代码意图更突出 对集合数据Collection的迭代,过滤,抽取更容易,代码也更简洁 使用变量记住一段逻辑 任务逻辑传递 (目的就是传递一段动态的任务逻辑交给执行者执行) 回调逻辑传递 (目的是调用方发生某个事件之后进行回调) 虽然在能力强弱,表现形式,实现方式和原理上都有诸多不同,但从效果和应用原创 2020-10-23 19:52:09 · 573 阅读 · 0 评论 -
log4j日志实现重复警告slf4j-log4j12和log4j-slf4j-impl
因为各种三方库依赖的log4j实现不同,所以可能会出现找到多个log4j实现的警告,但是不影响程序(logback是会影响的),如下:SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/software/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found bind原创 2020-10-18 15:57:36 · 3903 阅读 · 0 评论 -
URLClassLoader使用方法
1. java类加载器程序若想执行,必须加载到内存当中才能成功执行。java程序并不是可执行文件,由许多独立的类文件来完成。所以java中加载程序是以类为单外来完成的。这也就需要我们来简单了解一下java的class loader加载机制。Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。系统提供的类加载器主要有下面三个: 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现...原创 2020-10-07 14:02:56 · 1260 阅读 · 0 评论 -
Linux查找class类所在jar包
找到Integer.class所在的jar包1.1.使用ls命令版本1ls *.jar | while read jarfile; do echo "$jarfile" jar -tf $jarfile | grep "Integer.class"done在Linux终端命令行输入如下命令,然后直接回车即可:[root@dap211-159 lib]# ls *.jar | while read jarfile; do> echo "$jarfile原创 2020-10-07 13:49:16 · 924 阅读 · 0 评论 -
关于getClass().getClassLoader().getResourceAsStream
InputStream is = getClass().getClassLoader().getResourceAsStream("helloworld.properties");getClass():取得当前对象所属的Class对象getClassLoader():取得该Class对象的类装载器类装载器负责从Java字符文件将字符流读入内存,并构造Class类对象,所以通过它可以得到一个文件的输入流。装载类的过程非常简单:查找类所在位置,并将找到的Java类的字节码装入内存,生成对应的Cl原创 2020-10-07 13:46:31 · 7020 阅读 · 1 评论 -
Java Agent
Java Agent一点都不神秘,也是一个Jar包,只是启动方式和普通Jar包有所不同,对于普通的Jar包,通过指定类的main函数进行启动,但是Java Agent并不能单独启动,必须依附在一个Java应用程序运行,有点像寄生虫的感觉。如何动手写一个Java Agent因为Java Agent的特殊性,需要一些特殊的配置,在META-INF目录下创建MANIFEST文件.并在MANIFEST文件中指定Agent的启动类这里需要解释下为什么要指定Agent-Class和Premain原创 2020-10-04 12:52:18 · 245 阅读 · 0 评论 -
关于泛型
1.一个栗子List arrayList = new ArrayList();arrayList.add("aaaa");arrayList.add(100);for(int i = 0; i< arrayList.size();i++){ String item = (String)arrayList.get(i); Log.d("泛型测试","item = " + item);}程序的运行结果会以崩溃结束:java.lang.ClassCastExce.原创 2020-10-03 11:18:39 · 251 阅读 · 0 评论 -
列化对象中的HashMap、HashSet或HashTable等集合不能包含对象自身的引用
如果一个被序列化的对象中,包含有HashMap、HashSet或HashTable集合,则这些集合中不允许保存当前被序列化对象的直接或间接引用。因为,这些集合类型在反序列化的时候,会调用到当前序列化对象的hashCode方法,而此时(序列化对象还未完全加载)计算出的hashCode有可能不正确,从而导致对象放置位置错误,破坏反序列化的实例...原创 2020-09-11 20:50:49 · 2009 阅读 · 0 评论 -
浮点数==比较
System.out.println(0.1d == 0.1f);结果会是flase类型升级(type promotion)首先,来看看java中的几种原生的数值类型进行==或!=比较运算的时候会发生什么。如果运算符两边的数值类型不同,则首先会进行类型升级(type promotion),规则如下:如果运算符任意一方的类型为double,则另一方会转换为double 否则,如果运算符任意一方的类型为float,则另一方会转换为float 否则,如果运算符任意一方的类型为long,则另原创 2020-09-11 20:46:53 · 297 阅读 · 0 评论 -
System.getProperty 和 System.getenv
介绍java.lang包在java应用中会自动导入。该包包含很多常用的类,从NullPointException到Object,Math以及String等。java.lang.System类是一个final类,意味这我们不能创建它的实例,因此其所有方法都是static。下面我们说明两个系统方法读取系统属性和环境变量的区别,方法名称分别为getProperty and getenv。使用System.getProperty()java平台使用Properties 对象去提供本地系统配置信息,我原创 2020-07-03 21:31:50 · 772 阅读 · 0 评论 -
jdk Runtime类使用
一、得到系统内存的一些信息@Testpublic void runtimeInfo() { Runtime runtime = Runtime.getRuntime(); int processors = runtime.availableProcessors(); long freeMemory = runtime.freeMemory(); long m...原创 2020-03-15 22:38:51 · 469 阅读 · 0 评论 -
跳出foreach循环
Java8的foreach循环,这个循环里面,break和continue都不管用. 需要使用return,这个只能跳过本次循环,还是会继续执行for循环的package com.lxk.java8.lambdaTest; import java.util.Arrays;import java.util.List;import java.util.Optional; /** *...原创 2020-03-11 20:29:30 · 709 阅读 · 0 评论 -
CopyOnWriteArrayList
1. CopyOnWriteArrayList 功能简介CopyOnWriteArrayList 是juc中提供的 并发安全的 ArrayList, 我们拆分一下类名 "Copy" "On" "Write" "ArrayList", 从字面意思我们推断出, 这个是以在 Write 时进行 Copy 数组元素的 ArrayList.它主要具有一下特性:所有元素都存储在数组里面, 只有当...原创 2019-11-08 11:06:40 · 182 阅读 · 0 评论 -
Threadlocal线程安全与弱引用问题
参见 :https://blog.csdn.net/vicoqi/article/details/79743112 https://blog.csdn.net/X8i0Bev/article/details/1010866041、在ThreadLocal的生命周期中,都存在这些引用。看下图:实线代表强引用,虚线代表弱引用。2、ThreadLocal的实现是这...原创 2019-11-08 11:03:13 · 299 阅读 · 1 评论 -
==和equals
1.== 在比较基本数据类型时,判断两个变量的值是否相等 == 在比较引用类型时,比较的是引用类型的内存地址2.euqals是超类object下的方法,只能比较引用类型,不能比较基本类型。其在object中定义的功能和==是相同的,都是比较变量值是否相同而在stirng类,integer类中,equals方法被重新,比较的是内存地址是否相同如果自建类,不重写euqals方法的话原创 2016-10-18 08:59:29 · 395 阅读 · 0 评论 -
数组的初始化
1.基本类型数组,数组中存放的是基本类型引用类型数组,数组中存放的是引用类型的内存地址初始化时,int[] i=new int[10];则其默认为10个0Person[] i = new Person[10];则默认为10个null2.二维数组实际上是一维数组3.i存放的是数组在内存中的地址,数组也是引用类型原创 2016-12-28 09:41:36 · 438 阅读 · 0 评论 -
JAVA 泛型 - Class<T>
一、 随着Java的发展,类Class已经泛型化了。但是随之而来会有一系列的疑问,Class 中类型参数 T 的含义是什么?Class和Object有什么区别? 实际上,在之前的JDK版本中,Class.newInstance() 方法的定义返回 Object,您很可能要将该返回类型强制转换为另一种类型:class Class { Object n原创 2016-12-23 16:28:14 · 10014 阅读 · 0 评论 -
理解泛型和通配符?
集合中(lsit,map,set)不能用?,即其中只能放同一种类型的数据,如下使用方式可以public static void main (String args[]){ List str = new ArrayList<>(); str.add("123qw"); List in = new ArrayList<>(); in.add(1); getData(str原创 2016-12-23 15:55:14 · 403 阅读 · 0 评论 -
Comparable接口中compareTo用法
compareTo就是比较两个值,如果前者大于后者,返回1,等于返回0,小于返回-1,我下面给出了例子,由于比较的变量我用的是int,int型可以直接比较,所有没有用到compareTo比较,如果声明的是Date、String、Integer或者其他的,可以直接使用compareTo比较, public int compareTo(TestModel1 o) { return t原创 2016-10-12 11:13:07 · 9050 阅读 · 0 评论 -
comparable接口和comparator接口的应用与异同
public class Test { public static void sort(){ List<String> st = new ArrayList<String>(); st.add("3"); st.add("2"); System.out.println(st); Collections.sort(st); System.out.print...原创 2016-10-12 17:16:48 · 443 阅读 · 0 评论 -
list排序
1.Collections.sort() 要求list T必须实现comparable接口2.Collections.sort(list,Comparator)3.list.sort(list,Comparator),实现方式同21.collection接口继承自Iterable接口2.原创 2017-02-20 11:34:56 · 338 阅读 · 0 评论 -
main()方法里面的String args[]
String[] args 这个字符串数组是保存运行main函数时输入的参数的,例如main函数所在的类名为test那么你在cmd运行 java test a b c 时,args[0] = a ,args[1]=b, args[2]=c你就可以在你的程序中调用你输入的这些变量了。原创 2017-02-25 14:53:44 · 431 阅读 · 0 评论 -
java异常处理机制
1. demo try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不信?那你看看下面的代码,“猜猜”它执行后的结果会是什么?不要往后看答案、也不许执行代码看真正答案哦。如果你的答案是正确,那么这篇文章你就不用浪费时间看啦。packag...原创 2017-06-08 19:47:29 · 360 阅读 · 0 评论 -
内部类的this
内部类的this有三种指向:1、本类的成员,即this.getDataHandle2、父类的成员,即super.getDataHandle3、所属类的成员,即MainSystem.this.getDataHandle原创 2017-06-30 10:37:29 · 509 阅读 · 0 评论 -
外部类.this.成员域
在一个类的内部类中,如果需要访问外部类的方法或者成员域的时候,如果使用 this.成员域(与 内部类.this.成员域 没有分别) 调用的显然是内部类的域 , 如果我们想要访问外部类的域的时候,就要必须使用 外部类.this.成员域public class TestA { public void tn() { Syste原创 2017-06-09 16:48:17 · 790 阅读 · 0 评论 -
String 构造函数
1 /** 2 * String 构造函数演示程序 3 * 4 * @author skywang 5 */ 6 import java.nio.charset.Charset; 7 import java.io.UnsupportedEncodingException; 8 9 public class StringContructorTest {10 11原创 2017-06-23 10:26:50 · 603 阅读 · 0 评论 -
string,stringbuffer,stringbuilder
String 和 CharSequence 关系String 继承于CharSequence,也就是说String也是CharSequence类型。CharSequence是一个接口,它只包括length(), charAt(int index), subSequence(int start, int end)这几个API接口。除了String实现了CharSequence之外,Strin原创 2017-06-23 10:49:56 · 311 阅读 · 0 评论 -
Java 变量和常量
变量和常量 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量。 在实际的程序中,可以根据数据在程序运行中是否发生改变,来选择应该是使用变量代表还是常量代表。变量 变量代表程序的状态。程序通过改变变量的值来改变整个程序的状态,或者说得更原创 2017-07-04 16:50:30 · 212 阅读 · 0 评论 -
Pattern类与Matcher类详解
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式。 Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编原创 2017-06-14 11:30:02 · 429 阅读 · 0 评论 -
排序问题
第一种方法 , Entity实现了comparable接口list es = new ArrayListCollections.sort();第二种方法 , Entity没有实现comparable接口 (此时应用comparator接口)List es = new ArrayListes.sort((x,y)->y.get().comparato(x.get()))原创 2017-08-01 17:17:55 · 810 阅读 · 0 评论 -
字符串拼接方式性能比较
import java.util.ArrayList;import java.util.List;import org.apache.commons.lang.StringUtils;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class TestString {原创 2017-08-03 09:10:52 · 435 阅读 · 0 评论 -
final关键字
1.修饰基本类型变量 , 该变量不能被修改2.修饰引用类型变量 ,只能保证指向的引用类型的地址不变,即一直指向一个对象 , 但是对象的内容可以被修改3.final修饰的方法不能被重写4.final修饰的类不能有子类原创 2017-08-03 20:53:31 · 230 阅读 · 0 评论 -
对象池
http://tieba.baidu.com/p/3123867354?pid=52708507082&cid=原创 2017-08-11 17:22:03 · 439 阅读 · 0 评论 -
匿名内部类
匿名类即没有名字的类,在某个类内部使用,因为没有名字,别的类将无法调用它,只能在创建的时候,使用new语句声明它们。如this.addWindowListener(new WindowAdapter(){});因此,理解的时候可以将匿名类当做匿名内部类;匿名内部类,即没有名字的内部类,正因为没有名字,所以只能用一次,程序员通常会考虑这个问题,从而精简代码。反过来说,当你发现某个类只需要被用一次原创 2017-09-23 09:04:20 · 235 阅读 · 0 评论 -
正则表达式
什么是正则表达式 正则表达式(英文:Regular Expression)在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初原创 2017-01-18 14:33:23 · 1409 阅读 · 0 评论 -
如果catch里面有return语句,finally里面的代码还会执行吗?
答案:会执行,在return 前执行代码示例1:/* * java面试题20--如果catch里面有return语句,finally里面的代码还会执行吗? */public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt());...原创 2017-09-19 20:21:32 · 3770 阅读 · 2 评论 -
String、StringBuffer与StringBuilder之间区别
1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String 2.String 的原因 String:字符串常量 StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你原创 2017-08-03 09:22:13 · 241 阅读 · 0 评论 -
内部类引用外部类对象
测试实体类@Datapublic class TestEn { String ss; Inner inner; //@Data public class Inner{ String s; @Override public String toString() { return "Inner [s=" + s + "]"; } public Strin原创 2017-11-28 19:28:25 · 2238 阅读 · 0 评论