一:背景 1. 讲故事 最近同事在写一段业务逻辑的时候,程序跑起来总是报:集合已修改:可能无法执行枚举操作,硬是没有找到什么情况下会导致这个异常产生,就让我来找一下bug,其实这个异常在座的每个程序员几乎都遇到过,谁也不是一生下就是大牛,简单看了下代码,确实是多线程操作foreach,但并没有对foreach进行Add,Remove操作,扫完代码其实我也是有点懵,没撤只能调试了,在foreach里套一层trycatch,查看异常的线程堆栈从而找出了问题代码,代码简化如下: static void…
package cn.zmh.Exception; /* * * try{ * 需要被检测的语句 * } * catch(异常类 变量){ * 异常的处理语句 * } * finally{ * 一定会被执行的语句 * } * * */ public class ExceptionDemo1 { public static void main(String[] args) { //手动抛除异常 try { fun(0); } catch (Exception e) { e.printStackTr…
ConcurrentModificationException 异常:并发修改异常,当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常.一个线程对collection集合迭代,另一个线程对Collection进行修改的时候, 就会出现上面的异常. 下面看一下代码: package cn.itcast.p4.list.demo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; pub…
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类, 并提供了良好的接口.        在 Java中,每个异常都是一个对象,它是 Throwable 类或其它子类的实例.当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理. Java的异常处理是通过 5个关键词来实现的: try. catch. throw.throws和finally.       一般情况下是用 try来执行一段程序,如果出现异常,系统会抛出( th…
在service代码中   throw new Excepion("自定义异常“) 发现没有回滚, 然后百度了下, 改为抛出运行时异常  throw new RuntimeException("自定义运行时异常")  发现真的回滚了, 原来 spring  事务  只有碰到运行时异常 才回滚…
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace ConsoleTest { class Program { class Test { public string Num = ""; } static void Main(string[] args) { List<Test&…
IEnumerable<DataRow> DetailRows()       {           foreach (DataRow dr in EditData.Tables[tb_AttendLeaveDate._TableName].Rows)               yield return dr;       }…
异常为: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 意思是拥有相同的数据库标识符(代表数据库中的同一条记录),但是具有不同的持久化标识符. 解决办法 1 做一个动作将session关闭 调用Session的 close方法 ,Session的缓存被清空,其中的所有持久化对象都变为…
集合数据类型(set):集合是不重复的无需序列 1.集合数据类型的创建 a = {11,22,33} #或 a = set() #创建空集合,不能用a={},这样创建的是字典类型 2.集合转换(将可迭代的转换为集合) li = [11,22,33,11] se = set(li) print(se) #返回{33, 11, 22} 3.set方法总结 se1 = {11,22} se2 = {22,33,44} se3 = {22,33} se1.add(33) #se1返回{33, 11, 2…
平时我们使用ArrayList比较多,但是我们是否知道ArrayList在进行foreach的时候不能直接通过list的add或者move方法进行删除呢, 原因就是在我们进行foreach遍历的时候,其实底层原理就是使用了 iterator 迭代器进行操作的,我们在foreach中使用list的add 或者 move 方法:会导致并发修改异常抛出: ArrayList是java开发时非常常用的类,常碰到需要对ArrayList循环删除元素的情况.这时候大家都不会使用foreach循环的方式来遍历…