java源码常用关键字

 

native 

我们先来看看native关键字

jdk1.8 中的Class类中有这么一个方法:

 public native boolean isInstance(Object obj);

我们不管这个方法是做什么的,但是一看这个方法我们会觉得很奇怪,因为Class是一个类,而不是一个接口,居然还存在没有方法体的方法,带着疑问继续了解;

那么native这个单词有本地的意思,被native修饰的方法称作本地方法,是一个原生态的方法,它的实现不在当前文件中。

那么为什么不在当前文件中实现呢?要搞得这么麻烦!!

首先我们了解了虚拟机,知道java跨平台是因为虚拟机,而虚拟机通过接口来和不同的平台对接,因此java语言有了跨平台的特性,但也是因为如此,java语言不能去对操作系统的底层进行访问和操作,需要来借助其他语言来实现(比如C/C++);

volatile

  这个关键字说起来,估计要连带出一系列的问题(balabala.....)

简单的说Volatile关键字实际下有两层含义:

    A)保证了内存的可见性;

    B)禁止了指令的重排序;

何为内存的可见性,就是在我从主存中读取数据放到缓存区中的时候,我们修改数据,就会造成缓存中的数据和主内存中的数据不一致,而用volatile修饰的变量,一旦修改,就会写入内存中,而普通变量写入主内存的时机我们是不确定的;

 

指令的重排序:在我们写的代码中,jvm运行的时候并非都是按照代码的顺序来执行的,可以通过重排序来优化代码;

重排序:

int a=1;
int b=20;
int c=a+b;

 

我们先给a赋值,然后给b赋值,但是在运行时,jvm很有可能会先给b赋值,在给a赋值;

 

final 表示常量

  1. 修饰基础变量时,表示不可改变变量的值

 

     2. 修饰引用变量的时候,表示不可改变引用的地址,但是引用对象中的数据可以改变

 3.修饰类表示类不可被继承

4.修饰方法且方法使用public修饰,表示方法不可被重写,但方法可以被继承

重写报错

继承

public class Userfinal {
	public final void show(){
		System.out.println("i am show");
	}
	public static void main(String[] args) {
		Sonfinal sonfinal=new Sonfinal();
		sonfinal.show();
	}
}
class  Sonfinal extends Userfinal{

}

结果

i am show

 如果使用private修饰方法:则表示次方法不可被继承,但是在son中可以有方法show


public class Userfinal {
	private final void show(){
		System.out.println("i am show");
	}
	public static void main(String[] args) {
		Sonfinal sonfinal=new Sonfinal();
		sonfinal.show();
	}
}
class  Sonfinal extends Userfinal{
	public void show(){
		System.out.println("i  am  son  show");
	}
}
i  am  son  show

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值