Java笔记

对线程异常的处理

调用Thread的静态方法Thread.setDefaultUncaughtExceptionHandler()

远程调试

Java远程调试的原理是两个VM之间通过debug协议进行通信,然后以达到远程调试的目的。两者之间可以通过socket进行通信。 首先被debug程序的虚拟机在启动时要开启debug模式,启动debug监听程序。jdwp是Java Debug Wire Protocol的缩写。 java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n zhc_application

这是jdk1.7版本之前的方法,1.7之后可以这样用:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8880 -cp "./lib/*:./classes" com.zte.ums.cnms.model.manager.service.XXX server config.yml

zhc_application是main程序,server=y表示是监听其他debugclient端的请求。address=8000表示端口是8000

suspend表示是否在调试客户端建立连接之后启动 VM。如果为y,那么当前的VM就是suspend直到有debug client连接进来才开始执行程序。如果你的程序不是服务器监听模式并且很快就执行完毕的,那么可以选择在y来阻塞它的启动。

然后用一个debug客户端去debug远程的程序了,比如用Eclipse自带的debug客户端,填写运行被debug程序的虚拟机监听的端口号和地址,选择connect方式为attach

修改static final变量

//获取Bean类的INT_VALUE字段  
Field field = Bean.class.getField("INT_VALUE");  
//将字段的访问权限设为true:即去除private修饰符的影响  
field.setAccessible(true);  
/*去除final修饰符的影响,将字段设为可修改的*/  
Field modifiersField = Field.class.getDeclaredField("modifiers");  
modifiersField.setAccessible(true);  
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);  
//把字段值设为200  
field.set(null, 200);  

局限性:基本类型,修改不了=.=/

execute、executeUpdate、executeQuery三者的区别(及返回值)

1. ResultSet executeQuery(String sql); 执行SQL查询,并返回ResultSet 对象。
2. int executeUpdate(String sql); 可执行增,删,改,返回执行受到影响的行数。
3. boolean execute(String sql); 可执行任何SQL语句,返回一个布尔值,表示是否返回ResultSet 。

execute是executeQuery和executeUpdate的综合.
executeUpdate() 这是 PreparedStatement 接口中的方法
executeUpdate(String sql) 这是 PreparedStatement 从父接口 Statement 中继承过来的方法

原文地址:https://www.cnblogs.com/lknny/p/6149593.html