解决方案 »

  1.   

    占个沙发先
    抽象方法 毕竟还没有被实现嘛,没必要设成static或synchronized   ,native我不了解
      

  2.   

    static与abstract,它们不能同时用于修饰一个方法。
    因为abstract的语义就是说这个方法是多态方法,需要subclass的实现。
    而static方法则是在本类中实现的,编译期绑定,不具有多态行为。
    synchronized同步,也是一样的道理,具体可以参考JAVA语言规范。
      

  3.   

    都抽象了,啥也没做,你用啥去占内存...
    static是要开辟内存永垂不朽的啊...native么更加...synchronized是同步,没实现也同步不起来...
    感觉。..
      

  4.   

    补充下:
       native(利用jni技术访问非java程序的类接口),跟这都没关系!
      

  5.   

    其它的似乎是明白了,但synchronized这个问题还是不明白,有人说只是因为抽象方法是空的,没必要同步,但抽象类都是在实现类中用的,那时不就不空了吗
      

  6.   

    使用synchronized关键字是为该方法加一个锁。。而如果该关键字修饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰类方法。则用this变量锁。但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方法也就不能用synchronized关键字修饰了
      

  7.   

    这个问题要从实际的逻辑角度去看的,首先要了解abstract,static,synchronized,native这些关键字干什么用的。
    abstract是抽象的,指的是方法只有声明而没有实现,他的实现要放入声明该类的子类中实现。
    static是静态的,是一种属于类而不属于对象的方法或者属性,而我们知道,类其实也是一个对象,他是在class文件加载到虚拟机以后就会产生的对象,通常来说它是单利的,就是整个虚拟机中只有一个这样的类对象(当然,如果用新的类加载器也会生成新的类的对象)。
    synchronized 是同步,是一种相对线程的锁。
    native 本地方法,这种方法和抽象方法及其类似,它也只有方法声明,没有方法实现,但是它与抽象方法不同的是,它把具体实现移交给了本地系统的函数库,而没有通过虚拟机,可以说是java与其它语言通讯的一种机制。
    那么我们就来谈谈这些关键字为什么不能和abstract混用。
    首先abstract与static,其实一看他们的作用和属性就很容易辨别,abstract是没有实现的,而static一定要有实现,因为abstract的类不能生产对象,但是static是属于类,而类已经是一个存在的对象,这两个关键字在这上面有一个关键的矛盾点。
    synchronized 是同步,然而同步是需要有具体操作才能同步的,如果像abstract只有方法声明,那同步一些什么东西就会成为一个问题了,当然抽象方法在被子类继承以后,可以添加同步。
    native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢?
      

  8.   

    十楼很详细,
    但是有一点是 abstract方法是用来被实现的,也就是子类来实现。
    但是synchronized关键字是不会被继承的,也就是子类不能通过继承得到父类的同步方法,所以用
    此关键字修饰毫无意义,多以虚拟机不支持此语法。我人为这样理解会好一点。