Android知识点记录(一)

本文详细介绍了Java中的几个重要概念,包括单例模式下getInstance方法的使用、extends与implements的区别、@Override的作用、回调函数的概念、TextUtils工具类的使用方法以及Message和Handler的工作原理。
摘要由CSDN通过智能技术生成

                                                                小白日记 (一) 
   
 知识点一:getInstance方法和使用(转载自http://blog.sina.com.cn/s/blog_a5854e830102v8ll.html)

    答:   在单例模式下使用 。
    单例模式:所谓单例模式就是一个类有且只有一个实例,不像object ob=new object();的这种方式去实例化后去使用。
    getInstance与new区别:
    new的使用:如Object _object = new Object(),这时候,就必须要知道有第二个Object的存在,而第二个Object也常常是在当前的应用程序域中的,可以被直接调用的
    getInstance的使用:在主函数开始时调用,返回一个实例化对象,此对象是static的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。

    两者区别对照:

    大部分类(非抽象类/接口/屏蔽了constructor的类)都可以用new,new就是通过生产一个新的实例对象,或者在栈上声明一个对象 ,每部分的调用用的都是一个新的对象。

    getInstance是少部分类才有的一个方法,各自的实现也不同。getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance往往是static的。

        (1) 对象使用之前通过getinstance得到而不需要自己定义,用完之后不需要delete;

       (2)new 一定要生成一个新对象,分配内存;getInstance() 则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于new;

        (3) new创建后只能当次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。所以getInstance()通常是创建static静态实例方法的。

      

    知识点二: extends和Implements区别(转载自http://blog.csdn.net/tolcf/article/details/46135645)

    1、在类的声明中,通过关键字extends来创建一个类的子类。
        一个类通过关键字implements声明自己使用一个或者多个接口。 
        extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法; 
        implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用 

    2、extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承
        JAVA中不支持多重继承,但是可以用接口 来实现,这样就要用到implements,继承只能继承一个类,
        但implements可以实现多个接口,用逗号分开就行了 比如 :
        class A extends B implements C,D,E
        接口实现的注意点:  
            a.实现一个接口就是要实现该接口的所有的方法(抽象类除外)。 
            b.接口中的方法都是抽象的。  
            c.多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。
      extends, 可以实现父类,也可以调用父类初始化 this.parent()。而且会覆盖父类定义的变量或者函数。这样的好处是:架构师定义好接口,让工程师实现就可以了。整个项目开发效率和开发成本大大降低。    implements,实现父类,子类不可以覆盖父类的方法或者变量。即使子类定义与父类相同的变量或者函数,也会被父类取代掉。  

          这两种实现的具体使用,是要看项目的实际情况,需要实现,不可以修改implements,只定义接口需要具体实现,或者可以被修改扩展性好,用extends。


    知识点三:@Override作用与解析

        @Override是伪代码,所以是可写可不写的.它表示方法重写,写上会给我们带来好处. 
            1.可以当注释用,方便阅读. 
            2.告诉阅读你代码的人,这是方法的复写. 

            3.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.


    知识点四: 回调函数(两位大神写的)

        http://blog.csdn.net/xiaanming/article/details/8703708/

http://ifeve.com/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA%EF%BC%9A-java%E5%9B%9E%E8%B0%83%E6%9C%BA%E5%88%B6%E5%BC%82%E6%AD%A5/


    知识点五:TextUtils 自动工具类(转自:http://www.jb51.net/article/126705.htm

        Log.d(TAG, TextUtils.isEmpty("Hello") + ""); 
          //判断是否只有数字 
          Log.d(TAG, TextUtils.isDigitsOnly("Hello") + ""); 
          //判断字符串是否相等 
          Log.d(TAG, TextUtils.equals("Hello", "Hello") + ""); 
          //获取字符串的倒序 
          Log.d(TAG, TextUtils.getReverse("Hello", 0, "Hello".length()).toString()); 
          //获取字符串的长度 
          Log.d(TAG, TextUtils.getTrimmedLength("Hello world!") + ""); 
          Log.d(TAG, TextUtils.getTrimmedLength(" Hello world! ") + ""); 
          //获取html格式的字符串 
          Log.d(TAG, TextUtils.htmlEncode("<html>\n" + 
            "<body>\n" + 
            "这是一个非常简单的HTML。\n" + 
            "</body>\n" + 
            "</html>")); 
          //获取字符串中第一次出现子字符串的字符位置 
          Log.d(TAG, TextUtils.indexOf("Hello world!", "Hello") + ""); 
          //截取字符串 
          Log.d(TAG, TextUtils.substring("Hello world!", 0, 5)); 
          //通过表达式截取字符串 
          Log.d(TAG, TextUtils.split(" Hello world! ", " ")[0]);

        结果如下:

                            

    这其中重点讲讲如何使用TextUtils.isEmpty()。

    是否为空字符 static boolean  isEmpty(CharSequence str) 这个函数在我们判断字符串为空时经常可以用到。

    这里注意一点,空格返回的也是false。

/** 
 * Returns true if the string is null or 0-length. 
 * @param str the string to be examined 
 * @return true if str is null or zero length 
 */
    public static boolean isEmpty(CharSequence str) { 
         if (str == null || str.length() == 0) 
          return true; 
         else
          return false; 
        } 

        如果传入是空格,字符串的长度不会为0,因此返回时false。为了判断EditText输入的是否为空字符串,可以将字符串先trim(),再传入isEmpty,就能成功判断了。


    知识点六:Message和Handler

        一.消息处理类(Handler)简介
        消息处理类Handler允许发送和处理Message或Runnable对象到其所在线程的MessageQueue中。Handler主要有一下两个作用:

        1.将Message或Runnable应用post()或sandMessage()方法发送到MessageQueue中,在发送时可以指定延迟时间、发送时间以及要携带的Bundle数据。当MessageQueue循环到该Message时,调用相应的Handler对象的handlerMessage()方法对其进行处理。

        2.在子线程中与主线程进行通信,也就是在工作线程中与UI线程进行通信。

        *在一个线程中,只能有一个Looper和MessageQueue,但是可以有多个Handler,而且这些Handler可以共享一个Looper和MessageQueue。

        Handler类提供的发送和处理消息的常用方法如下表:
        [plain] view plain copy
        void handleMessage(Message msg):处理消息的方法,该方法通常用于被重写。   
        final boolean hasMessage(int what):检查消息队列是否包含what属性指定值的消息。   
        final boolean hasMessage(int what,Object object):检查消息队列中是否包含what属性为指定且object属性为指定指定对象的消息。   
        Message obtainMessage():获取消息。   
        sendEmptyMessage(int what):发送空消息。   
        final boolean sendEmptyMessageDelayed(int what,long delayMillis):指定多少毫秒之后发送空消息。   
        final boolean sendMessage(Message msg):立即发送消息。   
        final boolean sendMessageAtTime(Message msg,long uptimeMillis):定时发送消息。   
        final boolean sendMessageDelayed(Message msg,long delayMillis):指定多少毫秒之后发送消息。  

    二.消息类(Message)简介
        消息类(Message)被存放在MessageQueue中,一个MessageQueue中可以包含多个Message对象,每个Message对象可以通过Message.obtain()或Handler.obtainMessage()方法获得。一个Message对象有如下5个属性:
    [plain] view plain copy
    arg1 int类型 用来存放整型数据  
    arg2 int类型 用来存放整型数据  
    what int类型 用来保存消息标示  
    obj Object类型 是Object类型的任意对象  
    replyTo Messager类型 用来指定此Message发送到何处的可选Message对象  

    *使用Message类的属性可以携带int类型数据,如果要携带其他类型的数据,可以先将要携带的数据保存到Bundle中对象中,然后通过Message类的setData()方法将其添加到Message中。
    如:
    Message msg = new Message();
    Bundle bundle = new Bundle();
    bundle.putInt("int", 1);
    bundle.putBoolean("boolean", false);
    bundle.putByte("byte", (Byte) null);
    bundle.putChar("char",'a');
    bundle.putCharSequence("Stirng","Hello World");
    bundle.putFloat("float", 12.3f);
    bundle.putString("String", "Hello World");
    bundle.putDouble("double", 12.3);
    msg.setData(bundle);

    Message类的使用方法比较简单,在使用时,需注意以下3点:
    a.尽管Message有public的默认构造方法,但是通常情况下,需要使用Message.obtaion()或Handler.obtainMessage()方法来从消息池中获得空消息对象,以节省资源。

    b.如果一个Message只需要携带简单的int型信息,应优先使用Message.arg1和Message.arg2属性来传递信息,这比用Bundle更节省内存。

    c.尽可能使用Message.what来标识信息,以便用不同方式处理Message。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值