摘要:
在前面一个系列的文章中,我们以窗口为单位,分析了WindowManagerService服务的实现。同时,在再前面一个系列的文章中,我们又分析了窗口的组成。简单来说,窗口就是由一系列的视图按照一定的布局组织起来的。实际上,每一个视图都是一个控件,这些控制可以将自己的UI绘制在窗口的绘图表面上,同时还可以与用户进行交互,即获得用户的键盘或者触摸屏输入。在本文中,我们就详细分析窗口控件的上述实现原理。 由于Android系统提供的控件比较多,因此我们只能挑一个比较有代表的控件进行分析。这个比较有代表性的控件便是TextView,其它的一些基础控件,例如Button、EditText和Chec... 阅读全文
摘要:
面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样的设计模式,而不重视面向对象的分析和设计。甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程。众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计。查看Apache和Sun的开放源代码能帮助你发现其他Java设计原则在这些代码中的实际运用。Java Develo 阅读全文
摘要:
安装完Eclipse和ADT插件,却发现无法更新SDK,显示为:Fetching https://dl-ssl.google.com/android/repository/addons_list-1.xmlFailed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-1.xml, reason: Connection to https://dl-ssl.google.com refusedFetched Add-ons List successfullyFetching URL: https://dl- 阅读全文
摘要:
1、首先查看手机的usb信息输入指令:lsusbBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 005 Device 001: ID 1d6b: 阅读全文
摘要:
声明:这章的内容可能会引用上章的有关例子,使用例子时会直接引用不再做过多描述,有不懂的地方请查阅之前的学习笔记。之前有构造一个雇员Employee类,实际公司雇员中还包含经理等一些其他特殊职位的雇员,他们的一些情况信息会有所不同。例如薪金的算法。假设雇员只有固定的基本薪金,而经理有相应的奖金制度。这样二者绝大多数情况一样仅存在少数的不同,若要为经理重新创建一个新类显然是不实际的。为了解决这样的问题就引入了本章的内容——继承。1、继承用关键字extends表示正在构造的新类派生于已存在的类,写法如下:public Manager extends Employee { //添加域和方法}已存在的. 阅读全文
摘要:
有时类或方法需要对类型变量加以约束。[java] view plaincopyclassArrayAlg{publicstatic<T>Tmin(T[]a){if(a==null||a.length==0)returnnull;Tsmallest=a[0];for(inti=1;i<a.length;i++)if(smallest.compareTo(a[i])>0)smallest=a[i];returnsmallest;}}问题:min方法内部的变量smallest类型为T,意味着它可以是任意类的对象。那么如何确定T所属的类有compareTo方法呢?解答:将T限制 阅读全文
摘要:
一个泛型类就是有一个或多个类型变量的类。一般的类和方法,只能使用具体的类型(基本类型或者自定义类型)。如果要编译应用于多种类型的代码就要引入泛型了。例12-1使用Pair类。静态方法minmax遍历数组同时计算出最小值和最大值。用一个Pair返回两个结果[java] view plaincopypackagecore.pair_12_1;publicclassPairTest1{publicstaticvoidmain(String[]args){String[]words={"Mary","had","a","little 阅读全文
摘要:
捕获异常必须设置try/catch语句块,最简单的try语句:[java] view plaincopytry{//code//morecode}catch(ExceptionTypee){//handlerforthistype}1、如果在try语句中的任何代码抛出了catch子句中说明的异常类:1)程序跳过try语句块的其余代码2)程序执行catch字句中的处理器代码2、如果try语句块中没有抛出任何异常类则跳过catch子句。3、如果方法中任何代码抛出了在catch子句中没有声明的异常类型,该方法会立即退出。[java] view plaincopypublicvoidread(Stri 阅读全文
摘要:
当程序出现异常时,应当次啊去一些异常处理措施:·返回到一种安全状态,并能够让用户执行一些其他命令;·允许用户保存所有操作结果,并以合适的方式终止程序。需要关注的异常问题:1、用户输入错误2、设备错误3、物理限制4、代码错误异常具有自己的语法和特定的继承结构,下面开始介绍:11.1.1异常分类所有已成都由Throwable继承而来,Throwable分为Error和Exception;Exception又分为RuntimeException和IOException。Error类描述Java运行是系统的内部错误和资源耗尽错误。这种情况很少出现RuntimeException是由 阅读全文
摘要:
内部类:定义在一个类中的类。为什么要用内部类:1)内部类可以访问其外围类的实例域,包括私有数据。2)内部类可以对同包中的其他类隐藏。3)定义一个回调函数,使用匿名内部类要便捷。6.4.1 使用内部类访问对象的状态实例:一个TimePrinter常规类,他需要通过TalkingClock类的共有方法访问beep标志。注释:TimePrinter类被声明为私有的,这样只有TalkingClock的方法才能生成TimePrinter对象。内部类可以是私有类,常规类只能是包可见性或公有可见性。例6-4源代码:[java] view plaincopypackagecom.corejava.innerc 阅读全文
摘要:
6.2 对象克隆,这节的内容实际开发中很少使用,所以略过。之后遇到相应的实例在去学习。6.3 接口与回调回调相当于一个监听器,特定事件或时间采取相应的动作。不做过多解释,直接进入实例。源代码:例6-3,程序给出了一个定时器和监听器的操作行为。定时器启动后弹出一个对话框,点击OK来终止程序。程序运行每隔3秒显示一次当前时间。注意:程序出了导入javax.swing.*和java.util.*外,通过类名导入javax.swing.Timer。这样消除了javax.swing.Timer与java.util.Timer之间的二义性。这里的java.util.Timer是一个与本例无关的类,它主要用 阅读全文
摘要:
1、接口不是类;只是对类的一组描述。一个类满足了这一描述就可以使用接口中所提供的方法。例如,Arrays类中的sort方法可以对对象数组进行排序,前提是要满足Comlarable接口。下面是Comparable接口的代码:public interface Comparable { int compareTo(Object other);}即所有实现Comparable接口的类都可以使用compareTo方法。2、接口中的所有方法都是public,所以声明方法时不需要使用public标识。3、接口中绝对不能含有实例域;也不能在接口中实现方法。实例域的提供和方法的实现是由实现接口的类完成的。可以. 阅读全文
摘要:
1、为了解决运行时动态更改数组的问题,使用ArrayList类;它与数组很相似,但在增加或删除元素时具有自动调节数组容量的功能。2、ArrayList是采用类型参数的泛型类。用法:ArrayList<Class Name>ArrayList<Employee> staff = new ArrayList<Employee>();3、使用add方法添加元素:staff.add(new Employee("Harry", ...));staff.add(new Employee("Tome", ....));如果调用add 阅读全文
摘要:
1、Object类是Java所有类的超类。如果没有明确指出一个类的超类,那么object就是这个类的超类,并且不需要显示的写出。2、Object类型的变量可以引用任何类型的对象:Object obj = new Employee("vincent", 100000);如果要对内容进行操作必须要类型转换:Employee e = (Employee)obj;3、在Java中只有基本数据类型(即数值,布尔值,字符)不是对象。所有的数组类型都是Object的扩展类。5.2.1 Equals方法1、判断两个对象是否有相同的引用。如果两个对象的状态相同,就认为二者相等。例如:两个雇员 阅读全文
摘要:
4.6.1 重载多个构造器或多个方法采用相同的名字唯一区别是每个构造器或方法指定的参数类型或参数个数不同。这种特征就叫做重载。4.6.2 默认域初始化在构造器中没有给域赋初值,则会自动被赋值:数值为0、布尔值为flase、引用值为null。4.6.3 默认构造器当且仅当类中没有提供任何一个构造器时,才会自动生成一个默认的构造器。4.6.4 显示域初始化1、在类定义中直接将一个值赋给任何域。例如:class Employee { .... private String name = "..."}这种方法适用于当一个类中所有构造器都希望把相同的值赋给某个特定实例域。2、初始值不 阅读全文