Java修饰符
一、类修饰符(3种)
- public
- final
- abstract
public 访问修饰符,公开访问
当前类可以在任何地方访问
final 最终类,不能被继承
当前类不能被继承
final 中文【最终的】
abstract 抽象类
当前类是抽象类,可以包含抽象方法,不能new实例对象
PS:对类来说
final和abstract不能同时使用,
原因abstract类一般要被子类继承并实现其抽象方法,而final则表示此类不能被继承。
常用例子:
公有类:
public class Abc{
......
}
公有抽象类:
public abstract class Abc{
......抽象方法可选,一般要有,也可没有
}
补充:静态内部类和非静态内部类
静态内部类 只能访问外部类的静态成员
非静态内部类 可以访问外部类的静态成员和非静态成员
详见:java中的Static class https://www.cnblogs.com/kissazi2/p/3971065.html
二、变量修饰符
2.1 成员变量(5种)
- public/protected/不写/private
- static
- final
- volatile
- transient
public/protected/不写/private 访问修饰符
public: 【任何地方】 都可以访问
protected: 【当前成员变量所在包,或其他包中此类的子类】 可以访问
不写:【当前成员变量所在包 】可以访问
private: 【只在当前成员变量所在类中】 可以访问
static 静态变量
表示此变量为静态变量或类变量。在类加载时就被创建,在内存中只有一个副本。
可以通过类名.静态变量名访问,不必new出来一个对象之后再访问。
final 最终修饰符,不可修改变量
表示此成员变量的值不能被更改,在声明变量时必须用=初始化。
初始化之后试图修改final变量的值会报错。
public class Test {
final int id = 1;
//final int id ;final成员变量不初始化会报错
void fun(){
// id = 1;//试图修改final变量的值会报错
}
}
volatile 易失变量
表示此成员变量可同时被几个线程控制和修改
与并发有关
volatile中文【不稳定的、易变的】
原因final要求变量不能更改,bolatile表示变量可以被几个线程同时控制和修改
transient 短暂的(不需持久化,与序列化有关)
在对象序列化时,不会序列化此成员变量。
原因此成员变量不需要持久化,此成员变量可以被其他成员变量推出,
或没有序列化的必要。
PS:对成员变量来说
volatile和final不能同时使用
常用例子:
公有静态常量:用类名就可访问,但是不能修改值。
public static final int MAX = 100;//公有静态常量
2.2 方法内的局部变量(1种)
只能用final修饰符修饰,表示此变量值不可以被修改。
格式: final/不写 变量名
对final修饰的局部变量:
- 声明时直接用=初始化,之后再用 变量名=值,无法通过编译
- 声明后用=赋值,之后不可再用 变量名=值,无法通过编译
class Test2{
void fun1(){
final int a=1;
// a = 1;//则报错
// a = 2;//则报错
}
void fun2(){
final int a;
a = 1;
// a = 1;则报错
// a = 2;则报错
}
}
三、方法修饰符
3.1 构造函数(1种)
public/protected/不写/private 访问修饰符
访问修饰符参考上边。
格式:
public/protected/不写/private + 类名(形参列表){
构造函数内容
}
PS:构造函数不需要写返回值,void也没有。
常用例子:
最常用的构造方法:
public Student(int id){
}
单例中防止其他函数调用构造函数:
private Student(int id){
}
3.2 非构造函数(6种)
public/protected/不写/private 访问修饰符
同上
static 静态方法
静态方法或类方法,可以通过类名.静态方法名 访问,
不需要先new一个对象再调用函数。
final 不可重写方法
子类继承父类时,不可以重写此方法。
abstract 抽象方法
不需要实现的方法
synchronized 同步方法
方法执行前加锁,其他线程不可以再执行此方法。
方法执行结束后解锁,其他线程可以再加锁执行此方法。
会影响性能
synchronized 中文【同步的】
native 本地方法
此方法会用其他语言在程序外部实现。一般为调用C++实现的方法,
与具体操作系统有关。
PS:对方法来说
final abstract 不能同时使用
static abstract不能同时使用
常用例子:
公有静态方法:
public static int fun1(int num){
.......
}
四、接口的修饰符(1种)
接口的修饰符只有 public/不写。访问修饰符。
常用例子:
公有接口:
public interface IXXXHandlder{
.......
}