关于修饰符的区别和用途,初学者经常会比较模糊,所以本文就修饰符在Java中的作用、区别进行简单而明确的说明。 初学者可能会写一个小一点的程序,但不知道修饰符有什么用。 但其实修饰符只要写过程序就看过。 例如,访问修饰符public、非访问修饰符Final等。
Java中为用户提供了很多修饰符,但主要分为访问修饰符和非访问修饰符两大类。
修饰符用于定义类、方法或变量。 通常放在句子的开头。 例如:
私密布尔我的标志;
静态final double weeks=9.5;
protectedstaticfinalintboxwidth=42;
最先进的私有、保护是修饰符。
访问修饰控件
默认、私有、公共和保护是访问控制修饰符。 保护对类、变量、方法和构造方法的访问。
default :缺省情况下,它在同一包中可见,不使用识别修饰符。
公共:共享,见于所有类。
protected :受保护,显示在同一包中的类和所有子类中。
private :私人的,只看起来是同一种。
以下,详细说明
默认访问修饰符(default ) )
这意味着只有与此类位于同一包中的类才能访问,比private限制少,但比protected限制多。 使用缺省访问修饰符声明的变量和方法将为同一包中的类显示。 接口中的变量隐式声明为public static final,但接口中方法的默认权限为public。
专用访问修饰符(私有) )
专用访问权限是最严格的访问权限,只能在设置了该权限的类中访问,类和接口不能声明为私有。 利用该访问权限,展示了封装思想。
声明为专用访问类型的变量只能通过类中的公共getter方法从外部类访问。 使用私有访问修饰符主要用于隐藏类的实现详细信息和保护类的数据。
示例:
受保护的访问修饰符(受保护)
受保护的访问权限。 除了对default的访问权限外,还可以访问由不同包继承的子类。 Protected访问修饰符无法限定类和接口。 方法和成员变量可以声明为Protected,但接口的成员变量和成员方法不能声明为Protected。 子类可以访问用Protected修饰符声明的方法和变量,从而保护无关类使用这些方法和变量。
示例:
公共访问修饰符(公共) )
声明为public的类、方法、生成方法和接口可以由其他类访问。 如果要相互访问的多个公共类分布在未使用的包中,则必须导入具有相应公共类的包。 由于类的继承性,类的所有公共方法和变量都由该子类继承。
例如:公共静态语音主.
访问控制和继承规则
在父类中声明为public的方法在子类中也必须是public。 这意味着在构建子类的过程中必须调用父类的生成方法。
在父类中声明为protected的方法在子类中声明为protected或public。 无法声明为私有。
无法继承在父类中声明为private的方法。
子类可以在自己的构造方法中使用super (约定列表)调用父类的构造方法。 如果使用super ) argumentlist (使用this (约定列表)调用此类的其他构造方法,则调用父类的构造方法
非访问修饰符
类修饰符
抽象类: abstract。 抽象类是指没有具体对象的概念类。
最后一类: final具有一些固定作用,用于完成某种标准功能的类; 这个班不可能有子类
变量修饰符
静态变量:静态变量是类中每个对象共享的变量,可以直接通过类名引用。 由于静态关键字用于声明独立于对象的静态变量,因此无论实例化了多少个对象的类,只有一个静态变量副本。
静态方法:使用静态关键字声明独立于对象的静态方法。 静态方法不能使用类的非静态变量。 静态方法从参数列表中检索数据,并计算这些数据
静态初始化器:静态初始化器是由关键字static启动的一组置于大括号中的语句。
1 )构造函数初始化对象,静态初始化器初始化类本身
2 )构造函数由系统在new上生成新对象时自动执行,静态初始化器是其所属的类
加载到内存中是通过系统调用执行的。
例如,静态{
System.out.println ('正在初始化……' ); //为了执行系统启动时的初始化工作
}
3 )静态
初始化器不是方法,没有方法名、返回值和参数列表abstract修饰符
用abstract修饰的类表示抽象类,抽象类不能被实例化。没有用abstract修饰的类称为具体类,具体类可以被实例化。用abstract修饰的方法表示抽象方法,抽象方法没有方法体。要注意的是:抽象方法用来描述系统具有什么功能,但不提供具体的实现。没有用abstract修饰的方法称为具体方法,具体方法必须要有方法体。
一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。 抽象类可以包含抽象方法和非抽象方法。
例子:
抽象方法
抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。抽象方法不能被声明成final和strict。 任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。简单来说就是在父类中的抽象方法是不会实现的,有子类继承以后子类中实现。看图可知。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。 抽象方法的声明以分号结尾,例如:public abstract sample();
例子:
Transient修饰符
首先, 被transient 修饰符修饰的变量, 表明其值不会被写入存储区域。被transient修饰的实例变量时,java虚拟机(JVM)跳过该特定的变量。其次, 被volatile修饰符修饰的变量, 表示其值在程序中可以发生变化,一般被应用于多线程的情况. 在多线程的情况下,每个线程都改变volatile变量的主副本。该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
Volatile修饰符
在一个变量被定义为Volatile之后,此变量对所有线程的可见性将会被保证。“可见性”是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。Volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
例子:
Final修饰符
Final变量:final修饰的变量表示此变量是“最后的、最终的”含义。一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。
Final方法
类中的Final方法可以被子类继承,但是不能被子类修改。而且Final修饰的方法表示此方法已经是"最后的",就是说此方法不能被重写。
例子:
Final类
Final类不能被继承,没有类能够继承final类的任何特性。
例子:
Synchronized修饰符
synchronized是与Java多线程同步有关的一个修饰符。如果用它来修饰一个类(通常这个类会继承Thraed)的非静态方法,那么当该类的某个对象调用该方法时,这个对象会被锁定,直到该方法返回之前,其他方法都不可能会被该对象调用。
本文对Java中的修饰符进行了说明了解,在平时的使用中,最常使用的访问修饰符。在非访问修饰符中,也是有常用的,但大部分对于初学者来说是不常见到的,或者老师在讲的过程中也是简单的讲一点不细讲。所以初学者可以先对这些修饰符进行了解,以后碰到的时候也不会一头雾水。