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 中继承过来的方法
I am a slow walker, but I never walk backwards.