枚举java语言中的修饰符组合的实例代码

枚举java语言中的修饰符组合,代码如下所示:

package model;
/*22:37 2019/7/20*/
/*
top class的修饰符组合
abstract final public
  * 2 * 2
warning:
abstract final 冲突
最终,共有2*(2*2-1)=6种修饰符组合用于top class
*/
/*
public abstract class PublicAbstractClass{}
public final  class PublicFinalClass{}
    abstract class AbstractClass{}
    final  class FinalClass{}
public     class PublicClass{}
        class Class{}
关于constructor的修饰符组合
abstract [DEFAULT] protected public
关于field的修饰符组合
    *  2   *   2   *   2     *  2
权限           静态的     瞬态的     同步的
private    缺省     缺省     缺省      缺省
缺省    (not final) (not static) (not transient) (not volatile)
protected
public     final    static    transient    volatile
warning:
volatile final 冲突
最终,共有4*2*2*(2*2-1)=48种修饰符组合用于field
关于method的修饰符组合
    *  2     *  2   *   2   *    2     *  2
权限                   静态的       同步的     本地的
private   缺省      缺省     缺省        缺省     缺省
缺省  (not abstract)  (not final) (not static) (not synchronized) (not native)
protected
public   abstract     final    static    synchronized    native
warning:
abstract 和 private 冲突
abstract 和 final 冲突
abstract 和 synchronized 冲突
abstract 和 static 冲突
abstract 和 native 冲突
所以abstract method 的修饰符组合只有三种:
     abstract
protected abstract
public  abstract
最终,共有4*2*2*2*2+3=67中修饰符组合用于method
*/
/**
 * 这个类列举了所有的用于字段的修饰符组合
 *         ├构造器的修饰符组合
 *         └方法的修饰符组合
 * @author zhangxingshuo
 */
