- 博客(1035)
- 收藏
- 关注
Java学习笔记:要么为继承而设计,并提供文档说明,要么就禁止继承
一个专门为了继承而设计并且具有良好文档说明的类,意味着:该类的文档必须精确地描述了改写每一个方法所带来的影响 该类必须有文档说明其可改写的方法的自用性:对于每一个公有的或受保护的方法或者构造函数,它的文档必须指明它调用了哪些可改写的方法是以什么顺序调用,每个调用的结果是如何影响后续的处理过程的。 惯例是如果一个方法调用了可改写的方法,那么在它的文档注释的末尾应该包含关于这些调用的描述...
2012-04-25 09:43:00
229
Java学习笔记:复合优先于继承
继承是实现代码重用的有力手段,但它并非永远是完成这项工作的最佳工具。使用不当会导致软件变得很脆弱。在包的内部使用继承是非常安全的,在那里,子类和超类的实现都处在同一个程序员的控制之下。与方法调用不同的是,继承打破了封装性。换句话说,子类依赖于其超类中特定功能的实现细节。// Broken - Inappropriate use of inheritance!import java.ut...
2012-04-24 21:22:00
272
经典算法:斐波那契数列
/* 斐波那契的递归函数*/ing Fbi(int i) { if (i < 2) { return i == 0 ? 0 : 1; } return Fbi(i - 1) + Fbi(i - 2);}int main(void) { int i; for(int i = 0; i < 40; i++) { ...
2012-04-24 20:59:00
215
Android 程式开发:(十二)最基本的UI控件 —— 12.3ProgressBar
当执行某些正在处理的任务时,ProgressBar提供了一个可视化的反馈。例如,你在从web服务器下载数据,然后需要更新下载的状态。在这种情况下,ProgressBar就是一个很好的选择。下面的例子,展示如何去使用ProgressBar。1、创建一个工程,BasicViews2。2、main.xml中的代码。<?xml version="1.0" encoding="utf-...
2012-04-23 12:40:00
169
Android 程式开发:(十二)最基本的UI控件 —— 12.2Button,ImageButton,EditText,ChcekBox,ToggleButton,RadioButton...
除了最常用的TextView,Android还提供了一些其他的基本控件。ButtonImageButtonEditTextCheckBoxRadioGroup和RadioButtonToggleButton下面的例子,展示如何使用这些基本控件。1、创建一个工程:BasicViews。2、main.xml中的代码。<?xml version="1.0" en...
2012-04-23 12:21:00
138
Android 程式开发:(十二)最基本的UI控件 —— 12.1TextView
当你创建一个新的Android项目,Eclipse通常总是会创建main.xml文件,当中包含一个<TextView>元素。<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" andro...
2012-04-23 12:13:00
104
Android 程式开发:(十一)监听UI事件 —— 11.2为view注册监听
当用户与视图views进行交互的时候,views也会触发事件。举个例子,当用户点击了一个按钮,你需要为这个事件服务,只有这样,才能去执行某些适当的行为。如果想这么做的话,你就需要为视图views注册监听。使用上一节中的例子,在activity中有两个Button。我们可以使用一个匿名的类,为按钮设置点击事件。package net.learn2develop.UIActivity;im...
2012-04-22 22:00:00
120
Android 程式开发:(十一)监听UI事件 —— 11.1重写Activity中的方法
用户可以使用两种级别与你的UI进行交互,一种是activity级别,另一种是view级别。在activity级别,Activity类暴露了一些你可以重写的方法。有一些常用的方法,你可以在你的Activity中进行重写:onKeyDownonKeyUponMenuItemSelectedonMenuOpened下面的例子重写了一些在activity中的方法,通过这个例子展示用户如何...
2012-04-22 21:46:00
121
Android工作总结:恢复默认的任务栏面板
打开终端,输入以下命令:gconftool –recursive-unset /apps/panel这时会发现所有的面板都不现了,接着再输入下列命令:rm -rf ~/.gconf/apps/panel最后执行:pkill gnome-panel...
2012-04-22 16:53:00
119
Android工作总结:编码规范、git log规范
1.1 Git代码提交Comment规范Bug ID: Bugzilla上的BugID填在这行 G-HIBIKI ID: 将日方问处编号填在这行SR ID: 高通Case如果有的话将编号填在这行,没有的话为空Redmine Feature ID: 对应Redmine Feature IDABSTRACT: 简单描述本次提交概要Scratch or Copy [S/C]: 是...
2012-04-22 13:48:00
130
Java学习笔记:使可变性最小化
不可变类是实例不能被修改的类。每个实例中包含的所有信息都必须在创建该实例的时候就提供,并在对象的整个声明周期内固定不变。例如String、BigInteger和BigDecimal类。不可变类更易于设计、实现和使用。设计不可变类的原则:不要提供任何修改对象状态的方法保证类不会被扩展使所有域都是final的使所有的域都是私有的确保对于任何可变组件的互斥访问// Im...
2012-04-22 11:36:00
168
Java学习笔记:在公有类中使用访问方法而非公有域
如果类可以在它所在包的外部进行访问,就提供访问方法。如果类是包私有的,或者私有的嵌套类,直接暴露它的数据域并没有本质的错误。总之,公有类永远都不应该暴露可变的域。虽然还是有几个问题,但是让公有类暴露不可变的域,危害比较小。但是,有时候需要会用到包级私有的或者私有的嵌套类来暴露域,无论这个类是可变还是不可变。// Public class with exposed immutable...
2012-04-21 22:23:00
144
Android工作总结:禁止生成.odex文件
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_DEX_PREOPT := falseLOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-java-files-under, src) \ ../../../ex/carousel/java/com/a...
2012-04-21 17:39:00
711
Android工作总结:修改文件及文件夹的权限
常规用法如下:sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)sudo chmod 666 ××× (每个人都有读和写的权限)sudo chmod 777 ××× (每个人都有读和写以及执行的权限) 其中×...
2012-04-20 15:52:00
181
Java学习笔记:使类和成员的可访问性最小化
尽可能地使每个类或者成员不被外界访问。对于成员(域、方法、嵌套类和嵌套接口)有四种可能的访问级别,下面按照可访问性的递增顺序罗列出来:私有的(private)包级私有的(package-private)受保护的(protected)公有的(public)实例域决不能是公有的。类具有共有的静态finla舒祖域,或者返回这种域的访问方法,这几乎总是错误的。public ...
2012-04-19 21:42:00
159
Java学习笔记:考虑实现Comparable接口
为什么要实现Comparable接口? 实现了Comparable接口的类具有内在的排序关系,同时也可以和许多泛型算法和依赖于该接口的集合实现进行协助。如何实现Comparable接口? 和Item 8中关于实现equal方法类似,同样需要满足:传递性--x.compreTo(y) > 0 && y.compareTo(z) > 0 可以推出x.co...
2012-04-19 21:40:00
190
Android开发相关:定义圆角矩形
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#f0600000" /> <stroke
2012-04-18 22:23:00
99
Android 程式开发:(十)绘制用户界面 —— 10.1通过纯编码实现UI
到目前为止,在所有的章节中,我们所看见的UI都是通过XML来实现的。之前也提及过,除了使用XML,也可以使用代码来实现UI界面。这个方式是很有用的,比如你的UI需要在运行时被生成。举个例子,假设你在编写一个“电影票的预定系统”,你的程序使用按钮Buttons去显示每个电影院的座位。在这种情况下,你就会需要依据实际情况去动态地生成UI。下面的例子将会展示如何通过编码,动态地在Activity中生...
2012-04-18 21:53:00
239
Android工作总结:adb常用命令
adb使用方法:adb [-d|-e|-s <serialNumber>] <command>1. 显示系统中全部Android平台: android list targets2. 显示系统中全部AVD(模拟器): android list avd3. 创建AVD(模拟器): android create avd --name...
2012-04-18 11:30:00
126
Windows Phone 7还有戏吗?
无意中看到博客频道4月技术图书有奖试读活动的页面,里面有本书叫《深入浅出Windows Phone7应用开发》,当然引起我注意的是Windows Phone7(以下简称WP7),至于深入浅出之类,这是计算机图书的惯用字眼,类似的还有开发指南、快速入门等等,相信大家对此早已麻木不仁、不以为然了。之所以被WP7所吸引,是因为在不久的从前,曾经想过要好好学一下它,印象中,这个想法在去年底的时候还十分的...
2012-04-18 01:15:00
87
关于“工作没有挑战性”
今天中午,左耳朵耗子在微博中提到“面试过一些应聘者,当我问到为什么换工作的时候,他们都会告诉我,现在的工作没有挑战,无聊,所以想换一个有挑战的工作。我总是为有这样的认识的朋友感到惋惜,因为我总是认为有挑战的东西无处不在啊,不能因为工作上没有,自己就放纵了自己。”看了这篇微博,顿时想为这位面试者打抱不平。为什么一提到工作没有挑战性,就要把这个人在放纵自己划上等号呢?工作是否有挑战性,这是客观因素;...
2012-04-17 23:48:00
308
page_clientValidate也分组
记得最开始的asp.net验证控件,是没有分组的,在使用时常常觉得不太方便,因为页面中常常会有不同的按钮,对应着不同的控件。后来,记不清是2还是3,就增加了分组验证功能,这下就好用多了,不必再费力去写那些难缠的js,挺好。但js总是少不了的,就像生活需要一点色彩一样,这时就会出现校验控件与js配合的问题。比如,我想给一个按钮注册一段脚本,如果对应组通过校验,则显示提示信息,同时隐藏按钮,以免用户...
2012-04-17 00:21:00
110
Android 程式开发:(九)使用活动栏 —— 9.3自定义ActionBar项目和程序图标
在上一节中,菜单选项是没有文字的。如果想要同时显示图标和文字,可以一起使用“|”和MenuItem.SHOW_AS_ACTION_WITH_TEXT常量。 MenuItem mnu1 = menu.add(0, 0, 0, "Item 1"); { mnu1.setIcon(R.drawable.ic_launcher...
2012-04-16 21:21:00
117
Android 程式开发:(九)使用活动栏 —— 9.2添加ActionBar项目
除了在ActionBar的左侧显示应用图标和Activity的标题,也可以在ActionBar上面显示额外的项目。这些被添加的项目被叫做“action items”。这些项目就是一些在你应用中一些功能的快捷方式。举个例子,你正在开发一块RSS阅读器,那么action items就可能是“刷新”、“删除”和“添加”。下面的例子演示如何在ActionBar中添加项目。1、使用上一节的项目,在M...
2012-04-16 20:56:00
93
Android 程式开发:(九)使用活动栏 —— 9.1隐藏或显示ActionBar
除了fragments(碎片),在Android3和4中新增加的特性,还有ActionBar(活动栏)。ActionBar位于传统标题栏的位置,就在设备屏幕的顶部。ActionBar显示了应用的图标和Activity的标题。可选择地,ActionBar的右侧是那些action items(活动项目)。下图展示了build-in(内置的)Email应用,显示了应用的图标,Activity(活动)的标...
2012-04-15 09:58:00
132
Android 程式开发:(八)处理屏幕方向的变化 —— 8.4控制Activity的显示方向
偶尔地,你可能想要确保你的应用程序在某一个确定的方向上面显示,横屏模式或竖屏模式。例如,你可能会开发一款只在横屏模式下面运行的游戏。在这种情况下,可以通过编写代码,强制把Activity的方向设置为横向,这需要使用Activity类的setRequestOrientation()方法。 import android.content.pm.ActivityInfo; @Overr...
2012-04-13 21:06:00
56
Android 程式开发:(八)处理屏幕方向的变化 —— 8.3检测手机屏幕的方向
有的时候,可能需要在运行时了解当前手机屏幕的方向。可以使用WindowManager类去实现这个功能。下面的代码将展示如何通过编写代码去检测设备的屏幕方向:@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC...
2012-04-12 22:24:00
105
Android 程式开发:(八)处理屏幕方向的变化 —— 8.2在“变化”中保存状态信息...
目前为止,我们已经了解到了,当改变屏幕方向的时候,activity将会被销毁,随后被重建。请记住一点,当activity被重建之后,它的当前信息可能消失。当一个activity被kill掉,将会调以下方法中的一个或着两个:onPause() —— 当一个activity被kill掉或被转入后台的时候,这个方法总是被调用。onSaveInstanceState() —— 当一个activ...
2012-04-12 22:16:00
59
Java学习笔记:谨慎地覆盖clone
1、clone方法的通用约定是非常弱的 x.clone()!=x x.clone().getClass()==x.getClass() x.clone().equals(x) 都不是绝对的要求2、Clone方法就是另一个构造器,你必须保证它不会伤害到原始的对象,并确保正确地创建被克隆对象中的约束条件。3、clone架构与应用可变对象的final域的正常用法是不兼容的。4...
2012-04-12 12:37:00
92
固定GridView表头方法的选择
对于用户提出的要求,不管多么艰难,程序员总是会想千方设百计地去满足。比如,GridView绑定数据非常方便,大家都喜欢用它,但当数据量大的时候,用户在查看时就会觉得不方便,因为分不清是哪列数据,一般做这项工作的人都有Excel的使用经验,知道可以把某些行固定下来,于是就会提出能不能也弄成那样?这下可难倒了程序员,web上要实现个东西还真要费些功夫。倒不是说技术上有多困难,主要还是因为浏览器太多,...
2012-04-11 22:58:00
160
Android工作总结:eclipse快捷键
作用域功能快捷键全局查找并替换Ctrl+F文本编辑器查找上一个Ctrl+Shift+K文本编辑器查找下一个Ctrl+K文本编辑器删除当前行Ctrl+D文本编辑器当前行的下一行插入空行Shift+Enter文本编辑器当前行插入空行Ctrl+Shift+Enter文本编辑器定位到最后...
2012-04-11 11:48:00
57
Java学习笔记:始终要覆盖toString
与equals和hashCode不同的是,该条目推荐应该始终覆盖该方法,以便在输出时可以得到更明确、更有意义的文字信息和表达格式。这样在我们输出调试信息和日志信息时,能够更快速的定位出现的异常或错误。如上一个条目中PhoneNumber的例子,如果不覆盖该方法,就会输出PhoneNumber@163b91 这样的不可读信息,因此也不会给我们诊断问题带来更多的帮助。以下代码重载了该方法,那么在我们调...
2012-04-11 09:49:00
96
Java学习笔记:覆盖equals时总要覆盖hashCode
每个覆盖了equals方法的类中,也必须覆盖hashCode方法。如果不这样的话,就会违反Object.hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运作,这样的集合包括HashMap、HashSet和Hashtable。在引用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法都必须始...
2012-04-11 09:34:00
90
Android 程式开发:(八)处理屏幕方向的变化 —— 8.1Activity状态的改变
目前看来,我们已经看到了,可以使用两种方法去适应屏幕方向的改变。现在,让我们看以下,当屏幕方向改变的时候,Activity状态的改变。1、创建一个工程:Orientations。2、main.xml文件。<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schema...
2012-04-10 21:10:00
60
Android开发相关:系统预制的应用程序
public class IntentsUtils { public static void invokeBasicActivity(Activity activity) { String actionName= "com.androidbook.intent.action.ShowBasicView"; Intent intent = new Intent(action...
2012-04-10 12:46:00
145
Android开发相关:dp与px转换
px:像素。in:英寸。mm:毫米。pt:磅。dp:与密度无关的像素,基于160dpi(每英寸的像素数)屏幕(尺寸适应屏幕密度)。sp:与比例无关的像素(这种尺寸支持用户调整大小,适合在字体中使用)。/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */public static int dip2px(Context context, float dp...
2012-04-10 12:42:00
67
Android 程式开发:(七)适应屏幕的方向 —— 7.3重新调整尺寸和位置
如果想根据屏幕的方向自定义UI,除了把views锚定在屏幕的四周(上一节讲过"锚定"视图),更简单的办法就是创建一个独立的res/layout文件夹,它包含了不同屏幕方向下的UI布局。如果想要支持landscape横屏模式,那么就可以在res文件夹下面创建一个layout-land文件夹(land代表landscape)。示例图:基本上,在layout文件夹下面的main.xml定义了...
2012-04-09 20:39:00
67
Android工作总结:git常用命令
git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r 查看本地所有分支git commit -am "init" 提交并且加注释 git remote add origin git@192.168.1.119:ndshowgit push origin ...
2012-04-09 17:03:00
72
Android工作总结:系统环境配置
操作系统:请安装64位Ubuntu 10.10,编译环境请不要安装高于10.10的系统,否则编译有问题,也请最好不要使用自动更新功能,以防更新造成编译问题。DNS配置:请一定要使用公司内部DNS(192.168.x.x)或者在自己机器的/etc/hosts文件中加入一行解析:192.168.9.142 code.xxxx.com 否则,会因为外部DNS把code.xxxx.co...
2012-04-09 16:40:00
96
Java学习笔记:覆盖equals时请遵守通用约定
不覆盖equals的情况1)类的每个实例本质上是唯一的;2)不关心类是否提供了“逻辑想等”的测试功能;3)超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的;4)类是私有的或包级私有的,可以确定他的equals方法永远不会被调用。<wbr></wbr>应该覆盖equals的情况如果类具有自己特有的“逻辑想等”概念,而且超类还没...
2012-04-09 13:05:00
87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人