`
louis1987
  • 浏览: 10054 次
  • 性别: Icon_minigender_1
  • 来自: 福州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

抽象方法abstract为什么不能与static、synchronized、native混用

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

相关推荐

    透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    无论该类有多少个实例,Static Synchronized 都会锁定该类的所有实例,使得多个线程不能同时访问该类的同一个 synchronized 块。 Static Synchronized 相当于锁定该类的 Class 对象或 ClassLoader 对象,而不是锁定...

    synchronized与static synchronized的区别

    当某个线程调用synchronized方法的时候,就会给它加上了一个锁,其他线程就会无法访问,等到这个锁被释放,别的线程拿到这个锁的时候,才可以访问该方法。 static synchronized这个是“全局锁”或者是“类锁”,该锁...

    【IT十八掌徐培成】Java基础第05天-03.抽象类-抽象方法-修饰符组合.zip

    关于修饰符组合,Java中的访问修饰符(public, protected, private, 默认)和final、static、synchronized等修饰符可以与抽象方法和抽象类结合使用,但有特定的规则: 1. 抽象方法不能是private,因为private方法在...

    JAVA开发与应用抽象类与接口及多态PPT教案学习.pptx

    在接口中声明方法时,不能使用native、static、final、synchronized、private等修饰符。和public类一样,public接口也必须定义在与接口同名的文件中。接口中可以有数据成员,这些成员默认都是public static final的...

    synchronized与单例的线程安全

    1. 方法同步:通过在方法声明前加上`synchronized`关键字,整个方法体将被锁定,一次只有一个线程可以执行该方法。例如: ```java public synchronized void method() { // 代码 } ``` 2. 代码块同步:针对特定...

    java里面synchronized用法.doc

    synchronized 关键字不能被继承,即基类的 synchronized 方法在继承类中不自动变成 synchronized 方法。例如: ```java public class MyClass { public synchronized void myMethod() { // ... } } public class...

    Java编程语言构造方法研究.pdf

    构造方法不能有以下非访问性质的修饰:abstract,final,native,static,或者synchronized。 Java编程语言的构造方法的应用非常广泛,它可以用于初始化新实例化的对象,设置实例变量的值。构造方法的主要工作是...

    synchronized的几种示例

    如果只希望锁定代码块而非整个方法,可以使用`synchronized`代码块,指定锁定对象为`this`。这适用于当类中有多个`synchronized`方法,但不想全部锁定的情况: ```java public class MyClass { private int ...

    java笔试题java笔试题java笔试题

    - 抽象方法(abstract method)不能是 static,因为 static 方法属于类,而抽象方法属于接口或抽象类,这两者不能结合。 - 抽象方法也不能是 native,因为 native 方法需要在其他代码(如C/C++)中实现,而抽象方法...

    java中synchronized用法

    在 Java 中,synchronized 关键字可以作用于 instance 变量、object reference(对象引用)、static 函数和 class literals(类名称字面常量)身上。 Synchronized 关键字的作用是取得对象的锁,而不是把一段代码或...

    JAVA访问修饰符大归纳

    + 抽象类中的抽象方法不能被定义成 private。 + 如果子类只需实现父类中的部分抽象方法,那么此时这个子类也只定义成抽象类。 + 如果子类还是抽象方法时,那么这个子类的子类必须实现所有的抽象方法(包括它爷爷...

    synchronized并发讲解源码.zip

    除了锁住对象或类,`synchronized`还可以与`wait()`、`notify()`和`notifyAll()`方法结合使用,实现复杂的线程通信和同步。这些方法都是在`Object`类中定义的,只有在持有对象锁的情况下才能调用,否则会抛出`...

    java面试笔试题经典版

    **关键字特性**:abstract方法不能是static、native或synchronized,因为它们的含义和抽象方法相冲突。构造器不能被重写,但可以被重载。 **对象传递**:当对象作为参数传递给方法时,传递的是对象的引用,而非对象...

    Java编程中常用修饰词使用方法

    Java 语言中的修饰词可以用来控制成员的访问权限、确保类和方法的不可变性、定义抽象类和抽象方法、调用 native 库、确保浮点计算的精度和可移植性、确保多线程环境中的安全执行等等。正确地使用修饰词可以提高 Java...

    synchronized用法大全实例

    在这个例子中,`increment`和`decrement`方法都被声明为同步,这意味着它们在同一时刻只能被一个线程访问,避免了并发计数的不一致性。 ### 2. 同步语句块 同步语句块允许我们对特定代码块进行同步,其语法结构...

    Synchronized关键字的用法

    - **实例方法**:可以直接将`synchronized`关键字放在实例方法前,此时该方法的锁为当前对象实例本身。 ```java public synchronized void method() { // 同步方法体 } ``` - 当一个线程调用此方法时,会锁定...

    JAVA synchronized详解

    通过使用`synchronized`,可以确保同一时刻只有一个线程能够访问被标记为同步的方法或代码块,从而避免多线程环境下的数据不一致问题。 #### 一、基本概念 `synchronized`关键字主要具有以下特性: 1. **互斥性**...

    JAVA面试题甲骨文

    答:abstract 方法不能是 static 的,也不能是 native 的或 synchronized 的。 20. 什么是内部类?Static Nested Class 和 Inner Class 的区别? 答:内部类是定义在另一个类中的类,Static Nested Class 是静态...

Global site tag (gtag.js) - Google Analytics