一、static

  static(静态的),可以放在类、方法、字段之前。

  通常,当创建类时,就是在描述那个类的外观与行为。除非用 new 创建那个类的对象,否则,实际上并未获得任何对象。执行 new 来创建对象时,数据存储空间才会被分配,其方法才可被外界调用。但是有两种情形上述方法无法解决。其一:只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象;另一种情形是,希望某个方法不与包含它的类的任何对象关联在一起,也就是说,即便没有创建对象,也能够调用这个方法。

  static关键字可以满足上述要求。当声明一个事物是 static 时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起,因此,即便从未创建某各类的任何对象,也可以调用其static方法或者访问其static域。

  将static关键字放在定义之前,就可以将字段或方法设定为static。

1)static类

  当一个类定义为static类型时,表明这是一个静态类。如果一个类被声明为静态类,那么只有一种情况:静态内部类(嵌套类)。关于嵌套类,我会在其他地方详细说明。

2)static方法

  通常,将一个方法声明为静态的,表明可以直接通过 “类名.方法名” 的方式来调用这个方法,而无需创建该类的对象,但是会有一些限制:

· 静态方法只能调用静态方法,不能在静态方法中调用非静态方法;

· 静态方法只能访问静态数据成员

· 静态方法不能以任何方式引用 this 或 super

3)static数据成员

   当一个数据成员被声明为静态的时,这个数据是唯一的,因为对于每个类来说,一个static字段只有一份存储空间(非static字段是每个对象都有一份存储空间),当改变这个字段时,在程序的所有地方这个字段都会被修改。引用也很方便,直接 “类名.静态变量名”即可。

  

二、final

  JAVA中使用final关键字,通常表明这个地方是不可被改变的。

1)final数据

  final数据用来表明一个不可被修改的数据。对于基本数据类型,final使数值保持不变;对于对象引用,final使引用恒定不变,即一旦引用被初始化指向一个对象,就无法再让它改为指向另一个对象,但是对象自身是可以被修改的。对比static来说,static表明这个域只有一份存储空间,但是其值是可以改变的;final表明这是一个常量。因而既是static又是final的域只占据一段不能被改变的存储空间,类似于“全局变量”,用大写表示。

2)final方法

  使用final方法可以把方法锁定,防止任何继承类修改它的含义(不可被覆盖)。final方法的速度比非final方法要快,因为在编译时已经静态绑定了,不需要进行动态绑定,只是这样带来的效率又会引起一些其他问题,现在已经不再需要final方法去进行优化,只有想要明确禁止覆盖时,才将方法设置为final的。

  另外,所以private方法都隐式地声明为final的,是不能被覆盖的。当你试图在子类中覆盖父类的private方法时,你不是在覆盖,而是创建了一个与父类的该方法方法名一样的新方法。

3)final类

  当一个类被定义为final时,就表明我们不打算继承该类,而且也不允许别人这样做,这个类将不会有子类。

三、this

  当你需要在方法的内部获得对当前对象的引用时,需要用到this关键字。 this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。this关键字主要有两个应用:

1)返回对当前对象的引用,因而可以在实例代码中调用本类的其他方法或成员变量:this.方法名,this.成员变量名;

2)将当前对象传递给其他方法,这样可以让构造器调用同一个类的其他构造器,只是调用时,this语句要放在构造器的第一行。另外,this只能调用一个构造器,而不能调用两个。

四、super

  关键字super有两种用途:

1)调用父类的构造器:

  super();    // 调用父类的无参构造器(默认构造器),子类一般都会隐式调用父类的默认构造器

  super(参数);  // 调用父类的与参数匹配的构造器,

super语句必须出现在子类构造方法的第一行,这是显式调用父类构造方法的唯一方法。在任何情况下,构造一个类的实例时,将会沿着继承链一一调用父类的构造器,确保初始化。

2)调用父类的方法:

  super.方法名(参数);

注:this和super不能同时出现在一个构造器里面;

  this()和super()均不能在static环境中使用;

  可以这样理解,this是指向当前对象的,super是指向父类的。

JAVA学习笔记--简介几个常见关键字static、final、this、super的更多相关文章

  1. 疯狂java学习笔记之面向对象(四) - this关键字

    Java中this关键字主要有以下两个方法: 1.this引用 - 可用于任何非static修饰的方法和构造器中,当this用于方法中时,它代表调用该方法的实例/对象;当this用于构造器中时,它代表 ...

  2. java学习笔记(八):继承、extends、super、this、final关键字

    继承解决代码重用的问题,方便管理和维护代码. 继承 子类拥有父类非private的属性,方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以用自己的方式实现父类的方法. Java ...

  3. Java学习笔记(十八):static关键字

  4. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  5. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  6. java学习笔记08--泛型

    java学习笔记08--泛型 泛型可以解决数据类型的安全性问题,它主要的原理,是在类声明的时候通过一个标识标识类中某个属性的类型或者是某个方法的返回值及参数类型.这样在类声明或实例化的时候只要指定好需 ...

  7. java学习笔记5--类的方法

    接着前面的学习: java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址 ...

  8. java学习笔记(2)注释、public lcass、class、标识符、字面值、变量

    java学习笔记(1)中说过了java的一些基础知识,发展史,特点,编译和运行过程,配置环境变量等,接下来开始介绍java的语法等只是点  关于java源程序中的注释: *什么是注释?注释的作用是什么 ...

  9. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

随机推荐

  1. nRF5 SDK for Mesh(二) Getting started 快速开始

    Getting started To get started, take a look at the Light switch demo. It shows how a simple applicat ...

  2. 苹果编程语言Swift简介

    Swift是什么? Swift是苹果于WWDC 2014发布的编程语言,The Swift Programming Language的原话: Swift is a new programming la ...

  3. mysql常见字符串处理函数

  4. PDO介绍(16)

    安装PDO PDO的数据选项 链接到数据库服务器并选择数据库 错误处理 获取和设置属性 查询执行 准备语句介绍 获取数据 设置绑定列 处理事务

  5. CSP 试题编号201803-2 Java实现

    package HB; import java.util.Scanner; public class Test_06 { public static void main(String[] args) ...

  6. Linq 和 SQL的左连接、右连接、内链接

    在我们工作中表连接是很常用的,但常用的有这三种连接方式:左连接.右连接.内链接 在本章节中讲的是1.如何在Linq中使用左连接,右连接,内连接. 2.三种连接之间的特点在哪? 3.Linq的三种连接语 ...

  7. web前端开发插件(无需重复造轮子)

    1.artdialog 对话框组件 简介:是一个基于JavaScript编写的对话框组件,他拥有精致的界面与友好的接口 文档链接:http://www.daimajiayuan.com/downloa ...

  8. C++练习 | 创建并倒序输出不带头结点的链表

    #include <iostream> #include <cstdio> #include <stdlib.h> #include <stack> u ...

  9. C++_构造函数与析构函数

    构造函数与析构函数 OOP第二课 1 构造函数 1.1 构造函数具有一些特殊的性质 1.2 定义构造函数的一般形式 1.3 利用构造函数创建对象 2 成员初始化表 3 缺省参数的构造函数 4 重载构造 ...

  10. PHP设置Redis key在当天有效|SCP对拷如何连接指定端口(非22端口)的远程主机

    $redis->set($key,$value); $expireTime = mktime(23, 59, 59, date("m"), date("d" ...