首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java 多态 向上转型 后期绑定一例

    switch中的 default 语句不管放在哪个位置,都是在所有case都不满足的情况下最后执行。 foreach语句 for(元素类型 元素变量;遍历对像) 变量元素.draw()即 遍历对象.draw();foreach即for每一个。 for (Shap shp: s) shp.draw(); 个人理解,当 s[0]=gen.next();时 调用RandomShapeGenerator 中的next方法,执行语句case0-2其中一个return语句得到指向Circle Square Triangle 其中的一个引用,并将其以Shape类型发送出去。此例中当return语句指向Circle时 shp.draw() 即将shp元素变量替换为Circle对象,调用Shap类型 Circle对象draw 方法。 package javahaonan.shape; public class Shape { public void draw() {} public void erase() {} } package javahaonan.shape; import static javahaonan.Print.*; public class Circle extends Shape { public void draw() { print ("Circle。draw()");} public void erase() {print ("Cricle.erase()");} } package javahaonan.shape; import static javahaonan.Print.*; public class Square extends Shape { public void draw(){print("Square.draw()");} public void erase(){print("Square.erase()");} } package javahaonan.shape; import static javahaonan.Print.*; public class Triangle extends Shape { public void draw(){print("Trinagle.draw()");} public void erase(){print("Trinagle.erase()");} } package javahaonan.shape; import java.util.*; public class RandomShapeGenerator { private Random rand = new Random(); public Shape next(){ switch(rand.nextInt(3)){ default: case 0:return new Circle(); case 1:return new Square(); case 2:return new Triangle(); } } } package javahaonan.shape; public class Shapes { private static RandomShapeGenerator gen = new RandomShapeGenerator(); public static void main(String[] args) { Shape[] s=new Shape[9]; for (int i=0;i s[i]=gen.next(); for(Shape shp: s) shp.draw(); } }/output* Square.draw() Trinagle.draw() Square.draw() Circle。draw() Square.draw() Trinagle.draw() Trinagle.draw() Trinagle.draw() Trinagle.draw() */

    06

    C++ STL map迭代器失效问题

    最近在开发过程中,定位一个问题的时候,发现多线程场景下大量创建和销毁某个C:\Windows\System32\reg.exe时出现了383个进程创建消息处理的接口,和384个进程销毁处理消息的接口都在等待锁,另外一个线程也在等锁,后面看了一下在处理进程创建和进程销毁的IPC消息处理所在类中有三把锁,执行流程都锁住了,猜测应该是某个线程持有锁没释放,导致其他并发线程锁住了,结合转储的dump和log日志,以及使用VS2017加载对应的dump,对并行堆栈中的线程进行分析,找了很久没发现问题。最后想了一下,是不是某个地方线程做了耗时或者同步阻塞操作导致的,或者线程中执行了死循环,排查后发现是因为一个同事在对map做循环遍历时,erase操作不当,导致某个地方迭代器失效,线程崩溃了,持有两把锁,其他所有线程都拿不到锁,导致IPC消息一直无法发送,最后程序无法升级。

    01
    领券