首页
学习
活动
专区
圈层
工具
发布

一个关于List的IndexOutOfBoundsException异常记录

一个关于List的IndexOutOfBoundsException异常记录 下面的代码是一个关于List的经典问题,平常工作中,我们对空指针会比较警惕,稍不留意可能就会写出来下面的问题代码。... "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 main     at java.util.ArrayList.rangeCheck...429)     at com.lingyejun.dating.chap11.thread.MyDemo3.main(MyDemo3.java:17) 根本原因在于new ArrayList()的时候创建出来的是一个不包含任何内容的空数组...,此时的数组size是0,然后list.get(0)操作时,index>=size,所以就出现了数组越界的异常,在这里小记一下。...elementData(index); }   private void rangeCheck(int index) {     if (index >= size)         throw new IndexOutOfBoundsException

28510

Exception 和 Error 有什么区别么声明提问正文

要做的,应该是分析该错误出现的原因,尽量避免这类问题的出现。 关于 Exception 和 Error 的区别,可以简单这么理解,我们可以从异常中恢复程序但却不应该尝试从错误中恢复程序。...看了该讲作者所扩展的点,以及评论区里大神的回复,其实还可以从常见的一些异常,即原因和处理方式扩展;也可以从异常处理代码的规范角度出发扩展讲一讲,我都统一将这些扩展都在开头的提问中列出来了。...IndexOutOfBoundsException 数组越界异常,这类异常还蛮经常出现的,避免方式就只能是尽量书写规范的代码,注意一些,或者多让程序跑跑 Lint 检查。...NullPointerException 空指针异常,这异常算是最令人头疼的异常了,在线上异常的比例中,肯定不少。...函数的返回值有两种类型:值类型和对象引用,对于对象引用,要特别小心,如果在 finally 代码块中对函数返回的对象成员属性进行了修改,即使不在 finally 块中显示调用 return 语句,这个修改也会作用于返回值上

