• Java---匿名类


    今天学习Android开发,为实现button控件的onClick事件,其中一种实现方法是用匿名类,在此把Java中匿名类进行总结。

    匿名内部类--没有名字的内部类,因为没有名字,所以只能使用一次

    匿名内部类--它通常用来简化代码编写

    使用匿名内部类前提条件:必须继承一个父类或实现一个接口

    注:只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现;

    最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口

    1:未使用匿名类实现方式举例

     1 abstract class Person{
     2     abstract void eat();
     3 }
     4 
     5 class Student extends Person{
     6     void eat(){
     7         System.out.println("Student eat!");
     8     }
     9 }
    10 public class InnerClass {
    11     public static void main(String[] args){
    12         Person stu = new Student();
    13         stu.eat();
    14     }
    15 
    16 }

    输出结果:>Student eat!

    实现过程:Student类继承了Person类,作为其子类实现了一个实例,并将其向上转化为Person类的引用。

      2:匿名内部类基本实现方式

     1 abstract class Person{
     2     public abstract void eat();
     3 }
     4 
     5 public class InnerClass {
     6     public static void main(String[] args){
     7         Person stu = new Person(){
     8             public void eat(){
     9                 System.out.println("Student eat!");
    10             }
    11         };
    12         stu.eat();
    13     }
    14 
    15 }

    输出结果:>Student eat!

    实现过程:将Person类中的抽象方法eat()直接放在了大括号中实现,注意大括号后要有一个分号!

    3:匿名内部类用在接口上

     1 interface Person{
     2     public abstract void eat();
     3 }
     4 
     5 public class InnerClass {
     6     public static void main(String[] args){
     7         Person stu = new Person(){
     8             public void eat(){
     9                 System.out.println("Student eat!");
    10             }
    11         };
    12         stu.eat();
    13     }
    14 
    15 }

    输出结果:>Student eat!

    4:线程Thread类中匿名类的实现

    (1)Thread类中run()方法实现

     1 public class InnerClass {
     2     public static void main(String[] args){
     3         Thread t = new Thread(){
     4             public void run(){
     5                 for(int i = 0; i < 5; i++){
     6                     System.out.println("x = " + i +";");
     7                 }
     8             }
     9         };
    10         t.start();
    11     }
    12 
    13 }

    输出结果:

    x = 0;
    x = 1;
    x = 2;
    x = 3;
    x = 4;

    (2)使用Runnable接口进行实现

     1 public class InnerClass {
     2     public static void main(String[] args){
     3         Runnable r = new Runnable(){
     4             public void run(){
     5                 for(int i = 0; i < 5; i++){
     6                     System.out.println("x = " + i +";");
     7                 }
     8             }
     9         };
    10         Thread t = new Thread(r);
    11         t.run();
    12     }
    13 
    14 }

    运行结果和上面一样,通过Runnable的实例r,将Thread和Runnable联系在一起。

    5:扩展:在Android开发中button实现OnClickListener()事件使用匿名内部类实现主要代码如下:

     1 /*
     2          * 初始化Button控件;
     3          * 设置Button的监听器,通过监听器实现点击操作的事情
     4          */
     5         loginButton = (Button)findViewById(R.id.button1);
     6         loginButton.setOnClickListener( new OnClickListener(){
     7             public void onClick(View args0){
     8                 System.out.println("欢迎您!");
     9             }
    10         });

    注意,整个OnClickListener()事件的实现均包含在setOnClickListener()方法中

    一种andriod平台中的调试方法:

    可以使用“Log”函数,来达到自己在程序码中加入一个个“记录点”或“检查点”,并可以通过开发环境中的“LogCat”工具来查看记录。当程序流程每次运行到“记录点”时,相应的“记录点”就会在开发工具记录中输出一条查错用的信息。开发者通过分析这些记录,来检查程序执行的过程、使用到的参数,是否与我们期望的结果符合。依此来判断程序码中可能出错的区域,以便对症根治造成问题的程序段。

    android.util.Log常用的方法有以下5个:Log.v(),Log.d(),Log.i(),Log.w()以及Log.e()。根据首字母对应VERBOSE,DEBUG,INFO,WARN,ERROR。

     

    颜色

    消息

    说明

    Log.v

    黑色

    任何消息verbose

    包括以下所有消息

    Log.d

    蓝色

    调试信息debug

    Log.i

    绿色

    提示信息information

    不会输出Log.v和Log.d的信息,但会显示i、w和e的信息

    Log.w

    橙色

    警告warning

    注意优化代码,还会输出Log.e的消息

    Log.e

    红色

    错误error

    需要根据它查看栈的信息,并认真的分析错误

    以上log按优先级从低到高的顺序至上而下排列的,换句话说,选择某一种输出类型后,表格中在它下面的类型也会输出。

    方法:

    第一步:打开LogCat视窗

     

    Eclipse菜单 -> Windows -> Show View ->Other -> Android -> LogCat,在控制台窗口出现LogCat视窗。

    第二步:在工程中实验

    界面文件中添加一个Button按钮,用于点击按钮出现Log日志信息。

     1         /*
     2          * 初始化Button控件;
     3          * 设置Button的监听器,通过监听器实现点击操作的事情
     4          */
     5         loginButton = (Button)findViewById(R.id.button1);
     6         loginButton.setOnClickListener( listener);
     7         
     8         
     9     }
    10     OnClickListener listener = new OnClickListener(){
    11     public void onClick(View args0){
    12         //System.out.println("欢迎您!");
    13         Log.i("tag", "欢迎亲~~~");
    14     }
    15     };

    运行结果图片:

    另外,OnClickListener()事件也可以通过独立类进行实现等

  • 相关阅读:
    并发容器-ConcurrentHashMap
    java中的volatile
    Java 8并发工具包简介
    jQuery ajax() 参数,回调函数,数据类型,发送数据到服务器,高级选项
    mint-ui vue双向绑定
    CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法
    html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    javascript组件的基本结构
    vue生命周期的介绍
    document.ready和onload的区别
  • 原文地址:https://www.cnblogs.com/graceting/p/4041531.html
Copyright © 2020-2023  润新知