首页 > 代码库 > 权限修饰符

权限修饰符

作为一个Java开发程序员如果一直都不能讲清楚权限修饰符,那我们在开发中将会面临很多困惑,今天我们就来由浅入深的了解一下常见的权限修饰符;

Java中常见的权限修饰符有public、private、protected、default、final、static、abstract、synchronized等,下面我们就来一一做一说明:

用来修饰类的访问权限的四个修饰符

技术分享

技术分享

其他一些修饰符

abstract:abstract修饰符可以用来修饰类,也可以用来修饰方法,

abstract修饰类,表明这个类是抽象类,抽象类中可以没有抽象方法,抽象类不能被实例化,即不能直接构造这个抽象类的对象,抽象类如果想要实例化,只能通过实例化其子类对象来实现,这是Java多态的一种体现,非抽象类继承抽象类的时候,必须要把抽象类中的方法实现;

abstract修饰方法,表示这个方法是抽象方法,抽象方法没有实现体,一个类中如果有抽象方法,那么该类一定是抽象类,抽象方法,要被继承该类的子类实现,如果子类没有实现,那么子类仍然是抽象类;

抽象不能被定义为private、final和static类型,因为抽象类一般是要被继承的类,修饰为private,那么子类不能访问,修饰为final,那么不能被继承,抽象方法不能被声明为static,abstract是抽象的,指的是方法只有声明没有实现,它的实现要放入声明该类的子类中实现;static是静态的,是一种类成员而不是对象的方法或属性,随着类的加载而被加载到内存中,可以直接通过类名来访问,但我们要知道类其实也是一个对象,类对象,他是class文件加载到虚拟机后就产生的字节码文件对象,通常来说他是单例的,就是整个虚拟机只有这么一个对象(当然,如果用新的类加载器也会产生新的字节码文件对象);当我们的方法被声明为abstract后,那么代表该方法是没有实现的,而我们为方法修饰static是为了,该方法能直接用类名来调用,不用创建对象,减轻内存压力,static修饰的方法是一定要有方法体的否则没有意义;

finalfinal可以用来修饰类、方法、和变量;final有最终的意思,被final修饰的类、方法、变量,不能被更改;’

final用来修饰类,表示这个类是个不能被继承的类,在jdk中有很多类是final修饰的,如String等,这些类,是不能被继承的,因为继承会存在重写这些类的风险,这是Java不允许的,所以修饰为final,被fianl修饰的类,代表很完美,不能更改;

final用来修饰方法,表明这个方法是不能被重写的,final修饰的方法,代表已经很完美了,不允许被修改;

final修饰变量,代表这个变量是常量,final修饰的变量一定要被显式初始化,并且一经赋值不能改变;final常被用来修饰一些数学中的常量,如圆周率等;

final修饰引用类型时,该引用类型不能被重新指向其他引用;

private类型的方法都默认是final方法,因此也不能被子类重写;私有的不能被其他类访问,就不存在被继承的问题;

static:static用来修饰方法和变量,代表静态,如果声明了静态,那么是随着类的加载是被单独放在方法区,因为方法区是一个数据共享区,不管什么变量访问它,都是同一份。静态可以通过类名调用来访问,也可以通过对象来调用,但我们一般不通过对象,那样会造成内存浪费;

静态方法中不能直接访问非静态的方法和变量,如果要访问,通过对象调用,非静态方法可以直接访问静态和非静态成员

静态方法中不能使用this和super关键字

静态方法不能被abstract修饰

静态方法和变量可以通过类名调用访问,非静态只能通过对象调用

类被加载时,静态代码块只能被执行一次。类中不同的静态方法代码块按他们在类中出现的顺序被依次执行。

当多个修饰符连用时,修饰符的顺序可以颠倒,不过作为普遍遵守的编码规范,通常把访问控制修饰符放在首位,其次是 static 或 abstact 修饰符,接着就是其他的修饰符

注意:以下修饰符一起用是无意义的,会导致编译错误: 
abstract 与 private 
abstract 与 final 
abstract 与 static

 

权限修饰符