95850
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Window, WindowManager和WindowManagerService

    1.Window是什么 Window在Android开发中是一个窗口的概念,它是一个抽象类,具体的实现类是PhoneWindow,在PhoneWindow中有一个顶级View—DecorView,继承自...但是Window并不是真实存在的,它更多的表示一种抽象的功能集合,View才是Android中的视图呈现形式,绘制到屏幕上的是View不是Window,但是View不能单独存在,它必需依附在Window...这个抽象的概念上面,Android中需要依赖Window提供视图的有Activity,Dialog,Toast,PopupWindow,StatusBarWindow(系统状态栏),输入法窗口等,因此Activity...(WindowManagerGlobal) 3.WindowManagerGlobal 先介绍几个重要的数据结构 private static IWindowManager sWindowManagerService...,作为WindowManagerGlobal中大部分的内部实现 private final ArrayList mParams = new

    98310

    Android开发之漫漫长途 Ⅳ——Activity的显示之ViewRootImpl初探

    该系列引用了《Android开发艺术探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!!...在前面的文章中我也很少贴出源码。本系列文章意在让读者对Android系统有个更整体的把握。我所写的每一章知识都有可能在实际工作中用到。...可以看出WindowManagerGlobal是个典型的单例。 WindowManagerGlobal 的addView方法并不复杂,其主要的关键点我们已经标注并写了注释。...WindowManagerGlobal是个单例类,它在进程中只存在一个实例,是它内部的addView方法最终创建了我们的核心类ViewRootImpl。...它是WindowManagerGlobal的实际工作者。 ---- 下篇预告 在下一篇文章中我们将深入介绍ViewRootImpl的工作流程。测量、布局、以及绘制。 ---- 此致,敬礼

    44230

    Window源码解析(二):Window的添加机制

    第一篇:《Window源码解析(一):与DecorView的那些事》 Header 在上一篇中,我们讲了 Window 和 DecorView 的那些事,如果没有看过的同学请点击这里:《Window源码解析...而今天就要来详细了解 Window 的添加机制了,到底在 WindowManager.addView 中做了什么事情?我们一起来看看吧!!...若不是 WindowManagerGlobal.ADD_OKAY 则说明添加失败了,抛出对应的异常。...()); ... // 返回添加窗口的结果 return res; } 在 WindowManagerService 中做的事情有很多,一开始利用...再然后就是创建了一个 WindowState 对象,利用这个对象按照显示次序插入 mWindows 列表中,最后就是依据排序来确定窗口的最终显示次序。并返回了 Window 添加的结果 res 。

    1.1K40

    【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 )

    performTraversals 方法中 , 完成 测量 , 布局 , 绘画 操作 ; 在 WindowManagerGlobal 中的 addView 方法的主要作用是添加 DecorView ;...= WindowManagerGlobal.getWindowSession() 获得 ; WindowManagerGlobal 的 getWindowSession 方法中 , 最终 WindowSession...的 getWindowSession 获取 , 最终还是调用了 WindowManagerService 的 openSession 方法 ; WindowManagerGlobal 参考源码 : public...在 WindowManagerService 的 addWindow 方法中 , 初始化了 窗口的状态 WindowState , 通过调用 WindowState 的 openInputChannel...方法 , 设置了 InputChannel , 就是将 ViewRootImpl 中 setView 方法中 new InputChannel() 创建的 InputChannel 传递进来 ; WindowManagerService

    1.5K20

    理解WindowManager

    来进行跨进程通信,WMS作为系统服务有很多API是不会暴露给WindowManager的 3.Window是以View的形式存在的 4.PhoneWindow是在Activity启动过程中的attach...方法中创建的 5.WindowManagerImpl虽然是WindowManger的实现类,但是没有实现什么功能,而是将功能实现委托给了WindowManagerGlobal,这里用到的是桥接模式 6....WindowManager继承自接口ViewManager,WindowManagerImpl是WindowManager接口的实现类,但是具体的功能都会委托给WindowManagerGlobal来实现...,此前的代码逻辑都是运行在本地进程的,而Session的addToDisplay方法则运行在WMS所在的进程(SystemServer进程)中 ?...方法,updateViewLayout方法在WindowManagerImpl中实现,然后会调用WindowManagerGlobal的updateViewLayout方法 --摘自《Android进阶解密

    84730

    Android | 理解 ViewRootImpl

    ViewRootImpl 的创建过程是从 WindowManagerImpl 中开始的。View 的测量,布局,绘制以及上屏,都是从 ViewRootImpl 中开始的。...WindowManagerImpl WindowManager 的实现类,WindowManagerImpl 中的内部方法实现都是通过代理类 WindowManagerGlobal 来完成。...WindowManagerGlobal WindowManagerGlobal 是一个单例,也就是说一个进程中只有一个 WindowManagerGlobal对象,他服务与所有页面的 View。...setContentView 方法中的 View 最终也会被添加到 Window 对象中的 DecorView 中,也就是说一个 Window 中对应着一个 View。...例如 Activity 中,在 onresume 执行完成后,就会获取 Window 中的 DecorView,然后通过 WindowManager 把 DecorView 添加到窗口上,这个过程中是由

    1.4K30

    Android设计模式应用-代理模式

    因为 你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。...  ,这个已经理解了,这个实例一般是作为成员变量存在于代理类中的,它有个特点就是不需要你赋值,直接调用全局变量,或者构造函数里面不需要传递这个参数进去,它可以直接new的这种特性,一般都是属于代理模式...android中的具体应用:WindowManagerImpl就是一个代理类  public final class WindowManagerImpl implements WindowManager... {     //WindowManagerGlobal就是被代理的对象,     private final WindowManagerGlobal mGlobal = WindowManagerGlobal.getInstance...,其实我们实际代码中很多方法都是使用了代理模式, 它的优点就是:持有代理对象,我只关心我需要的方法,很多方法用户并不知道,没有暴露出来。

    57910
    领券