首页 > 技术文章 > Java 关键字详解

ruhuanxingyun 2020-07-28 20:38 原文

简介:java关键字是有特别意义的标识符,用来表示一种数据类型或者程序的结构等,关键字总共51个,见如下分类,关键字不能用作变量名、方法名、类名、包名和参数

    数据类型10个:boolean、int、long、short、byte、float、double、char、class、interface;

    流程类型14个:if、else、do、while、for、switch、case、default、break、continue、return、try、catch、finally;

    修饰符12个:public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native;

    动作10个:package、import、throw、throws、extends、implements、this、supper、instanceof、new;

    保留字5个:true、false、null、goto、const。

 

一、this(当前对象)

  1. 作用:用于任何实例方法内指向当前对象、也可指向对其调用当前方法的对象、或者需要当前类型对象引用时使用;

  2. this.属性名

    当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数;

  3. this.方法名

    A. Java允许对象的一个成员直接调用另一个成员,可以省略 this 前缀,但最好加上,增加阅读性;

    B. static修饰的方法中不能使用 this 引用,静态成员不能直接访问非静态成员;

  4. this() 访问本类构造方法

    A. this()只能写在构造方法中,且必须是第一条语句。

 

二、static(静态变量和静态方法)

  1. 概念

    A. 静态变量(类变量):用static修饰的属性,属于类,使用类名.属性调用;

    B. 静态方法(类方法):用static修饰的方法,属于类,使用类名.方法调用;

    C. 成员变量:包含静态变量和实例变量;

  2. 静态变量和实例变量的区别

    静态变量

      A. 运行时,Java 虚拟机只分配一次内存,在加载类的过程中完成静态变量的内存分配;

      B. 在类的内部,可以在任何方法内直接访问静态变量;

      C. 在其他类中,可以通过类名访问该类中的静态变量;

    实例变量

      A. 每创建一个实例,Java 虚拟机就会为实例变量分配一次内存;

      B. 在类的内部,可以在非静态方法中直接访问实例变量;

      C. 在本类的静态方法或其他类中则需要通过类的实例对象进行访问;

  3. 静态方法和实例方法的区别

    A. 静态方法不需要通过它所属的类的任何实例就可以被调用;

    B. 在实例方法中可以直接访问所属类的静态变量、静态方法、实例变量和实例方法;

    C. 在访问实例方法时,需要通过实例对象来访问,而在访问静态方法时,可以直接访问,也可以通过类名来访问,还可以通过实例化对象来访问;

  4. 静态代码块

    A. 类中的 static{ } 静态代码块,主要用于初始化类,为类的静态变量赋初始值,提升程序性能,注意非静态代码块就是不用static修饰{};

    B. 静态代码块类似于一个方法,但它不可以存在于任何方法体中;

    C. 若需要进行一次的初始化操作都放在 static 代码块中进行;

    D. 类中可包含多个静态代码块,则会按顺序依次执行它们,每个静态代码块只会被执行一次。

  5. 初始化顺序

    A. 静态变量和静态代码块优先于实例变量和普通语句块,静态变量和普通语句块的初始化顺序取决于它们在代码中的顺序;

       B. 继承:父类(静态变量、静态语句块) > 子类(静态变量、静态语句块) > 父类(实例变量、普通语句块) > 父类(构造函数) > 子类(实例变量、普通语句块) > 子类(构造函数)。

 

三、final(不可改变)

  1.  final修饰变量

    A. final修饰的成员变量称为常量,字母应全部大写;

    B. final修饰的成员变量若在声明时没有赋值的叫"空白final变量",空白final变量必须在构造方法或静态代码块中初始化;

    C. final修饰的局部变量必须初始化值;

    D. 对基本类型变量来说是其值不可改变,而对引用类型变量来说是其引用的地址值不可再变,但引用指向对象里的内容是可以发生改变的;

  2. final修饰方法:方法仅仅是不能被重写,并不是不能被重载;

  3. final修饰类:表示该类是无法被其他类继承。

 

四、synchronized(锁)

  1. 锁分类

    按使用位置划分:

      A. 同步方法锁:synchronized修饰普通方法,锁对象为this,若修饰静态方法,则由对象锁变为类锁;

      B. 同步代码块锁:可以是this,也可以是自定义对象,若指定锁对象为class对象,则由对象锁变为类锁;

    按作用域划分:

      A. 对象锁:锁在当前实例上,可以是this,也可以是自定义对象;

      B. 类锁:锁在Class类上,无论哪个线程访问它,需要的锁只有一把;

 

  2. 

 

推荐阅读