java
天一涯
希望每天都有新收获~
展开
-
JDB线上调试
注意命令中有参数suspend=n,指定JAVA以调试模式运行,监听本地8000端口,并且等待连接时不挂起,正常运行。之后就可以用threads、thread、where、list等命令开始调试了。原创 2024-02-18 08:56:36 · 311 阅读 · 1 评论 -
Java实现面向切面编程(AOP)
1、添加依赖2、创建一个计算器接口Cal,定义四个方法 3、创建接口的实现类CalImpl高耦合的写法,每次打印日志都要手动完成:4、使用动态代理进行优化上方代码中,日志信息和业务逻辑的耦合性很高,不利于代码的维护。使用AOP可以进行优化,我们可以使用动态代理实现AOP:给业务代码找一个代理,打印日志信息的工作交给代理来做。这样的话业务代码就只需要关注自身业务即可。(1)去掉手动输出的日志信息(2).代理辅助类的编写和使用(动态代理的核心)我们创建的并不是所谓的代理类,而是一个可以帮助我们返回代理原创 2022-11-12 19:01:43 · 5026 阅读 · 1 评论 -
JavaApplication创建和使用JNDI
代码】JavaApplication创建和使用JNDI。原创 2022-07-23 22:14:46 · 617 阅读 · 0 评论 -
SceneBuilder自定义组件
一、创建好自定义组件二、创建打包文件和打包三、scenebuilder导入文件1、JAR/FXML Manager2、Add Library/FXML from file system2、Add Library/FXML from file system4、选择需要的组件导入五、完成原创 2022-07-13 08:41:33 · 582 阅读 · 0 评论 -
java的class文件批量反编译成java
前提:下载jad例如:将需要反编译的多个文件放在指定路径下。命令:jad -o -r -s java -d src classes_dex2jar/**/*.classjad命令的参数含义如下: -o:覆盖旧文件,而且不用提示确认。 -r:重新加载生成包结构。 -s (java):定义输出文件的扩展名。jad为默认扩展名,我们反编译后当然是要.java源文件了。 -d:输出文件的目录。src表示反编译后的所有文件都放在src目录下。 ...原创 2021-12-25 23:08:53 · 479 阅读 · 0 评论 -
swing中JTable的渲染器和编辑器
JTable的内容、外观、事件响应在很大程度上是由渲染器与编辑器控制的。具体说来,渲染器负责单元格的外观比如前景色、背景色,以及单元格提示;编辑器负责单元格的内容和事件响应。编辑器默认为文本框形式,也可以使用下拉菜单、按钮、单选按钮等形式。定制的渲染器必须实现TableCellRenderer接口并实现getTableCellRendererComponent方法。在该方法中,可以指定渲染器的文字、单元格提示、颜色、字体等。注意,此处的文字仅为显示的内容,不是单元格的实际数据。比如://v原创 2021-08-12 22:22:52 · 541 阅读 · 0 评论 -
Eclipse windowbuilder自定义控件加到控件面板
eclipse的Gui插件windowbuilder工具支持自定义控件加到控件面板,并且支持基本类型的自定义属性出现在属性面板里(切记只支持属性的数据类型是基本类型,不支持其他一切类类型)。这些属性设置后可以实时反应到设计视图上非常有用(例如:JPanel不支持设置背景图片,我们可以自定义一个继承的子类在paintComponent(与paint区别,调用paint,paint会调用依次paintComponent、paintBorder 和 paintChildren,在paint画图自己写的代码在pai转载 2021-07-22 10:02:56 · 794 阅读 · 0 评论 -
JDB附加调试线上JAVA程序
前面介绍过用Eclipse远程调试JAVA程序,见Eclipse远程调试JAVA程序,但现场环境中通常没有安装Eclipse,这时候就可以用jdb来附加进程调试了。 1)首先要保证使用以下命令启动JAVA程序:java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar test.jar 注意命令中有参数suspend=n,指定JAVA以调试模式运行,监听本地8000端口,并且等待连接时不挂..原创 2021-05-13 14:05:09 · 363 阅读 · 0 评论 -
java单播、组播、广播示例
UDP单播:import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.SocketAddress; // 客户端public class ClientTest{ private static final原创 2021-03-18 21:08:40 · 313 阅读 · 1 评论 -
RMI学习总结
1.RMI介绍远程方法调用(RMI)顾名思义是一台机器上的程序调用另一台机器上的方法。RMI的目的就是要使运行在不同的计算机中的对象之间的调用表现得像本地调用一样。RMI是Java支撑分布式系统的基石,例如著名的EJB组件。RMI是远程过程调用(RPC)的一种面向对象实现,RMI底层是通过socket通信和对象序列化技术来实现的。2.RMI原理RMI 应用程序通常包括两个独立的程序:服务器程序和客户机程序。RMI 需要将行为的定义与行为的实现分别定义, 并允许将行为定义代码与行为实现代码存放并运转载 2021-03-18 18:06:52 · 239 阅读 · 0 评论 -
Java枚举如何优雅的自定义值并实现自增
相对于C++中的枚举来说,java中的枚举是比较弱的,没有C++里那么灵活。比如当需要指定枚举中的值时,一般会通过自己定义带参数的构造函数来实现,这样就会导致后续的所有枚举都需要调用这个带参数的构造函数,满满的一堆重复代码!有没有比较简洁的方式实现类似C++中的枚举呢?答案是有的,具体的实现就是下面的代码(来源于网络):import java.util.EnumSet; public class EnumTest { public static void main(String[] a原创 2021-01-19 14:53:07 · 835 阅读 · 0 评论 -
线上JAVA程序调试方法
一、core文件分析法1)使用jmap生成core文件jmap -dump:format=b,file=heap.hprof31531注:31531为java进程的进程ID2)使用IBM HeapAnaluzer进行分析二、使用JMC分析JMC是jdk自带的图形界面分析工具,可查看所有线程及线程状态。选中单个线程可查看该线程的线程堆栈,有一个特点就是堆栈可实时刷新,对于查问题很有帮助。比如有个线程出现了死循环,通过观察堆栈就可以发现,线程堆栈每次都停在某个地方,进而可以通过.原创 2021-01-01 19:09:52 · 846 阅读 · 0 评论 -
Java性能调优工具总结
1、JDK命令行工具 1.1、jps命令 jps用于列出Java的进程,jps可以增加参数,-m用于输出传递给Java进程的参数,-l用于输出主函数的完整路径,-v可以用于显示传递给jvm的参数。 1 2 jps -l -m -v 31427sun.tools.jps.Jps -l -m -v -Dap...原创 2020-12-21 19:43:45 · 685 阅读 · 0 评论 -
java动态代理笔记
java动态代理的实现分为两种1.基于JDK的动态代理2.基于CGILB的动态代理动态代理使用场景:给需要实现的方法添加预处理或者添加后续操作,但是不干预实现类的正常业务,把一些基本业务和主要的业务逻辑分离,Spring的AOP原理就是基于动态代理实现的。1.基于JDK的动态代理该种方式基于接口,JDK的动态代理基于两个类:InvocationHandler(接口)和Proxy(类)。...原创 2020-03-27 09:58:17 · 777 阅读 · 0 评论 -
JVMTI开发教程之一个简单的Agent
JVM TI是JDK提供的一套用于开发JVM监控, 问题定位与性能调优工具的通用编程接口(API)。通过JVMTI,我们可以开发各式各样的JVMTI Agent。这个Agent的表现形式是一个以c/c++语言编写的动态共享库。JVMTI Agent原理: Java启动或运行时,动态加载一个外部基于JVM TI编写的dynamic module到Java进程内,然后触发JVM源生线程Attach...转载 2020-03-26 16:51:05 · 1492 阅读 · 0 评论 -
Java程序调试技巧浅析
用Java这么久,说来惭愧,大部分情况下使用的调试语句是:System.out.println(“value:”+value);这种形式,这两天看了些关于Java程序调试技巧的东西,总结一下,以后要积极使用:一:一种很简单的方法就是使用一个boolean量如:debugMode,需要看看程序的输出时可以使用:if(debugMode)System.out.println("…");在项目完...转载 2020-03-26 14:56:37 · 1018 阅读 · 1 评论 -
Java Class文件命名规则
1、编译后产生的.class文件个数:有多少个类,产生多少个.class文件2、.class文件命名规则:2.1普通内部类外部类名 + $ + 内部类名 [+ $ + 内部类名 + …]+ .class,类名之间使用符号隔开例如:ClassD 隔开例如:ClassD隔开例如:ClassDClassDd$ClassDdd.class,这里ClassDdd是对底层的普通内部类,它的父类Class...转载 2020-03-22 15:09:31 · 3601 阅读 · 0 评论 -
maven下载CDH相关jar包报javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
尝试使用浏览器访问CDH仓库,可以正常访问,但是在MyEclipse中下载maven依赖时,一直报Remote host closed connection during handshake,从网上搜的答案都是说原因是网络不好,需要多尝试几次,但是尝试了好多次也还是一样的结果。于是写程序使用httpclient尝试能不能访问,果然,使用httpclient访问也会报同样的错误。于是网络搜索过程中...原创 2020-03-14 21:04:48 · 1402 阅读 · 0 评论 -
JAVA通过反射重启线程
/** * 重启线程 * @return */ public boolean restart() { if(getState() == Thread.State.NEW) start(); else { try { stop(); Field field = Thread.class.getDeclaredField("threadStatus"...原创 2020-03-12 17:36:30 · 954 阅读 · 0 评论 -
Java表达式引擎aviator
1、简介Aviator是一个高性能、轻量级的 java 语言实现的表达式求值引擎, 主要用于各种表达式的动态求值。2、特性设计目标是轻量级和高性能,相比于Groovy、JRuby的笨重, Aviator非常小, 加上依赖包也才450K,不算依赖包的话只有 70K不是一门完整的语言, 而只是语言的一小部分集合支持大部分运算操作符, 包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹...原创 2020-02-28 09:52:09 · 4153 阅读 · 1 评论 -
maven修改项目默认目录结构
1、Maven源代码层级太多,可通过配置pom.xml进行修改。2、MyEclipse中,点开Effective POM可查看当前项目的所有pom内容,包括从parent继承的和系统默认的配置项。3、找到maven目录结构配置,就知道怎么修改配置了,可以在pom.xml 中project – build标签中配置maven目录结构,使其符合自身项目需要。...原创 2020-02-24 20:31:27 · 2831 阅读 · 0 评论 -
Maven继承
Maven继承的特性则能够帮助抽取各模块之前相同依赖和插件配置,在简化POM的同时还能存在各个模块配置的一致性。对于规范项目开发,避免可能存在的版本不一致的问题,有良好的预防作用。1、使用场景多个子项目都需要某些依赖, 就可以把子项目共同的依赖抽取到父项目中, 子项目通过继承得到这些依赖, 这样也更好的来管理(比如升级, 删除等)2、实例父项目的打包方式修改为 pom<grou...原创 2020-02-21 14:22:44 · 948 阅读 · 0 评论 -
Maven中的聚合
1、使用场景在使用Java开发项目时,一种常见的情形是项目由多个模块组成,软件折及人员往往会采用各种方式对软件划分模块,以得到更清晰de设计以及更高的重用性。Maven的聚合特性能够帮助把项目的各个模块聚合在一起构建。例如在Maven实战中,许晓斌为我们讲解Maven采用的案例就是一个典型的多模块项目。如下图所示:当两个模块实现之后,比如说accout-persist和account-em...原创 2020-02-21 14:01:13 · 1090 阅读 · 0 评论 -
安装jar包到本地maven仓库
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=ojdbc6.jar原创 2020-02-19 14:56:18 · 1039 阅读 · 0 评论 -
Maven项目中引入CDH jar包
我们使用maven时,一般会将中央仓库配置为阿里云的镜像,但是项目中用到的CDH相关的jar包并不存在于该中央仓库中。1、CDH的中央仓库CDH提供了中央仓库,官方文档参考:https://docs.cloudera.com/documentation/enterprise/release-notes/topics/cdh_vd_cdh5_maven_repo.html2、官方给了两种项目中...原创 2020-02-19 10:24:23 · 2227 阅读 · 0 评论 -
Maven的生命周期和插件
一个完整的项目构建过程通常包括清理、编译、测试、打包、集成测试、验证、部署等步骤,Maven从中抽取了一套完善的、易扩展的生命周期。Maven的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin。用户也可自行配置或编写插件。1 . 三套生命周期Maven定义了三套生命周期:clean、...转载 2020-02-18 17:38:27 · 907 阅读 · 0 评论 -
图解MyEclipse创建Maven项目
新建项目点击Finish,完成项目创建。配置JDK在maven工程的pom.xml文件中添加如下配置:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>mave...原创 2020-02-18 11:32:51 · 994 阅读 · 0 评论 -
java使用jws脱离容器运行webservice
1、服务端代码:package jws;import javax.jws.WebMethod;import javax.jws.WebService;import javax.xml.ws.Endpoint;/** * jdk发布webservice服务 */@WebServicepublic class TestJdkWebService { @WebMethod publ...原创 2020-02-07 15:52:16 · 1035 阅读 · 0 评论 -
MyEclipse中配置Maven
Maven下载后通常是不能直接使用的,包下载不下来,这是因为MyEclipse没有配置成使用本地Maven的原因,MyEclipse中配置Maven,我用的是8.5的版本,配置如下:上图中选择之后最好点击,Update Setting 更新一下,至...原创 2020-02-07 13:50:59 · 1037 阅读 · 0 评论 -
Maven下载及安装
第一步,官网下载地址 http://maven.apache.org/download.cgi第二步,解压文件包第三步,配置环...转载 2020-02-07 13:43:30 · 911 阅读 · 0 评论 -
AES实现加解密-Java
一.加解密算法生态圈 目前的数据加密技术根据加密密钥类型可分私钥加密(对称加密)系统和公钥加密(非...转载 2020-01-05 11:40:01 · 1273 阅读 · 0 评论 -
java 打包jar文件以在没有安装JDK或JRE的机子上运行
java号称“一次编译,到处运行”,但这有个前提,那就是你的机子上得安装java环境。对于开发人员或其他一些比较懂计算机的人来说这没什么,但是对于一些不懂计算机的人来说这会很麻烦,他们更希望的是东西拿来就能用,而不用另外安装其他软件。我们可以通过把jre和导出的jar文件封装在一起来实现这个效果。方法其实很简单,就是配置好第三方库路径,再用自己的JRE里的javaw -jar xxx.jar 命...转载 2020-01-04 17:34:56 · 2229 阅读 · 0 评论 -
Java JNA—— dll回调函数实现
java调用dll文件需要使用回调函数作为公开函数的参数时,用以下方法实现:首先,看c++中定义的dll公开函数:typedef void (*ccback)(char *name ,int length); int dllFunction(char *ip, int port, ccback cc); 引用dll文件方法不再赘述,直接看回调函数的实现,需要通过java的接口实现:i...转载 2020-01-04 16:56:16 · 2700 阅读 · 1 评论 -
JNA遇到的那些坑
一.先给出一个简单的例子(来源于网络)将下载的jna-5.3.1.jar和jna-platform-5.3.1.jar导入Java项目中我们示例在C++/C语言生成的DLL文件代码:extern "C" __declspec(dllexport) int add(int a, int b);int add(int a, int b){ return a + b;}add函数为JA...原创 2020-01-04 12:24:41 · 3508 阅读 · 0 评论 -
java批量反编译——CFR
CFR - another java decompiler支持主流java特性-java 8 lambdas表达式,java7字符串切换,可以反编译类的注解,jd-gui无法反编译的 ,cfr却游刃有余。使用方法比较简单,如下:java -jar cfr_0_121.jar test.jar --outputdir c:/test运行以上命令就可以把反编译后的test.jar代码保存到c:...原创 2019-12-15 09:31:10 · 1630 阅读 · 0 评论 -
JAVA批量反编译——jad
1.先在http://www.varaneckas.com/jad下载jad.exe文件;2.将jad添加到环境变量;3.把要反编译的jar要winrar解压到classes目录;4.执行jad命令进行反编译例如:将需要反编译的多个文件放在指定路径下。为了方便操作,我将文件放在C盘根目录下的classes文件夹中。打开运行—>输入cmd—>输入cd c:/,将路径指到C盘根路径...原创 2019-12-15 09:26:53 · 1501 阅读 · 0 评论 -
java布局
原文地址:java布局管理器总结作者:技术羊之前在使用的过程中一直对java中swing的布局管理器感到很困惑,以下是在网上找到的一篇文章。其中我重点关注了一下gridbaglayout。写的比较详尽:BorderLayoutFlowLayoutGridLayoutGridBagLayoutCardLayout转载 2017-04-17 23:03:26 · 10146 阅读 · 0 评论 -
pom文件确定依赖的groupid和artifactId
1、打开网站https://mvnrepository.com/,搜索所使用的依赖,比如配置zookeeper2、根据你所使用依赖的版本,进入相应的页面,这里我使用的是3.4.133、进入页面后,选择maven,即可看到引入依赖格式,复制使用即可。 ...原创 2019-01-09 22:09:08 · 9148 阅读 · 0 评论 -
java远程调试总结
注:本文所有步骤均经过验证MyEclipse远程调试jar包(1)调试方式启动运行jar包java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y -jar xxx.jar其中xxx.jar为需要调试的jar包参数说明:-Xdebug ...原创 2019-02-13 16:34:02 · 600 阅读 · 0 评论 -
jvm 性能调优工具之 jstat
概述Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。jstat 用法option: 参数选项 -t: 可以在打印的列加上Time...转载 2019-04-17 14:57:39 · 548 阅读 · 0 评论