abstract class A {
  /*fields*/
  /*transient and volatile*/
  private        transient volatile int privateTransientVolatileIntMemberField;
              transient volatile int transientVolatileIntMemberField;
  protected       transient volatile int protectedTransientVolatileIntMemberField;
  public         transient volatile int publicTransientVolatileIntMemberField;
//  private  final    transient volatile int privateFinalTransientVolatileIntMemberField=0;
//       final    transient volatile int finalTransientVolatileIntMemberField=0;
//  protected final    transient volatile int protectedFinalTransientVolatileIntMemberField=0;
//  public  final    transient volatile int publicFinalTransientVolatileIntMemberField=0;
  private     static transient volatile int privateStaticTransientVolatileIntMemberField;
          static transient volatile int staticTransientVolatileIntMemberField;
  protected    static transient volatile int protectedStaticTransientVolatileIntMemberField;
  public     static transient volatile int publicStaticTransientVolatileIntMemberField;
//  private  final static transient volatile int privateFinalStaticTransientVolatileIntMemberField=0;
//       final static transient volatile int finalStaticTransientVolatileIntMemberField=0;
//  protected final static transient volatile int protectedFinalStaticTransientVolatileIntMemberField=0;
//  public  final static transient volatile int publicFinalStaticTransientVolatileIntMemberField=0;
  /*not transient and volatile*/
  private              volatile int privateVolatileIntMemberField;
                    volatile int VolatileIntMemberField;
  protected             volatile int protectedVolatileIntMemberField;
  public               volatile int publicVolatileIntMemberField;
//  private  final          volatile int privateFinalVolatileIntMemberField=0;
//       final          volatile int finalVolatileIntMemberField=0;
//  protected final          volatile int protectedFinalVolatileIntMemberField=0;
//  public  final          volatile int publicFinalVolatileIntMemberField=0;
  private     static       volatile int privateStaticVolatileIntMemberField;
          static       volatile int staticVolatileIntMemberField;
  protected    static       volatile int protectedStaticVolatileIntMemberField;
  public     static       volatile int publicStaticVolatileIntMemberField;
//  private  final static       volatile int privateFinalStaticVolatileIntMemberField=0;
//       final static       volatile int finalStaticVolatileIntMemberField=0;
//  protected final static       volatile int protectedFinalStaticVolatileIntMemberField=0;
//  public  final static       volatile int publicFinalStaticVolatileIntMemberField=0;
  /*transient and not volatile*/
  private        transient      int privateTransientIntMemberField;
              transient      int transientIntMemberField;
  protected       transient      int protectedTransientIntMemberField;
  public         transient      int publicTransientIntMemberField;
  private  final    transient      int privateFinalTransientIntMemberField=0;
       final    transient      int finalTransientIntMemberField=0;
  protected final    transient      int protectedFinalTransientIntMemberField=0;
  public  final    transient      int publicFinalTransientIntMemberField=0;
  private     static transient      int privateStaticTransientIntMemberField;
          static transient      int staticTransientIntMemberField;
  protected    static transient      int protectedStaticTransientIntMemberField;
  public     static transient      int publicStaticTransientIntMemberField;
  private  final static transient      int privateFinalStaticTransientIntMemberField=0;
       final static transient      int finalStaticTransientIntMemberField=0;
  protected final static transient      int protectedFinalStaticTransientIntMemberField=0;
  public  final static transient      int publicFinalStaticTransientIntMemberField=0;
  /*not transient and not volatile*/
  private        int privateIntMemberField;
              int intMemberField;
  protected       int protectedIntMemberField;
  public         int publicIntMemberField;
  private  final    int privateFinalIntMemberField=0;
       final    int finalIntMemberField=0;
  protected final    int protectedFinalIntMemberField=0;
  public  final    int publicFinalIntMemberField=0;
  private     static int privateStaticIntMemberField;
          static int staticIntMemberField;
  protected    static int protectedStaticIntMemberField;
  public     static int publicStaticIntMemberField;
  private  final static int privateFinalStaticIntMemberField=0;
       final static int finalStaticIntMemberField=0;
  protected final static int protectedFinalStaticIntMemberField=0;
  public  final static int publicFinalStaticIntMemberField=0;
  /*constructors*/
  private  A(         ){}
       A(int i      ){}
  protected A(int i,int j   ){}
  public  A(int i,int j,int k){}
  /*methods*/
  private      final static synchronized native void privateFinalStaticSynchronizedNativeVoidMethod();
            final static synchronized native void    finalStaticSynchronizedNativeVoidMethod();
  protected     final static synchronized native void protectedFinalStaticSynchronizedNativeVoidMethod();
  public       final static synchronized native void publicFinalStaticSynchronizedNativeVoidMethod();
  private          static synchronized native void privateStaticSynchronizedNativeVoidMethod();
               static synchronized native void    staticSynchronizedNativeVoidMethod();
  protected         static synchronized native void protectedStaticSynchronizedNativeVoidMethod();
  public          static synchronized native void publicStaticSynchronizedNativeVoidMethod();
  private      final     synchronized native void privateFinalSynchronizedNativeVoidMethod();
            final     synchronized native void    finalSynchronizedNativeVoidMethod();
  protected     final     synchronized native void protectedFinalSynchronizedNativeVoidMethod();
  public       final     synchronized native void publicFinalSynchronizedNativeVoidMethod();
  private             synchronized native void privateSynchronizedNativeVoidMethod();
                   synchronized native void    synchronizedNativeVoidMethod();
  protected            synchronized native void protectedSynchronizedNativeVoidMethod();
  public              synchronized native void publicSynchronizedNativeVoidMethod();
  private      final static       native void privateFinalStaticNativeVoidMethod();
            final static       native void    finalStaticNativeVoidMethod();
  protected     final static       native void protectedFinalStaticNativeVoidMethod();
  public       final static       native void publicFinalStaticNativeVoidMethod();
  private          static       native void privateStaticNativeVoidMethod();
               static       native void    staticNativeVoidMethod();
  protected         static       native void protectedStaticNativeVoidMethod();
  public          static       native void publicStaticNativeVoidMethod();
  private      final           native void privateFinalNativeVoidMethod();
            final           native void    finalNativeVoidMethod();
  protected     final           native void protectedFinalNativeVoidMethod();
  public       final           native void publicFinalNativeVoidMethod();
  private                    native void privateNativeVoidMethod();
                         native void nativeVoidMethod();
  protected                   native void protectedNativeVoidMethod();
  public                    native void publicNativeVoidMethod();
  private      final static synchronized    void privateFinalStaticSynchronizedVoidMethod(){};
            final static synchronized    void    finalStaticSynchronizedVoidMethod(){};
  protected     final static synchronized    void protectedFinalStaticSynchronizedVoidMethod(){};
  public       final static synchronized    void publicFinalStaticSynchronizedVoidMethod(){};
  private          static synchronized    void privateStaticSynchronizedVoidMethod(){};
               static synchronized    void    staticSynchronizedVoidMethod(){};
  protected         static synchronized    void protectedStaticSynchronizedVoidMethod(){};
  public          static synchronized    void publicStaticSynchronizedVoidMethod(){};
  private      final     synchronized    void privateFinalSynchronizedVoidMethod(){};
            final     synchronized    void    finalSynchronizedVoidMethod(){};
  protected     final     synchronized    void protectedFinalSynchronizedVoidMethod(){};
  public       final     synchronized    void publicFinalSynchronizedVoidMethod(){};
  private             synchronized    void privateSynchronizedVoidMethod(){};
                   synchronized    void    synchronizedVoidMethod(){};
  protected            synchronized    void protectedSynchronizedVoidMethod(){};
  public              synchronized    void publicSynchronizedVoidMethod(){};
  private      final static           void privateFinalStaticVoidMethod(){};
            final static           void    finalStaticVoidMethod(){};
  protected     final static           void protectedFinalStaticVoidMethod(){};
  public       final static           void publicFinalStaticVoidMethod(){};
  private          static           void privateStaticVoidMethod(){};
               static           void    staticVoidMethod(){};
  protected         static           void protectedStaticVoidMethod(){};
  public          static           void publicStaticVoidMethod(){};
  private      final               void privateFinalVoidMethod(){};
            final               void    finalVoidMethod(){};
  protected     final               void protectedFinalVoidMethod(){};
  public       final               void publicFinalVoidMethod(){};
  private                       void privateVoidMethod(){};
                             void    voidMethod(){};
  protected                      void protectedVoidMethod(){};
  public                        void publicVoidMethod(){};
//  private  abstract final static synchronized native void privateAbstractFinalStaticSynchronizedNativeVoidMethod(){};
//       abstract final static synchronized native void    abstractFinalStaticSynchronizedNativeVoidMethod(){};
//  protected abstract final static synchronized native void protectedAbstractFinalStaticSynchronizedNativeVoidMethod(){};
//  public  abstract final static synchronized native void publicAbstractFinalStaticSynchronizedNativeVoidMethod(){};
//  private  abstract    static synchronized native void privateAbstractStaticSynchronizedNativeVoidMethod();
//       abstract    static synchronized native void    abstractStaticSynchronizedNativeVoidMethod();
//  protected abstract    static synchronized native void protectedAbstractStaticSynchronizedNativeVoidMethod();
//  public  abstract    static synchronized native void publicAbstractStaticSynchronizedNativeVoidMethod();
//  private  abstract final     synchronized native void privateAbstractFinalSynchronizedNativeVoidMethod(){};
//       abstract final     synchronized native void    abstractFinalSynchronizedNativeVoidMethod(){};
//  protected abstract final     synchronized native void protectedAbstractFinalSynchronizedNativeVoidMethod(){};
//  public  abstract final     synchronized native void publicAbstractFinalSynchronizedNativeVoidMethod(){};
//  private  abstract        synchronized native void privateAbstractSynchronizedNativeVoidMethod(){};
//       abstract        synchronized native void    abstractSynchronizedNativeVoidMethod(){};
//  protected abstract        synchronized native void protectedAbstractSynchronizedNativeVoidMethod(){};
//  public  abstract        synchronized native void publicAbstractSynchronizedNativeVoidMethod(){};
//  private  abstract final static       native void privateAbstractFinalStaticNativeVoidMethod(){};
//       abstract final static       native void    abstractFinalStaticNativeVoidMethod(){};
//  protected abstract final static       native void protectedAbstractFinalStaticNativeVoidMethod(){};
//  public  abstract final static       native void publicAbstractFinalStaticNativeVoidMethod(){};
//  private  abstract    static       native void privateAbstractStaticNativeVoidMethod(){};
//       abstract    static       native void    abstractStaticNativeVoidMethod(){};
//  protected abstract    static       native void protectedAbstractStaticNativeVoidMethod(){};
//  public  abstract    static       native void publicAbstractStaticNativeVoidMethod(){};
//  private  abstract final           native void privateAbstractFinalNativeVoidMethod(){};
//       abstract final           native void    abstractFinalNativeVoidMethod(){};
//  protected abstract final           native void protectedAbstractFinalNativeVoidMethod(){};
//  public  abstract final           native void publicAbstractFinalNativeVoidMethod(){};
//  private  abstract              native void privateAbstractNativeVoidMethod();
//       abstract              native void    abstractNativeVoidMethod();
//  protected abstract              native void protectedAbstractNativeVoidMethod();
//  public  abstract              native void publicAbstractNativeVoidMethod();
//  private  abstract final static synchronized    void privateAbstractFinalStaticSynchronizedVoidMethod();
//       abstract final static synchronized    void    abstractFinalStaticSynchronizedVoidMethod();
//  protected abstract final static synchronized    void protectedAbstractFinalStaticSynchronizedVoidMethod();
//  public  abstract final static synchronized    void publicAbstractFinalStaticSynchronizedVoidMethod();
//  private  abstract    static synchronized    void privateAbstractStaticSynchronizedVoidMethod();
//       abstract    static synchronized    void    abstractStaticSynchronizedVoidMethod();
//  protected abstract    static synchronized    void protectedAbstractStaticSynchronizedVoidMethod();
//  public  abstract    static synchronized    void publicAbstractStaticSynchronizedVoidMethod();
//  private  abstract final     synchronized    void privateAbstractFinalSynchronizedVoidMethod(){};
//       abstract final     synchronized    void    abstractFinalSynchronizedVoidMethod(){};
//  protected abstract final     synchronized    void protectedAbstractFinalSynchronizedVoidMethod(){};
//  public  abstract final     synchronized    void publicAbstractFinalSynchronizedVoidMethod(){};
//  private  abstract        synchronized    void privateAbstractSynchronizedVoidMethod();
//       abstract        synchronized    void    abstractSynchronizedVoidMethod();
//  protected abstract        synchronized    void protectedAbstractSynchronizedVoidMethod();
//  public  abstract        synchronized    void publicAbstractSynchronizedVoidMethod();
//  private  abstract final static           void privateAbstractFinalStaticVoidMethod;
//       abstract final static           void    abstractFinalStaticVoidMethod;
//  protected abstract final static           void protectedAbstractFinalStaticVoidMethod;
//  public  abstract final static           void publicAbstractFinalStaticVoidMethod;
//  private  abstract    static           void privateAbstractStaticVoidMethod();
//       abstract    static           void    abstractStaticVoidMethod();
//  protected abstract    static           void protectedAbstractStaticVoidMethod();
//  public  abstract    static           void publicAbstractStaticVoidMethod();
//  private  abstract final               void privateAbstractFinalVoidMethod();
//       abstract final               void    abstractFinalVoidMethod();
//  protected abstract final               void protectedAbstractFinalVoidMethod();
//  public  abstract final               void publicAbstractFinalVoidMethod();
//  private  abstract                  void privateAbstractVoidMethod();
       abstract                  void    abstractVoidMethod();
  protected abstract                  void protectedAbstractVoidMethod();
  public  abstract                  void publicAbstractVoidMethod();
}

