Java访问修饰符(访问控制符)_【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符...

dab7b575cc089444a6446454cfb1d286.png

上章讲了访问控制符,这章开始讲非访问控制符。

java中的非访问修饰符的作用各不一样,据我所知常用的有六种:

static

final

abstract

synchronized

volatile

transient

今天我们只讲前三种,后面三种等我们讲到线程的时候再回过头来讲。

首先还是通过一张经典的表我们来观察它们可修饰的内容:

非访问修饰符

基本含义

方法

成员变量

局部变量

static

静态的/全局的

√(只可修饰内部类)

×

final

最终的

abstract

抽象的

×

首先我们来说说static:

被static修饰的方法我们称为静态方法或全局方法,被static修饰的成员变量和成员方法独立于该类的任何对象,只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。简单来说,我们可以把被static修饰的方法当做是在程序启动的时候就被创建了,在调用的时候不需要去实例化对象:

我们先创建一个类,在类里写一个static方法和一个普通方法

public class Demo {

public static String test(){

return "测试一下";

}

public String test1(){

return "测试一下";

}

}

再创建一个类,不用实例化对象的方法直接去调用:

public static void main(String[] args) {

String demo = Demo.test();

System.out.println(demo);

}

我们在用快捷键的时候也会发现,只能调用static方法test,不能调用普通方法test1

94edfb0dd2dd25625e284477c788a6e0.png 当然,处理外部类,别的被static修饰的方法,类,变量,都具有这种不通过实例化对象直接调用的特性,那么什么是外部类,内部类呢:

c2d69bbf4225908cf355686a9bf3d1b0.png 如图,我们的demo就是外部类,demo1急速内部类。 至于什么是局部变量:

e873cfee87bbc727b659fcd22dfa2817.png 图中,我们的a便是成员变量,又叫全局变量,b就是局部变量了,全局变量是在整个类中,所有的方法都可以使用,而局部变量则只有这样一个方法可以使用

再说final: final翻译过来是最终的意思,被final修饰的内容是无法改变的,因此我们一般用来修饰常量。

final类不能被继承,没有子类,final类中的方法默认是final的。

final方法不能被子类的方法覆盖,但可以被继承。

final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

final不能用于修饰构造方法。

最后来说说abstract: abstract翻译过来是抽象的,那么我们用来修饰的类叫做抽象类,修饰的方法叫做抽象方法

abstract类不能实例化

abstract类不能有具体类(有方法体的类),普通类不能有abstract方法

abstract类的子类必须重写父类中所有的abstract方法。

仅当abstract类的子类实现其父类的所有abstract方法时,才能实例化abstract类的子类。

如果abstract类的子类没有实现其父类的所有abstract方法,该子类也是abstract类

abstract关键字不能应用于static、private 或final方法,因为这些方法不能被重写,因此,不能在子类中实现

final类的方法都不能是abstract,因为final类不能有子类

就拿最后一条举例子: 我们先写一个抽象类并且写一个抽象方法:

public abstract class Demo {

public abstract String test();

}

然后,当我们写一个类去继承它的时候:

090643274d1a7fffe725580a8791dc3f.png 这里报了错,我们点开错误详情可以看到它给了我们两种方法,一种是重写类里面的方法,另一种是把本类也设置为abstract类

8ea093370db26d207cf62554186e4fbb.png 我们试试第一种:

public class Test extends Demo {

@Override

public String test() {

// TODO Auto-generated method stub

return null;

}

}

第二种:

public abstract class Test extends Demo {

}

另外情况大家可以自己去做做实验,在这就不多讲了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值