Java 修饰符

 

适用范围<访问权限范围越小,安全性越高>

      访问权限   类   包  子类  其他包

        public     ∨   ∨    ∨     ∨          (对任何人都是可用的)

        protect    ∨   ∨   ∨     ×    (继承的类可以访问以及和private一样的权限)

        default    ∨   ∨   ×     ×    (包访问权限,即在整个包内均可被访问)

        private    ∨   ×   ×     ×    (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)

 

类修饰符:

public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。

abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。

final,将一个类生命为最终(即非继承类),表示他不能被其他类继承。

friendly,默认的修饰符,只有在相同包中的对象才能使用这样的类。

  

成员变量修饰符:

public(公共访问控制符),指定该变量为公共的,他可以被任何对象的方法访问。

private(私有访问控制符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。

protected(保护访问控制符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。

friendly ,在同一个包中的类可以访问,其他包中的类不能访问。

final,最终修饰符,指定此变量的值不能变。

static(静态修饰符)指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。

transient(过度修饰符)指定该变量是系统保留,暂无特别作用的临时性变量。

volatile(易失修饰符)指定该变量可以同时被几个线程控制和修改。

  

方法修饰符

public(公共控制符)

private(私有控制符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)

protected(保护访问控制符)指定该方法可以被它的类和子类进行访问。

final,指定该方法不能被重载。

static,指定不需要实例化就可以激活的一个方法。

synchronize,同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。

native,本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。

abstract,修饰的方法为抽象方法没有方法体需要在子类中实现,它所在的类一定是抽象类

 

自己的体会:

1.如果一个类的构造方法不写public,那它就是默认的default,那它只能被同包访问(包括继承,引用等)

2.abstract修饰的类,如果不加修饰符默认是friendly,只有同包的能访问,抽象类中可以有普通方法,抽象类中可以没有抽象方法不会报错但没有意义,抽象方法默认的修饰符是 friendly

3.static 不能修饰外围类,因为static的作用是把成员变成类的,所以static修饰外围类没有意义

4.内部类的成员不能用static修饰,因为内部类本身是外围类实例的一个成员是实例私有的,如果给内部类的成员设置static,那相当于共享了这个成员这违背内部类的初衷,是没有意义的,所以java编译器的语义分析会提示出错

5.final abstract 不能同时修饰一个类或者方法,因为abstract的初衷是不提供实例就是要子类去继承实现他未实现的方法,而final就是最终的方法或者类不能被继承,两者在编译器的语义分析中冲突会提示报错

6.abstract不能修饰变量

7.interface 默认的修饰符是 abstract 和friendly并不是public 

java接口本身默认是abstract的;可以是public的,也可以是friendly的,但不可以是private 的,不可以是protected的(否则通不过编译)。

8.interface中的方法都是默认public 和 abstract的

java接口里的方法默认是abstract的,public 的;不可以private 的,不可以是protected 的。

9.java8的新特性interface中的static方法和default方法

10.调用final static 修饰的常量并不会使类初始化

11.abstract 方法只能用访问修饰符 public 或者protected!

抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。

本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。

synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。

抽象方法需要子类重写,如果用private子类是无法访问的,因此二者是矛盾的。
 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值