ps:Java 修饰符

Java语言提供了很多修饰符,主要分为以下两类:

  • 访问修饰符
  • 非访问修饰符

修饰符用来定义类、方法或者变量,通常放在语句的最前端。我们通过下面的例子来说明:

public class className {
  // ...
}
private boolean myFlag;
static final double weeks = 9.5;
protected static final int BOXWIDTH = 42;
public static void main(String[] arguments) {
  // 方法体
}

访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

总结

以上所述是小编给大家介绍的枚举java语言中的修饰符组合的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

(0)

相关推荐

  • 举例详解Java中的访问权限修饰符

    访问权限符: (1)public: 对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中. 对于类来说:    也是一样. (2)friendly: 对于成员老说:如果一个类的成员没有任何权限修饰,那么它门就是缺省包访问权限,用friendly来表示,注 意friendly不是Java中的关键字,这里是个人喜欢的方式用它表示而已.同一个包内其它类可以访问,但包外 就不可以.对于同一个文件夹下的.没有用package的classes,Java会自动将这些classes初见为隶属

  • Java中常用修饰符的使用方法汇总

    修饰符汇总: 一:public protected default private 修饰类,修饰方法,修饰属性,修饰代码块. 类: 顶级类只能用public 修饰,顶级类不能使用private 和protected 修饰. 外部类可以被public修饰或者默认不写,不能用private和protected. 内部类可为静态,可用protected和private修饰. 方法: 通常方法可以被四个访问修饰符修饰,构造方法也可以被四个访问修饰符修饰. 抽象类中的抽象方法不能被private修饰,可以

  • Java final 修饰符知识点总结(必看篇)

    final从字面上理解含义为"最后的,最终的".在Java中也同样表示出此种含义. final可以用来修饰变量(包括类属性.对象属性.局部变量和形参).方法(包括类方法和对象方法)和类. 1. final修饰类: final修饰类即表示此类已经是"最后的.最终的"含义.因此,用final修饰的类不能被继承,即不能拥有自己的子类. 如果视图对一个已经用final修饰的类进行继承,在编译期间或发生错误. 2. final修饰方法: final修饰的方法表示此方法已经是&

  • java 中枚举类enum的values()方法的详解

    java 中枚举类enum的values()方法的详解 前言: 关于枚举,相信使用的已经很普遍了,现在主要写的是枚举中的一个特殊方法,values(), 为什么说特殊呢,因为在Enum 的 API 文档中也找不到这个方法.接下来就看看具体的使用. 理论上此方法可以将枚举类转变为一个枚举类型的数组,因为枚举中没有下标,我们没有办法通过下标来快速找到需要的枚举类,这时候,转变为数组之后,我们就可以通过数组的下标,来找到我们需要的枚举类.接下来就展示代码了. 首先是我们自己的枚举类. public e

  • Java的访问修饰符与变量的作用域讲解

    Java访问修饰符(访问控制符) Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private boolean myFlag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42; public static void main(String[] arguments)

  • Java中的private修饰符失效了?

    在Java编程中,使用private关键字修饰了某个成员,只有这个成员所在的类和这个类的方法可以使用,其他的类都无法访问到这个private成员. 上面描述了private修饰符的基本职能,今天来研究一下private功能失效的情况. Java内部类 在Java中相信很多人都用过内部类,Java允许在一个类里面定义另一个类,类里面的类就是内部类,也叫做嵌套类.一个简单的内部类实现可以如下 复制代码 代码如下: class OuterClass {     class InnerClass{   

  • java枚举类的构造函数实例详解

    java枚举类的构造函数实例详解 首先,给出一个例题如下: enum AccountType { SAVING, FIXED, CURRENT; private AccountType() { System.out.println("It is a account type"); } } class EnumOne { public static void main(String[]args) { System.out.println(AccountType.FIXED); } } T

  • JAVA 枚举单例模式及源码分析的实例详解

    JAVA 枚举单例模式及源码分析的实例详解 单例模式的实现有很多种,网上也分析了如今实现单利模式最好用枚举,好处不外乎三点: 1.线程安全 2.不会因为序列化而产生新实例 3.防止反射攻击但是貌似没有一篇文章解释ENUM单例如何实现了上述三点,请高手解释一下这三点: 关于第一点线程安全,从反编译后的类源码中可以看出也是通过类加载机制保证的,应该是这样吧(解决) 关于第二点序列化问题,有一篇文章说枚举类自己实现了readResolve()方法,所以抗序列化,这个方法是当前类自己实现的(解决) 关于

  • 枚举java语言中的修饰符组合的实例代码

    枚举java语言中的修饰符组合,代码如下所示: package model; /*22:37 2019/7/20*/ /* top class的修饰符组合 abstract final public * 2 * 2 warning: abstract final 冲突 最终,共有2*(2*2-1)=6种修饰符组合用于top class */ /* public abstract class PublicAbstractClass{} public final class PublicFinalC

  • 探讨Java语言中那些修饰符

    一.在java中提供的一些修饰符,这些修饰符可以修饰类.变量和方法,在java中常见的修饰符有:abstract(抽象的).static(静态的).public(公共的).protected(受保护的).private(私有的).synchronized(同步的).native(本地的).transient(暂时的).volatile(易失的).final(不可改变的) 二.修饰顶层类的修饰符包括abstract.public和final,而static.protected和private不能修

  • C#语言中的修饰符汇总

    修饰符是用于限定类型以及类型成员的申明的一种符号. 下面主要从C#中的访问修饰符,作用于类和结构的修饰符,用在方法或变量的修饰符和特殊作用的修饰符四种,来给大家介绍. 1. 访问修饰符 指定声明的类型和类型成员的可访问性. (1) public:是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. (2) private:是一个成员访问修饰符.私有访问是允许的最低访问级别.私有成员只有在声明它们的类和结 构体中才是可访问的. (3) internal:是类型和类型

  • 详解Java编程中protected修饰符与static修饰符的作用

    protected 来谈谈protected访问权限问题.看下面示例1: Test.java class MyObject {} public class Test { public static void main(String[] args) { MyObject obj = new MyObject(); obj.clone(); // Compile error. } } 此时出现上文提到的错误:The method clone from the type Object is not v

  • java中final修饰符的使用方法

    本文为大家分享了java中final修饰符的使用,供大家参考,具体内容如下 1.final修饰符的用法: final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值. final可以修饰方法,被final修饰的方法不能被重写. final可以修饰类,被final修饰的类不能够被继承. 上面的这些"语法口诀"对真正掌握final修饰符的用法依然是不够的. 2.final修饰的变量:被final修饰的实例变量必须显示指定初始值,而且只能在如下三个位置指定初始值: 定义f

  • 浅谈Java中各种修饰符与访问修饰符的说明

    JAVA中的类只能是public 或者package的.这是符合逻辑的:人们定义类的初衷就是为了让别人用的.倘若是private,别人怎么调用?但是有一个内部类可以被定义为private.严格上说,内部类,算不得上是一种光明正大的类,内部类在某种意义上是类这个王国里的特务和地下工作者.特务和地下工作者为王国起了不少作用,但是几乎从来不敢在公众场合抛投露面.就算要露面,也要在主人(class)的同意下,向导(Interface)的引导下,才敢战战兢兢的走出来.下面是常规的一些类的修饰符和访问修饰符

  • java中final修饰符实例分析

    final修饰符: final修饰成员变量必须有程序员显示指定初始值. 类的Field:必须在静态初始化块中或声明该Field时指定初始值. 实例Field:必须在非静态初始块中,声明Field或者构造器中指定初始值. final局部变量:必须由程序员显示初始化. final修饰的基本变量和引用类型变量的区别? final修饰的基本变量:不能对基本变量重新赋值. final修饰的引用变量:只保证这个引用类型所引用的地址不会变,即 一直引用同一个对象,但这个对象完全可以发生改变. 复制代码 代码如

  • 深入讲解C语言编程中volatile修饰符的作用

    volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象.下面举例说明.在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序: short flag; void test() { do1(); while(flag==0); do2(); } 这段程序等待内存

  • 深入了解Java语言中的并发性选项有何不同

    前言 Java™ 工程师在努力让并发性容易为开发人员所用.尽管做了不少的改进,但并发性仍然是 Java 平台的一个复杂.容易出错的部分.一部分复杂之处在于理解语言本身中的并发性的低级抽象,这些抽象在您的代码中填满了同步的代码块.另一个复杂之处来自一些新库,比如 fork/join,这些库在某些场景中非常有用,但在其他场景中收效甚微.了解容易混乱的大量低级选项需要专业经验和时间. 脱离 Java 语言的优势之一是,能够改善和简化并发性等区域.每种 Java 下一代语言都为此问题提供了独特的答案,利

随机推荐