一文搞懂Java修饰符

开课吧开课吧锤锤2021-07-16 16:08

每天的生活中,每一个人都有自己的私人空间,就像自己的日记,是不允许别人随便看的。同样的,编程也是如此,出于数据安全等因素,有些内容不希望被外部访问,我们就是要设置一些限制,来控制它是否能被访问以及被谁访问。  

Java修饰符

1.修饰符介绍  

Java的修饰符根据修饰的对象不同,分为  

1、类修饰符  

2、方法修饰符  

3、变量修饰符  

其中每种修饰符又分为  

1、访问控制修饰符  

2、非访问控制修饰符  

1.1访问控制修饰符  

权限修饰符是用来控制元素的访问权限。  

修饰符 同一类 同一个包 子类 不同包非子类
public
protected  
default    
private      

1.1.1访问控制修饰符修饰类  

修饰外部类:只能使用public和默认  

//修饰外部类
public class Demo {
    
}
class Demo02{
    
}

修饰内部类:四种权限修饰符都可以使用  

public class Demo {
    //修饰内部类
    public class A{

    }
    protected class B{

    }
    class C{

    }
    private class D{

    }
}

为什么外部类不使用private和protected修饰。  

如果外部类使用private,其他类根本不能访问他,那这个类就失去了存在的意义。  

如果使用protected,在不同包下的类A,想要访问被protected修饰的类B,就必须继承类B。如果想要继承类B,那类A必须得有访问类B的权限。所以这个时候就存在矛盾了,所有这个修饰词没有意义。  

1.1.2访问控制修饰符修饰类变量  

四种权限修饰符都可以使用,各种的访问权限不一样。  

public class Demo {
    
    public int a = 1;
    protected int b = 2;
    int c = 3;
    private int d = 4;
}

1.1.3权限修饰符修饰类方法  

四种权限修饰符都可以使用,各自的访问权限不一样。  

public class Demo {
    //类方法
    public void a(){};
    protected void b(){};
    void c(){};
    private void d(){};
}

1.2非访问控制修饰符  

1.2.1非访问控制修饰符修饰类  

修饰符 解释
abstract 抽象类修饰符
final 最终类修饰符

表明是抽象类 

public abstract class Demo {
}

 最终类:当一个类不能被继承时可用修饰符final修饰为最终类  

public final class Demo {
}

1.2.2非访问控制修饰符修饰类方法  

修饰符 解释
abstract 抽象方法控制符
final 最终方法控制符
static 静态方法控制符
native 本地方法控制符
synchronized 同步方法控制符

抽象方法控制符abstract:用修饰符abstract修饰的方法称为抽象方法。抽象方法仅有方法头,没有方法体和操作实现。  

静态方法控制符static:用修饰符static修饰的方法称为静态方法。静态方法是属于整个类的类方法;而不使用static修饰、限定的方法是属于某个具体类对象的方法。由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,即static方法只能处理static的域。  

最终方法控制符final:用修饰符final修饰的方法称为最终方法。最终方法是功能和内部语句不能更改的方法,即最终方法不能重写覆盖。final固定了方法所具有的功能和操作,防止当前类的子类对父类关键方法的错误定义,保证了程序的安全性和正确性。所有被private修饰符限定为私有的方法,以及所有包含在final类(最终类)中的方法,都被认为是最终方法。  

本地方法控制符native:用修饰符native修饰的方法称为本地方法。为了提高程序的运行速度,需要用其它的高级语言书写程序的方法体,那么该方法可定义为本地方法用修饰符native来修饰。  

同步方法控制符synchronized:该修饰符主要用于多线程程序中的协调和同步。  

1.2.3非访问控制修饰符修饰类变量  

修饰符 解释
final 最终域修饰符
static 静态域修饰符
volatile 易失 ( 共享 ) 域修饰符
transient 暂时性域修饰符

用static修饰的成员变量仅属于类的变量,而不属于任何一个具体的对象,静态成员变量的值是保存在类的内存区域的公共存储单元,而不是保存在某一个对象的内存区间。该类的任一对象访问它时取到的都是相同的数据;该类的任一对象修改它时,也都是对同一个内存单元进行操作。  

最终域修饰符final是用来定义常量的。一个类的域(成员变量)如果被修饰符final说明,则它的取值在程序的整个执行过程中都是不变的。  

易失(共享)域修饰符volatile是用来说明这个成员变量可能被几个线程所控制和修改。也就是说在程序运行过程中,这个成员变量有可能被其它的程序影响或改变它的取值。  

暂时性域修饰符transient用来定义一个暂时性变量。其特点是:用修饰符transient限定的暂时性变量,将指定Java虚拟机认定该暂时性变量不属于永久状态,以实现不同对象的存档功能。否则,类中所有变量都是对象的永久状态的一部分,存储对象时必须同时保存这些变量。  

1.3小结  

访问控制修饰符可以单独使用,也可用和非访问控制修饰符一起搭配使用。  

2.接口中的修饰符  

接口中的访问控制修饰符只能是public,所以访问修饰符默认为public,可以不写。  

接口的非控制修饰符默认为abstract,可以不写。  

接口中方法必须是抽象方法,而控制修饰符只能是public,所有默认是publicabstract,可以不写。  

接口中的属性,默认是publicstacticfinal,可以不写。  

public abstract interface List {
    //变量
    public static final int a = 1;
    //方法
    public abstract void b();
}

JDK1.8之后的新特性,可以有静态方法和default修饰的方法(此处不能称为默认,因为接口中的默认是publicabstract)  

public abstract  interface List {
    //变量
    public static final int a = 1;
    //方法
    public abstract void b();
    
    static void c() {

    }
    default void d(){

    }
}

以上就是开课吧广场小编为大家整理发布的“一文搞懂Java修饰符”一文,更多Java教程相关内容尽在开课吧Java教程频道。  

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
高并发编程训练营