随笔分类 - 编程基础
摘要:什么是 xmlns xmlns是 XML Namespaces 的缩写,中文名称是 XML命名空间。 xmlns 使用规则 xmlns:namespace-prefix="namespaceURI"。 xmlns 在 Android 中的作用 命名空间的作用是什么呢?命名空间里约定了对应类的属性,通
阅读全文
摘要:有时需为视图属性指定大小尺寸值(通常以像素为单位,但有时也用点、毫米或英寸)。最常见的属性有:文字大小(Text Size),指设备上显示的文字像素高度;边距(Margin),指定视图组件间的距离;内边距(Padding),指定视图外边框与其内容间的距离。Android 使用 drawable-ld...
阅读全文
摘要:在 ListView 里,HeaderView 和 FooterView 也占一行,与其他的 item 一样,可以点击,有索引,HeaderView 的索引为0。如果要使这两项不可点击,可以使用下面的方法: public void addFooterView(View v, Object da...
阅读全文
摘要:在一些应用中,无法事先知道使用者将加载什么类,而必须让使用者指定类名称以加载类,可以使用 Class 的静态 forName() 方法实现动态加载类。下面的范例让你可以指定类名称来获得类的相关信息。package cn.sunzn.demo;public class ClassDemo { public static void main(String[] args) { try { Class c = Class.forName(args[0]); System.out.println("类名称:" + c.getName());...
阅读全文
摘要:package cn.sunzn.demo;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Demo { public static void main(String[] args) { System.out.println(isContainChinese("中国China")); } public static boolean isContainChinese(String str) { Pattern p = Pattern.compile(...
阅读全文
摘要:即使有一个类并对它一无所知,但其实它本身就包含了许多信息,Java 在需要使用到某个类时才会将类加载,并在 JVM 中以一个 java.lang.Class 的实例存在。从 Calss 实例开始,可以获得类的许多信息。Java 在真正需要使用一个类时才会加以加载,而不是在程序启动时就加载所有的类。因为大多数的使用者都只使用到应用程序的部分资源,在需要某些功能时才加载某些资源,可以让系统的资源运用更有效率(Java 本来就是为了资源有限的小型设备而设计的,这样的考虑是必然的)。一个 java.lang.Class 对象代表了 Java 应用程序在运行时所加载的类或接口实例,也用来表达 enum(
阅读全文
摘要:对于每一个基于相同类所产生的对象而言,它们会拥有各自的域成员,然而在某些时候,你会想要这些对象拥有共享的域成员。举个例子来说,在 Ball 类中,打算使用到圆周率 PI 这个数据,因为对于任何一个 Ball 的实例而言,圆周率都是相同的,你不需要让不同的 Ball 实例拥有各自的圆周率域成员。1.静态成员变量可以将 PI 域成员声明为 static,被声明为 static 的域成员又称静态域成员。静态域成员是属于类所有,而不是个别的对线。可以将静态成员视为每个对象实例所共享的域成员。要声明静态域成员,只要在声明域成员时加上 static 关键字即可。例如:public final class
阅读全文
摘要:final 关键字可以使用在变量声明时,表示该变量一单设定之后,就不可以再改变该变量的值。例如在下面的程序代码片段中,PI 这个变量一旦设定,就不可以再有指定值给 PI 的动作:final double PI = 3.14159;如果在定义方法成员时使用 final,则表示该方法成员再也无法被子类重写(Override)。例如:public class Ball { private double radius; public final double getRadius() { return radius; }}在继承 Ball 类后,由于 getRadius(...
阅读全文
摘要:如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。本文介绍的是Overload和Override的区别。Overload是重载的意思,Override是覆盖的意思,也就是重写。重载(Overload)表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数、类型或顺序不同)。重写(Override) 表示子类中的方法可以与父类中的某个方法的名称 和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子
阅读全文
摘要:线程的 4 个主要周期状态为创建线程、可执行(Runnable)、非可执行、终止(Dead)。当实例化一个 Thread 并执行 start() 之后,线程进入 Runnable 状态并开始执行 run() 方法。虽然线程看起来像是同时执行,但事实上在同一时间点上,还是只有一个线程在动作,只是线程之间切换的动作很快,所以看起来像是同时执行。线程尤其优先权,由 1 (Thread.MIN_PRIORITY)到 10 (Thread.MAX_PRIORITY),默认是 5 (Thread.NORM_PRIORITY)。可以使用 Thread 的 setPriority() 方法来设定线程的优先权,
阅读全文
摘要:一般有点开发经验的朋友都能实现这样的功能,只不过是效率上的问题。我们一般在面对这样的问题时,总会平铺直序的联想到,先生成一个数组,然后在一个循环中向数组中添加随机数字,在添加数字的过程中先查找一下数组中是否存在这个数字,如果不存在这个数字就直接添加到数组中;如果存在这个数字就不添 加。我们一般都是这样考虑问题的,这样考虑也能实现功能,我刚才也说了,只不过是效率上的问题。为了更好地理解这个题意,我们先来看下具体内容:生成一个1-100 的随机数组,但数组中的数字不能重复,即位置是随机的,但数组元素不能重复。在这里,没有给我们规定数组的长度,我们可以让它是1-100之间的任意长度。接下来让我们看一
阅读全文
摘要:package cn.sunzn.generic;/*** 泛型是提供给 javac 编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序的非法输入,编译器编译带类型说明的集合* 时会去除掉“类型”信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样。对* 于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其他类型的数据,例如,用反射得* 到集合,再调用起add方法即可。*/import java.util.ArrayList;public class GenericDemo { public sta..
阅读全文
摘要:算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。假设有一个数组 { 12, 23, 34, 45, 56, 67, 77, 89, 90 },现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -1。代码如下:package cn.sunzn.dichotomy;public class DichotomySearch {
阅读全文
摘要:为了便于理解先来看看没有加同步代码块的 2 组同样功能的代码在不同状态下的执行结果,下面看第一组:package cn.sunzn.synchronize;public class SynchronizeCode { public static void main(String[] args) { new Thread() { public void run() { while (true) { System.out.println("同步代码"); } ...
阅读全文
摘要:同步代码块比较经典的例子是火车站的售票员售票的过程,下面通过代码来分析同步代码块在这里面的作用。package cn.sunzn.synchronize;public class SynchronizeCode { public static void main(String[] args) { new TicketSeller().start(); new TicketSeller().start(); new TicketSeller().start(); new TicketSeller().start(); }}class Tic...
阅读全文
摘要:并发线程之间的死锁通常发生在同步代码块的相互嵌套使用的过程中,下面先来看段代码:package cn.sunzn.synchronize;public class DeadLock { public static void main(String[] args) { final Object lock1 = new Object(); final Object lock2 = new Object(); /** 线程 0 **/ new Thread() { public void run() { ...
阅读全文
摘要:实际编程中如果我们要使用系统中未暴露的方法,我们可以通过反射来使用这些方法,但在使用过程中我们很难确定方法对用的参数类型,以下的代码可以帮你得到这些信息:package cn.sunzn.reflectcase;import java.lang.reflect.Method;public class GetMethod { public static void main(String[] args) { getMethodInfo("java.util.HashSet"); } /** * 传入全类名获得对应类中所有方法名和参数名 */ @Suppres...
阅读全文
摘要:CyclicBarrier 是 java.util.concurrent.CyclicBarrier 下的一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环的 barrier。先来看 CyclicBarrier 的 APICyclicBarrier(int parties, Runnable barrierAction) : 创建一个新的 CyclicBarrier,它
阅读全文
摘要:什么是 JsonJSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据
阅读全文