Java程序员必需掌握的 4 大基础!

#5d027b0de70c12d39e94bc2ab06269c1#

大概每个人在学生时代开始就使用Java了,我们一直在学习Java,但Java中总有一些概念含混不清,不论是对初级还是高级程序员都是如此。所以,这篇文章的目的就是弄清楚这些概念。

读完本文你会对这些概念有更深入的了解,还能弄清楚一切灰色的东西。在本书中,我们将讨论匿名内联类、多线程、同步和序列化。

1、匿名类

Java匿名类很像局部类或内联类,只是没有名字。我们可以利用匿名类,同时定义并实例化一个类。只有局部类仅被使用一次时才应该这么做。

匿名类不能有显式定义的构造函数。相反,每个匿名类都隐含地定义了一个匿名构造函数。

创建匿名类有两种方法:

扩展已有的类(可以是抽象类,也可以是具体类)

创建接口

理解代码的最好方法就是先阅读,所以我们首先来看看代码。

interface Football {     void kick(); } class AnnonymousClass {   public static Football football = new Football() {         @Override         public void kick() {             System.out.println("Nested Anonymous Class.");         }     };     public static void main(String\[\] args)     {         // anomynous class inside the method       Football footballObject = new Football()       {           @Override          public void kick()           {               System.out.println("Anonymous Class");           }       };       footballObject.kick();         AnnonymousClass.football.kick();     } }

匿名类可以在类和函数代码块中创建。你也许知道,匿名类可以用接口来创建,也可以通过扩展抽象或具体的类来创建。上例中我先创建了一个接口Football,然后在类的作用域和main()方法内实现了匿名类。Football也可以是抽象类,也可以是与interface并列的顶层类。

Football可以是抽象类,请看下面的代码。

public abstract class Football {     abstract void kick(); }

匿名类不仅可以是抽象类,还可以是具体类。

// normal or concrete class public class Football {        public void kick(){} }// end of class scope.

如果Football类没有不带参数的构造方法怎么办?我们可以在匿名类中访问类变量吗?我们需要在匿名类中重载所有方法吗?

// normal or concrete class public class Football {     protected int score;     public Football(int score)     {         this.score = score;     }     public void score(){         System.out.println("Score "+score);     };     public void kick(){}     public static void main(String\[\] args) {         Football football = new Football(7)         {             @Override             public void score() {                 System.out.println("Anonymous class inside the method "+score);             }         };         football.score();     } } // end of class scope.

创建匿名类时可以使用任何构造方法。注意这里也使用了构造方法的参数。

匿名类可以扩展顶层类,并实现抽象类或接口。所以,访问控制的规则依然适用。我们可以访问protected变量,而改成private就不能访问了。

由于上述代码中扩展了Football类,我们不需要重载所有方法。但是,如果它是个接口或抽象类,那么必须为所有未实现的方法提供实现。

匿名类中不能定义静态初始化方法或成员接口。

匿名类可以有静态成员变量,但它们必须是常量。

匿名类的用途:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwpypy.html