济南IT培训 > 达内新闻
Java小百科
- 发布: 互联网
- 来源:互联网
- 时间:2017-11-27 11:50
高级知识点:
类加载器ClassLoader机制
脚本引擎: ScriptEngineManager、ScriptEngine
编译器API: JavaCompiler
使用注解
字节码增强技术BCEL.需要单独下载,自行搜索
远程调用RMI
本地方法JNI
如何运行jar文件? 且看济南达内培训怎么说:java -jar xxx.jar java -cp xxx.jar xxx.com.xxxx # 运行指定类中的main函数, -cp == --classpathJsonObject处理关于JSONObject.NULL下面的语句不报错,但是实际执行的操作是这个key被remove掉了( jsonObject.remove(key)时key可以不存在 )jsonObj.put("someKey",null); 要想放一个null值,请使用JSONObject.NULL
(1)从字符串生成的jsonObj,如果字符串中某个key的值为null,那么jsonObj.get("someKey") 的值为JSONObject.NULL,而不是null,toString()的结果为"null",而不是抛出异常!
(2)要判断某个键的值是不是null(正确来说应该是JSONObject.NULL,因为如前面所述,你是不可能把一个null值put到JsonObj之中的),可以直接和这个值比较
if (jsonObj.get("someKey")==JSONObject.NULL){//...} 或者使用isNull方法,这个方法在键不存在或者键值为JSONObject.NULL时都会返回true if (jsonObj.isNull("someKey")){//...}
(3) JSONArray对象的put,不能put一个null对象,否则jsonArray的长度会发生变化,但是get又会抛出异常,这应该是一个bug,所以在往jsonArray中put对象时一定要判空
JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = null; jsonArray.put(jsonObject); System.out.println(jsonArray.length()); //长度为1 System.out.println(jsonArray.get(0)); // 抛出异常遍历JsonObj...some code...Iterator it = jsonObj.keys();while (it.hasNext()) { String key = (String) it.next(); Object value = jsonObj.get(key); ...}for (int i = 0; i < jsonArr.length(); i++) { Object value = jsonArr.get(i); ...}单例模式这种方式并未加锁,因为第一次加载ImageLoader类时,并不会实例化单例对象,只有第一次调用getInstance()方法时会导致虚拟机加载InnerInstance类,这种方式不仅能保证对象的单一性,还避免加锁带来的性能问题,又启动了延迟加载的优化,所以这就是单例模式的终极实现版本,也是推荐使用的方式.public class ImageLoader{ private static class InnerInstance{ private static final ImageLoader instance = new ImageLoader(); } private ImageLoader(){} public static ImageLoader getInstance(){ return InnerInstance.instance; } }ThreadLocal多个线程要共享同一个值时,大多数时候我们需要保证线程安全.而还有一些时候我们需要每一个线程都可以独立地改变自己的副本.这就需要使用 ThreadLocal ,当使用 ThreadLocal 维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,不会影响其它线程所对应的副本.ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单:在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本.注意:使用线程池的时候,在第二次使用某个线程的时候,这个threadlocal变量会存在初始值,也就是上次设置的值.但是一般使用threadlocal时都是先set后get,所以一般不存在问题,但是要知道是什么回事.private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>() { public Integer initialValue() { return 0; } };class.getResource()和class.getClassLoader().getResource()获取路径的区别如下: TestFile.class.getResource("/") # 到编译后的classes目录 TestFile.class.getResource("") #到具体包所在目录 TestFile.class.getClassLoader().getResource("") #到编译后的classes目录 TestFile.class.getClassLoader().getResource("/") #为null,获取不到 TestFile.class.getResource("/") = TestFile.class.getClassLoader().getResource("")错误排查方式(抛异常方式)感觉这种方式有利于迅速找出是哪行代码出了问题, 同时使用 try-catch 嵌套一层,生成一个新的Exception, 可以提供更丰富的 exception.getMessage() 信息但是要注意有些信息不适合暴露给前端,所以不要什么信息都往异常里面写需要带出参数的底层服务 都使用 try-catch, 在 catch 中新建一个Exception, 加入自定义的错误信息,再接力抛出异常即可,不进行打印等操作, 代码如下: try { // some code } catch (Exception e) { Exception exception = new Exception("method3执行出错,参数 i=0::" + e.getMessage()); exception.setStackTrace(e.getStackTrace()); throw exception; }只有最顶层服务或其他需要进行异常处理的位置 才进行异常处理, 一般的处理方式应该是 (Servlet中) try { // some code } catch (Exception e) { String errMsg = "执行出错:" + e.getMessage(); // normal return or throw }获取JVM环境变量和操作系统环境变量
获取环境变量
这里的环境变量是指与JVM相关的环境变量,例如通过下面的方式设置的环境变量
java -Ddebug=true YourClass #在运行时在命令行上设置: System.setProperty("debug", "true"); #在程序中设置 String debug = System.getProperty("debug"); #在程序中获得还有一些已经预定义好的环境变量,常用的如下:java.version、java.home、os.name、os.version、user.name、user.home、user.dir
获取操作系统的环境变量
System.getenv() 和 System.getenv(aString)
更多济南达内培训相关咨询,请扫描下方二维码

最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 哈尔滨
- 济南
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 长沙
- 昆明
- 太原
- 无锡
- 石家庄
- 南宁
- 佛山
- 珠海
- 宁波
- 保定
- 呼和浩特
- 洛阳
- 烟台
- 运城
- 潍坊
Java小百科
- 发布: 互联网
- 来源:互联网
- 时间:2017-11-27 11:50
高级知识点:
类加载器ClassLoader机制
脚本引擎: ScriptEngineManager、ScriptEngine
编译器API: JavaCompiler
使用注解
字节码增强技术BCEL.需要单独下载,自行搜索
远程调用RMI
本地方法JNI
如何运行jar文件? 且看济南达内培训怎么说:java -jar xxx.jar java -cp xxx.jar xxx.com.xxxx # 运行指定类中的main函数, -cp == --classpathJsonObject处理关于JSONObject.NULL下面的语句不报错,但是实际执行的操作是这个key被remove掉了( jsonObject.remove(key)时key可以不存在 )jsonObj.put("someKey",null); 要想放一个null值,请使用JSONObject.NULL
(1)从字符串生成的jsonObj,如果字符串中某个key的值为null,那么jsonObj.get("someKey") 的值为JSONObject.NULL,而不是null,toString()的结果为"null",而不是抛出异常!
(2)要判断某个键的值是不是null(正确来说应该是JSONObject.NULL,因为如前面所述,你是不可能把一个null值put到JsonObj之中的),可以直接和这个值比较
if (jsonObj.get("someKey")==JSONObject.NULL){//...} 或者使用isNull方法,这个方法在键不存在或者键值为JSONObject.NULL时都会返回true if (jsonObj.isNull("someKey")){//...}
(3) JSONArray对象的put,不能put一个null对象,否则jsonArray的长度会发生变化,但是get又会抛出异常,这应该是一个bug,所以在往jsonArray中put对象时一定要判空
JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = null; jsonArray.put(jsonObject); System.out.println(jsonArray.length()); //长度为1 System.out.println(jsonArray.get(0)); // 抛出异常遍历JsonObj...some code...Iterator it = jsonObj.keys();while (it.hasNext()) { String key = (String) it.next(); Object value = jsonObj.get(key); ...}for (int i = 0; i < jsonArr.length(); i++) { Object value = jsonArr.get(i); ...}单例模式这种方式并未加锁,因为第一次加载ImageLoader类时,并不会实例化单例对象,只有第一次调用getInstance()方法时会导致虚拟机加载InnerInstance类,这种方式不仅能保证对象的单一性,还避免加锁带来的性能问题,又启动了延迟加载的优化,所以这就是单例模式的终极实现版本,也是推荐使用的方式.public class ImageLoader{ private static class InnerInstance{ private static final ImageLoader instance = new ImageLoader(); } private ImageLoader(){} public static ImageLoader getInstance(){ return InnerInstance.instance; } }ThreadLocal多个线程要共享同一个值时,大多数时候我们需要保证线程安全.而还有一些时候我们需要每一个线程都可以独立地改变自己的副本.这就需要使用 ThreadLocal ,当使用 ThreadLocal 维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,不会影响其它线程所对应的副本.ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单:在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本.注意:使用线程池的时候,在第二次使用某个线程的时候,这个threadlocal变量会存在初始值,也就是上次设置的值.但是一般使用threadlocal时都是先set后get,所以一般不存在问题,但是要知道是什么回事.private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>() { public Integer initialValue() { return 0; } };class.getResource()和class.getClassLoader().getResource()获取路径的区别如下: TestFile.class.getResource("/") # 到编译后的classes目录 TestFile.class.getResource("") #到具体包所在目录 TestFile.class.getClassLoader().getResource("") #到编译后的classes目录 TestFile.class.getClassLoader().getResource("/") #为null,获取不到 TestFile.class.getResource("/") = TestFile.class.getClassLoader().getResource("")错误排查方式(抛异常方式)感觉这种方式有利于迅速找出是哪行代码出了问题, 同时使用 try-catch 嵌套一层,生成一个新的Exception, 可以提供更丰富的 exception.getMessage() 信息但是要注意有些信息不适合暴露给前端,所以不要什么信息都往异常里面写需要带出参数的底层服务 都使用 try-catch, 在 catch 中新建一个Exception, 加入自定义的错误信息,再接力抛出异常即可,不进行打印等操作, 代码如下: try { // some code } catch (Exception e) { Exception exception = new Exception("method3执行出错,参数 i=0::" + e.getMessage()); exception.setStackTrace(e.getStackTrace()); throw exception; }只有最顶层服务或其他需要进行异常处理的位置 才进行异常处理, 一般的处理方式应该是 (Servlet中) try { // some code } catch (Exception e) { String errMsg = "执行出错:" + e.getMessage(); // normal return or throw }获取JVM环境变量和操作系统环境变量
获取环境变量
这里的环境变量是指与JVM相关的环境变量,例如通过下面的方式设置的环境变量
java -Ddebug=true YourClass #在运行时在命令行上设置: System.setProperty("debug", "true"); #在程序中设置 String debug = System.getProperty("debug"); #在程序中获得还有一些已经预定义好的环境变量,常用的如下:java.version、java.home、os.name、os.version、user.name、user.home、user.dir
获取操作系统的环境变量
System.getenv() 和 System.getenv(aString)
更多济南达内培训相关咨询,请扫描下方二维码

最新开班时间
- 北京
- 上海
- 广州
- 深圳
- 南京
- 成都
- 武汉
- 西安
- 青岛
- 天津
- 杭州
- 重庆
- 厦门
- 哈尔滨
- 济南
- 福州
- 沈阳
- 合肥
- 郑州
- 长春
- 苏州
- 大连
- 长沙
- 昆明
- 温州
- 太原
- 南昌
- 无锡
- 石家庄
- 南宁
- 中山
- 兰州
- 佛山
- 珠海
- 宁波
- 贵阳
- 保定
- 呼和浩特
- 东莞
- 洛阳
- 潍坊
- 烟台
- 运城