摘要: 1.定义内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为static,可用public、protected、private修饰。(而外部类不可以:外部类只能使用publi和default)。2.分类在一个类(外部类)中直接定义的内部类(成员内部类)、局部内部类、静态内部类、匿名内部类。3.使用方法A. 在一个类中直接定义的内部类1) 外部类不能直接访问内部类的的成员,但可以通过内部类对象来访问。2) 内部类作为外部类的成员,可以访问外部类的所有成员。3) 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为 阅读全文
posted @ 2012-05-13 17:17 精灵博客园 阅读(537) 评论(0) 推荐(0)
摘要: Java中内存分析: 栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。 堆(heap):存放所有new出来的对象。 常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float、int等)。另外,可以存储不经常改变的东西(public static final)。常量池中的数据可以共享。 静态存储:存放静态成员(static定义的)。 1) String a = "abc";① String b = & 阅读全文
posted @ 2012-05-13 17:16 精灵博客园 阅读(198) 评论(0) 推荐(0)
摘要: 1.概念: 运行时,对任意类,都能知道这个类的所有属性和方法;对任意一对象,都能够调用它的每个方法和属性;这种动态获取、动态调用的功能称为Java语言的反射机制。2.实现 Java反射相关的API在包java.lang.reflect中Member接口该接口可以获取有关类成员(域或者方法)后者构造函数的信息。AccessibleObject类该类是域(field)对象、方法(method)对象、构造函数(constructor)对象的基础类。它提供了将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。Array类该类提供动态地生成和访问JAVA数组的方法。Construct. 阅读全文
posted @ 2012-05-13 17:15 精灵博客园 阅读(184) 评论(0) 推荐(0)
摘要: 案例:package com.devin;public class MyMain { public static void main(String args[]) { Father f = new Son(); }}class Father { public Father() { System.out.println("Father Construct"); } static int a=printFahter(); static int printFahter() { System.out.prin... 阅读全文
posted @ 2012-05-13 17:15 精灵博客园 阅读(258) 评论(0) 推荐(0)
摘要: 1.概念 泛型就是参数化类型。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。2.案例1)先看下面案例//不适用泛型编程Apple app0=new Apple();Apple app1=new Apple(); List li = new ArrayList();li.add(app0); //添加非需要类型时发现不了错误。li.add(app1); Apple appUsed=(Apple)li.get(0); //使用泛型编程如下Apple app0=new Apple();Apple app1=new Apple(); Lis... 阅读全文
posted @ 2012-05-13 17:13 精灵博客园 阅读(174) 评论(0) 推荐(0)
摘要: 1. JAVA调用系统命令或可执行程序// String cmd = "F:\\apache-tomcat-6.0.20.exe"; // String cmd = "D:\\Program Files\\Microsoft Office\\OFFICE11\\WINWORD.EXE F:\\test.doc"; // String cmd = "cmd.exe /c start F:\\test.doc"; String cmd = "ping www.baidu.com"; Runtime run = Runt 阅读全文
posted @ 2012-05-13 17:12 精灵博客园 阅读(264) 评论(0) 推荐(0)
摘要: Java内部类其实在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理。其实,做非GUI编程,内部类完全可以不用。内部类的声明、访问控制等于外部类有所不同,要灵活使用内部类来编写程序,还是有相当难度的,Java发明了这种难懂的玩意儿,在其他语言中是没有的,但是在Java中,内部类也相当的重要,尤其做GUI开发时候,事件的响应处理全靠内部类了。内部类所做的功能使用外部类也同样可以实现,只是有时候内部类做的更巧妙些。内部类按照其所在位置不同,可分为以下几种:1、(普通的)内部类(最常见的内部类,内部类的定义与类成员平级,)2、方法内部类3、匿名类4、静态内部类5、接口内部类一 阅读全文
posted @ 2012-05-13 17:11 精灵博客园 阅读(193) 评论(0) 推荐(0)
摘要: 案例:package com.devin;public class MyMain{ private static String name = "woobo"; private String num = "X001"; // 静态内部类可以用public,protected,private修饰 static class Person { // 静态内部类中可以定义静态或者非静态的成员 private String address = "China"; private static String x = "as"; . 阅读全文
posted @ 2012-05-13 17:10 精灵博客园 阅读(268) 评论(0) 推荐(0)
摘要: Java 中一共有 4 种类型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference ,这 4 种类型的引用与 GC 有着密切的关系, 让我们逐一来看它们的定义和使用场景 : 1. Strong Reference StrongReference 是 Java 的默认引用实现, 它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时 GC 执行后将会被回收Java代码 @TestpublicvoidstrongReference(){Objectreferent=newObject();/*... 阅读全文
posted @ 2012-05-13 17:09 精灵博客园 阅读(189) 评论(0) 推荐(0)
摘要: 案例一 下面使用java回调函数来实现一个测试函数运行时间的工具类:如果我们要测试一个类的方法的执行时间,通常我们会这样做:publicclassTestObject{/***一个用来被测试的方法,进行了一个比较耗时的循环*/publicstaticvoidtestMethod(){for(inti=0;i<100000000;i++){}}/***一个简单的测试方法执行时间的方法*/publicvoidtestTime(){longbegin=System.currentTimeMillis();//测试起始时间testMethod();//测试方法longend=System.cur 阅读全文
posted @ 2012-05-13 17:08 精灵博客园 阅读(255) 评论(0) 推荐(0)
摘要: 如果某些操作不依赖具体实例,那它就是静态的,反之如果某些操作是依赖具体实例的(例如访问一个特定会员的名称),那它就应该是实例化的。静态方法不用new对象可以直接调用1.与类相关与对象无关2.不需要对象的“轻”方法3.工厂方法如果某个方法是用频率较高,或者方法本身通用性较强,无需初始化类成员变量,则可以使用静态方法,那样方便,速度也快.可以直接拿来就用的方法,就算是静态的.肯定不涉及具体对象,因为静态方法内,是无法直接使用任何非静态成员的。(1)制作工具类(2)可以当作"作局"对象或方法来使用静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。静态方法不用创建实例就可 阅读全文
posted @ 2012-05-13 17:08 精灵博客园 阅读(136) 评论(0) 推荐(0)
摘要: import java.util.regex.Matcher; import java.util.regex.Pattern; /** * <p> * Title: HTML相关的正则表达式工具类 * </p> * <p> * Description: 包括过滤HTML标记,转换HTML标记,替换特定HTML标记 * </p> * <p> * Copyright: Copyright (c) 2006 * </p> * * @author hejian * @version 1.0 * @createtime 2006-1 阅读全文
posted @ 2012-05-13 17:07 精灵博客园 阅读(193) 评论(0) 推荐(0)
摘要: 1. 概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点。2. UML图:3.代码:(1)懒汉模式:只有在自身需要的时候才会创建。运行时获得对象,它在整个应用的生命周期只有一部分时间在占用资源。 ?public class Singleton { private static Singleton singletonInstance; private Singleton() { } public static synchronized Singleton GetInstance() { if (singletonInstance == null) ... 阅读全文
posted @ 2012-05-13 17:06 精灵博客园 阅读(172) 评论(0) 推荐(0)
摘要: 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。 即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)。“一对一”的关系。 抽象工厂:多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体工厂类可创建多个具体产品类的实例。 即提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体的类。“一对多”的关系。2. UML工厂方法:抽象工厂:3. 代码工厂方法:public interface Product{ }... 阅读全文
posted @ 2012-05-13 17:06 精灵博客园 阅读(248) 评论(0) 推荐(0)
摘要: 1.概念:将一个接口转换成客户希望的另外一个接口。(该模式使得原本不兼容的类可以一起工作)2.UML图(1)对象的Adapter模式结构图(2)类的Adapter模式结构图3.代码(1)对象适配器?public interface Target { public void Request(); } public class Adaptee { public void SpecificRequest() { System.out.println("这是原始标准接口!"); } } public class Adapter implements Target { private 阅读全文
posted @ 2012-05-13 17:05 精灵博客园 阅读(236) 评论(0) 推荐(0)
摘要: 1.继承抽象类用泛化(Generalization)2.实现接口用实现(Realization)3. 依赖,一个类中的方法或功能必须依靠另一一个类的方法来完成,即一个类的变化会引起另一个类的变化。 关联, 一个类中,知道并可以使用另一个类的可访问元素,常见形式为一个类以属性的形式出现在另一类中。例如:http://www.cnblogs.com/millen/archive/2009/02/23/1396414.html 阅读全文
posted @ 2012-05-13 17:05 精灵博客园 阅读(168) 评论(0) 推荐(0)
摘要: 1.概念为其他对象提供一种代理以控制对这个对象的访问。2.UML图:3.代码:?//抽象角色: public abstract class Subject { abstract public void request(); } //真实角色:实现了Subject的request()方法。 public class RealSubject extends Subject { public void request() { System.out.println("From real subject."); } } //代理角色: public class ProxySubjec 阅读全文
posted @ 2012-05-13 17:04 精灵博客园 阅读(160) 评论(0) 推荐(0)
摘要: 1. 概念:定义一个算法的骨架,而将一些实现步骤延迟到子类中。 把不变的行为搬到超类,去除子类中重复的代码来体现他的优势。2. UML图:3.代码:?public abstract class Templete { private void beforeOperation() { System.out.println("This acton before the operation!"); } private void afterOperation() { System.out.println("This acton after the operation!&qu 阅读全文
posted @ 2012-05-13 17:04 精灵博客园 阅读(220) 评论(0) 推荐(0)
摘要: 1. 概念动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。[由于继承的静态特质使其缺乏灵活性;且随着子类的增多、组合,会导致更多子类的膨胀。类应设计的对扩展开放,对修改关闭。装饰的意思:就是包装一下。把另的对象包装一下。]2. UML图3.代码/************业务接口 Component************/ public interface Component { void operation(); }/************业务接口 Component*******... 阅读全文
posted @ 2012-05-13 17:03 精灵博客园 阅读(198) 评论(0) 推荐(0)
摘要: 1.概念 定义一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。2.UML图3.代码interface Subject { public void attach(Observer observer); public void detach(Observer observer); void notifyObservers(); } public class ConcreteSubject implements Subject{ private Vector observersVector = new Vector(); pub... 阅读全文
posted @ 2012-05-13 17:03 精灵博客园 阅读(190) 评论(0) 推荐(0)
摘要: 简单地说,就好象我要一座房子住,可是我不知道怎么盖(简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较高), 于是我需要找一帮民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干活,光是下命令,这里砌一堵墙,这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟民工要,记住了! 就象国内好多企业上erp一样,上erp,首先得找软件公司呀,找到软件公司后,软件公司说,我只知道怎么写软件,就知道怎么实现,不清楚整个erp的流程。好,那我们还... 阅读全文
posted @ 2012-05-13 17:02 精灵博客园 阅读(179) 评论(0) 推荐(0)
摘要: 1.概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。 举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术),.. 阅读全文
posted @ 2012-05-13 17:02 精灵博客园 阅读(275) 评论(0) 推荐(0)
摘要: 1.概念 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。 在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。Command模式可应用于a)整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。b)调用前后需要对调用参数进行某些处理。c)调用前后.. 阅读全文
posted @ 2012-05-13 17:01 精灵博客园 阅读(273) 评论(0) 推荐(0)
摘要: 1.概念为子系统中的一组接口提供一个统一接口。Facade模式定义了一个高层接口,这个接口使得这子系统更容易使用。2.UML3.代码下面是一个具体案例的代码:package facade; class DrawerOne { public void open(){ System.out.println("第一个抽屉被打开了"); getKey(); } public void getKey(){ System.out.println("得到第二个抽屉的钥匙"); } } class DrawerTwo... 阅读全文
posted @ 2012-05-13 17:01 精灵博客园 阅读(180) 评论(0) 推荐(0)
摘要: MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器。一个逻辑模型可以对于多种视图模型,比如一批统计数据你可以分别用柱状图、饼图来表示。一种视图模型也可以对于多种逻辑模型。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,而C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,这与《设计模式》中的观察者模式是完全一样。 MVC好处:从用户的角度出发,用户可以根据自己的需求,选择自己合适的浏览数据的方式。比如说,对于一篇在线文档,用户可以选择以HTML网页的方式阅读,也可以选择以pdf的方式阅读。从开发者的. 阅读全文
posted @ 2012-05-13 17:00 精灵博客园 阅读(168) 评论(0) 推荐(0)
摘要: 直接看代码了:interface Fruit{ public void grow(); public void eat(); } class Apple implements Fruit{ public void grow(){ System.out.println("苹果在生长..."); } public void eat(){ System.out.println("吃苹果..."); ... 阅读全文
posted @ 2012-05-13 16:57 精灵博客园 阅读(192) 评论(0) 推荐(0)
摘要: 1.成为Android高手一般分为六个阶段: 第一阶段:熟练掌握Java SE,尤其是对其内部类、线程、并发、网络编程等需要深入研究;熟练掌握基于HTTP协议的编程,清楚POST和GET等请求方式流程和细节;能够进行基本的Java Web编程,如果能够使用Java EE则更好; 第二阶段:精通Android的核心API的使用,例如四大组件所涉及的API、Context等,精通核心界面的编程,例如ListView的编程;到达这个阶段已经能够做大部分基本的应用开发了; 第三阶段:精通应用框架的原理,尤其是对IoC的理解及其在Android应用框架中的应用,精通基本的23种设计模式在Android中 阅读全文
posted @ 2012-05-13 16:57 精灵博客园 阅读(186) 评论(0) 推荐(0)
摘要: 一、单一职责原则(SingleResponsibilityPrinciple) 定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。 解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。 说到单一职责原则,很多人都会不屑一顾。因为它太简单了。稍有经验的程序员即使从来没有读过... 阅读全文
posted @ 2012-05-13 16:56 精灵博客园 阅读(170) 评论(0) 推荐(0)
摘要: 大家好!我是陈彧堃,其实HTML5我之前也做过一些相关的研究,包括现在我们也在做一些调研。我个人一年前在G3上利用HTML5开发一些东西的时候,我发现原生的对HTML不支持,开始踏踏实实做Android原生代码开发。目前来说在将来一到两年内HTML5的东西会慢慢侵蚀原生程序,我讲的是现在进行时,现在来说Android开发还是占绝对主导地位。所以今天来看一下Android研发的优化。 我想做一个小调研,有多少人知道友盟?谢谢!感觉不是很多。简单介绍一下我们是一个面向中国移动开发者的服务平台,我们最核心、推出最久的功能是一个统计平台,提供SDK,支持全平台,服务了八千以上的移动厂商,包括了超... 阅读全文
posted @ 2012-05-13 16:55 精灵博客园 阅读(248) 评论(0) 推荐(0)
摘要: 对象池使用的基本思路是:将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用,从而在一定程度上减少频繁创建对象所造成的开销。并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销。对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大于“生成新对象的开销”,从而使性能降低的情况。但是对于生成时开销可观的对象,池化技术就是提高性能的有效策略了。下面是构建对象池的一个例子:public class ObjectPool { private int numObjects = 10; // 对象池的大小 private int ma... 阅读全文
posted @ 2012-05-13 16:54 精灵博客园 阅读(244) 评论(0) 推荐(0)
摘要: 单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数。对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加一个标记,标记该实例是否被占用。当类初始化的时候,这个对象池就被初始化了,实例就被创建出来。然后,用户可以向这个类索取实例,如果池中所有的实例都已经被占用了,那么抛出异常。用户用完以后,还要把实例“还”回来,即释放占用。 对象池类的成员应该都是静态的。用户也不应该能访问池子里装着的对象的构造函数,以防用户绕开对象池创建实例。 书上说这个模式会用在数据库连接的管理上。比如,每个用户的连接数... 阅读全文
posted @ 2012-05-13 16:54 精灵博客园 阅读(478) 评论(0) 推荐(0)
摘要: 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。当T1 + T3 远大于 T2时,采用多线程技术可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 线程池就是一个线程的容器,每次只执行额定数量的线程, 线程池作用就是限制系统中执行线程的数量。采用线程池不仅调整T1,T3产生的时间段,而且它还显著减少了创建线程的数目。 为什么要用线程池: 1)减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务 2)可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(每个线. 阅读全文
posted @ 2012-05-13 16:53 精灵博客园 阅读(192) 评论(0) 推荐(0)
摘要: public class SortTest { public int[] createArray() { Random random = new Random(); int[] array = new int[10]; for (int i = 0; i < 10; i++) { array[i] = random.nextInt(100) - random.nextInt(100);//生成两个随机数相减,保证生成的数中有负数 } ... 阅读全文
posted @ 2012-05-13 16:52 精灵博客园 阅读(193) 评论(0) 推荐(0)
摘要: 问题: 一头母羊的寿命是5年,它会在第2年底和第4年底各生下一头母羊,第5年底死去,问一开始农场有1头母羊,N年后,农场会有多少只母羊?解析1) 这道题不用刻意的去注意它的逻辑,也不用伤脑筋的去挖掘它暗藏着什么公式,只要按人的正常生活和自然规律理解一下就行了。 首先虚拟一只母羊,这只母羊只有一个属性,就是年龄:class Sheep { public int age = 0; // 默认一只新羊的年龄为0} 然后这个人有一个计数器,来计算N年后牧场羊的个数。这个计数器的工作原理是:以年为单位开始计算,每经过一年,循环牧场所有的羊: (1)使羊的年龄加1, (2)如果母羊今天2... 阅读全文
posted @ 2012-05-13 16:51 精灵博客园 阅读(412) 评论(0) 推荐(0)
摘要: 搜索引擎中用的是中文和和英文作为关键字,为了达到快速搜索的目的,常常需要排序,下面就说书如何对中英文字符串进行排序。 中文字符串按首字拼音排序import net.sourceforge.pinyin4j.PinyinHelper; public class PinyinComparator implements Comparator { private String concatPinyinStringArray(String[] pinyinArray) { StringBuffer pinyinStrBuf = new Str... 阅读全文
posted @ 2012-05-13 16:51 精灵博客园 阅读(345) 评论(0) 推荐(0)
摘要: 1.集合类类图Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└Set ├HashSet ├TreeSet ├LinkedHashSetMap├Hashtable├HashMap├WeakHashMap└SortedMap └TreeMap2.分类介绍 Collection是最基本的集合接口,JDK提供的类都继承自Collection的“子接口”,如List和Set。所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数和有一个Collection参数的构造函数。前者用于创建一个空的Collection.. 阅读全文
posted @ 2012-05-13 16:50 精灵博客园 阅读(210) 评论(0) 推荐(0)
摘要: 1. HashMap1) hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示: 当我们往hashmap中put元素的时候,先根据key的hash值得到这个元素在数组中的位置(即下标),然后就可以把这个元素放到对应的位置中了。如果这个元素所在的位子上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。2)使用Map map = new HashMap();map.put("Rajib Sarma","100");map.put("Rajib S 阅读全文
posted @ 2012-05-13 16:50 精灵博客园 阅读(183) 评论(0) 推荐(0)
摘要: 基于Java HashMap的泛型编程,常用的代码形式如下(开发中遇到的一个Case): //HashMap的创建和值添加 HashMap<String, String> hashMap = new HashMap<String, String>(); hashMap.put("appName", "IPAD APP"); hashMap.put("appVer", "2.0"); hashMap.put("cmd","CV_Services.GetIndust 阅读全文
posted @ 2012-05-13 16:49 精灵博客园 阅读(194) 评论(0) 推荐(0)
摘要: currenHashMap是jkd1.5引入的,其特点是:效率比Hashtable高,并发性比HashMap好。结合了两者的特点。 ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。 ConcurrentHashMap为了提高本身的并发能力,在内部采用了一个叫做Segment的结构,一个Segment其实就是一个类H... 阅读全文
posted @ 2012-05-13 16:49 精灵博客园 阅读(275) 评论(0) 推荐(0)
摘要: 1.安全通信介绍 计算机安全通信过程中,常使用消息摘要和消息验证码来保证传输的数据未曾被第三方修改。 消息摘要是对原始数据按照一定算法进行计算得到的结果,它主要检测原始数据是否被修改过。消息摘要与加密不同,加密是对原始数据进行变换,可以从变换后的数据中获得原始数据,而消息摘要是从原始数据中获得一部分信息,它比原始数据少得多,因此消息摘要可以看作是原始数据的指纹。 例:下面一段程序计算一段字符串的消息摘要package com.messagedigest;import java.security.*;public class DigestPass { public static voi... 阅读全文
posted @ 2012-05-13 16:46 精灵博客园 阅读(273) 评论(0) 推荐(0)
摘要: 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。 2)HTTPS和HTTP的区别 a. https协议需要到ca申请证书,一般免费证书很少,需要交费。 b. http是超文本传输协议,信息是明文传输;https 则是具有.. 阅读全文
posted @ 2012-05-13 16:44 精灵博客园 阅读(315) 评论(0) 推荐(0)
摘要: 通常情况下,游戏开发的基本框架中,一般包括以下模块: 窗口管理(Window management):该模块负责在Android平台上创建、运行、暂停、恢复游戏界面等功能。 输入模块(Input):该模块和视窗管理模块是密切相关的,用来监测追踪用户的输入(比如触摸事件、按键事件、加速计事件等)。 文件输入输出(File I/O):此模块用来读取assets文件下图片、音频等资源。 图像模块(Graphics):在实际游戏开发中,这个模块或许是最复杂的部分。它负责加载图片并把它们绘制到屏幕上。 音频模块(Audio):这个模块负责在不同的游戏界面加载音各类频。 网络(networ... 阅读全文
posted @ 2012-05-13 16:43 精灵博客园 阅读(233) 评论(0) 推荐(0)
摘要: 4.音频模块(Audio) 音频模块编程从来都是一个复杂的话题。这里不打算用到一些高级复杂的音频处理手段,主要是播放一些背景音乐。在书写代码前,让我们了解一下音频的基础知识。 采样率:定义了每秒从连续信号中提取并组成离散信号的采样个数,采样率越高音质越好,单位用赫兹(Hz)来表示,CD一般是44.1KHz。对于每个采样系统会分配一定存储位(bit数)来表达声波的声波振幅状态,称之为采样分辨率或采样精度,每增加1个bit,表达声波振幅的状态数就翻一翻,并且增加6db的动态范围态,1个2bit的数码音频系统表达千种状态,即12db的动态范围,以此类推。如16bit能够表达65536种状态,24.. 阅读全文
posted @ 2012-05-13 16:42 精灵博客园 阅读(219) 评论(0) 推荐(0)
摘要: 5. 图像模块(Graphics) 最后一个模块是图像操作模块,用来绘制图像到屏幕上。不过要想高性能的绘制图像,就不得不了解一些基本的图像编程知识。让我们从绘制2D图像开始,首先要了解的一个问题是:图像究竟是如何绘制到屏幕的?答案相当复杂,我们不需要知道所有的细节。光栅、像素和帧缓冲(Framebuffers) 现在的显示器都是基于光栅的,光栅是一个两维度的格子组成,也就是像素格。光栅格子的长宽,我们一般用像素来表示。如果仔细观察显示器(或者用放大镜),我们就可以发现显示器上面有一个一个的格子,这就是像素格或者光栅格。每个像素的位置可以用坐标表示,于是引入了二维坐标系统,这也意味着坐标值是.. 阅读全文
posted @ 2012-05-13 16:41 精灵博客园 阅读(242) 评论(0) 推荐(0)
摘要: 6.游戏框架 所有的基础工作做完后,我们最后来探讨一下游戏框架本身。我们看下为了运行我们的游戏,还需要什么样的工作要做:游戏被分为不同的屏幕(screen),每个屏幕执行着相同的任务:判断用户输入,根据输入渲染屏幕。一些节目或许不需要任何用户输入,但会过段时间后切换到下一屏幕.(如Splash界面)屏幕需要以某种方法被管理(如我们需要跟踪当前的屏幕并且能随时切换的下一屏幕)游戏需要允许屏幕访问不同的模块(比如图像模块、音频模块、输入模块等),这样屏幕才能加载资源,获取用户输入,播放声音,渲染缓冲区等。因为我们的游戏是实时游戏,我们需要当前的屏幕快速的更新。我们因此需要一个主循环来实现。主循环. 阅读全文
posted @ 2012-05-13 16:40 精灵博客园 阅读(203) 评论(0) 推荐(0)
摘要: 1. 对于明确不需要派生的类,添加final修饰符,此时该类的所有方法都是final的。Java编译器会寻找机会内联(inline)所有的final方法。(能使性能提升50%)2. 尽量重用对象,避免生成过多的对象。对于String的连接,用StringBuffer代替。3. 尽量少用全局变量如static等(heap中创建,慢),多用局部变量(Stack中创建,快)。4. 不要重复初始化变量。默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变量设置成0.0,逻 阅读全文
posted @ 2012-05-13 16:39 精灵博客园 阅读(132) 评论(0) 推荐(0)
摘要: 常用的:1.优化循环。通过重新组织重复的子表达式来提高循环体的运行性能。2减少使用对象的数量来提高运行性能。3.缩减网络传输数据来缩短等待时间。其他:1.采用对象池技术,提高对象的利用效率。性能的损耗主要源于创建和释放对象,因此要避免对象的创建和释放。采用对象池技术,预先定义一个对象池,预先创建一组待使用的对象:Enemy[5] enemy=new Enemy[5];for(int i=0;i<5;i++){ enemy[i]=new Enemy();}增加标志如used和reset标识Enemy的状态。需要创建对象时从对象池中获取 一个未被使用的对象并用reset方法初始化;需要释放时 阅读全文
posted @ 2012-05-13 16:38 精灵博客园 阅读(219) 评论(0) 推荐(0)
摘要: 1. android内存泄露概念 不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露。其实如果我们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造成了内存泄露。如果我们的java运行很久,而这种内存泄露不断的发生,最后就没内存可用了。当然java的,内存泄漏和C/C++是不一样的。如果java程序完全结束后,它所有的对象就都不可达了,系统就可以对他们进行垃圾回收,它的内存泄露仅仅限于它本身,而不会影响整个系统的。C/C++的内存泄露就比较糟糕了,它的内存泄露是系统级,即使该C/C++程序退出,它的泄露的内存也 阅读全文
posted @ 2012-05-13 16:37 精灵博客园 阅读(238) 评论(0) 推荐(0)
摘要: Android中读取/写入文件的方法,与Java中的I/O是一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。但是在默认状态下,文件是不能在不同的程序之间共享的,以上两个方法只支持读取该应用目录下的文件,读取非其自身目录下的文件将会抛出FileNotFoundException异常。创建的文件存放在/data/data/<package name>/files目录下。返回值函数备注FileInputStreamopenFileInput(String name)打开指定的私有文件输出流。name:要打开的文件名,不能包含路径分隔符 阅读全文
posted @ 2012-05-13 16:36 精灵博客园 阅读(400) 评论(0) 推荐(0)
摘要: Java的网络类可以让你通过网络或者远程连接来实现应用。而且,这个平台现在已经可以对国际互联网以及URL资源进行访问了。Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷。我们通过使用Java的URL类就可以经由URL完成读取和修改数据的操作。 通过一个URL连接,我们就可以确定资源的位置,比如网络文件、网络页面以及网络应用程序等。其中包含了许多的语法元素。 从URL得到的数据可以是多种多样的,这些都需要一种统一的机制来完成对URL的读取与修改操作。Java语言在它的java.net软件包里就提供了这么一种机制。 URL class是从URL标示符中提取出来的。... 阅读全文
posted @ 2012-05-13 16:34 精灵博客园 阅读(610) 评论(0) 推荐(0)
摘要: 1.HttpURLConnection连接URL1)创建一个URL对象URL url = new URL(http://www.baidu.com);2)利用HttpURLConnection对象从网络中获取网页数据HttpURLConnection conn = (HttpURLConnection) url.openConnection();3)设置连接超时conn.setConnectTimeout(6*1000);4)对响应码进行判断if (conn.getResponseCode() != 200) //从Internet获取网页,发送请求,将网页以流的形式读回来throw new 阅读全文
posted @ 2012-05-13 16:32 精灵博客园 阅读(158) 评论(0) 推荐(0)