一、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. 在CentOS上安装node.js的时候报错:No acceptable C compiler found!解决办法

    在CentOS上安装node.js的时候报错:No acceptable C compiler found! 原因:没有c编译器. 解决办法:安装GCC 命令如下: #yum install gcc ...

  2. 用JavaScript编写气泡

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 京东7Fresh新零售架构设计分析

    7Fresh是京东第一个线上线下融合落地的零售创新业务模式,店内有大量设备的集成,设备供应商达50多家,针对线下业务的特点,团队独立规划和设计POS收银系统.店内生产系统.加工系统.货架陈列系统.魔镜 ...

  4. 网页静态化解决方案-Freemarker

    1.1    技术简介与使用 1.1.1     简介 为什么使用: 1.  减轻数据库的访问压力,静态化比较适合大规模且相对变化不太频繁的数据: 2.  有利于SEO(搜索引擎优化); 纯的HTML ...

  5. 【js】 ajax 与 axios 区别

    ajax 与 axios区别 Ajax: Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发 ...

  6. 关于Spring配置文件提示的插件下载

    1.springsource-tool-suite-update 最新各个版本下载地址 第一种方式: springsource-tool-suite-3.7.3.RELEASE-e4.5.2-upda ...

  7. 笔记:javascript操作iframe内的DOM元素,及调用iframe内的方法

    iframe相当于一个嵌入在网页内的浏览器,它与当前网页是隔离的. 但有时我们也需要在当前网页操作iframe内的元素或操作iframe内的javascript方法. 在网页内操作DOM元素,是使用d ...

  8. transform动画的一个3D的正方体盒子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. thinkPHP写txt日志文件

     file_put_contents(DATA_PATH.'文件名.txt', '收到请求:' . date('Y-m-d H:i:s') . PHP_EOL . '通知信息:' . $显示的变量名. ...

  10. Delphi Compiler Bug?

    I found a Bug of Delphi XE3 Compiler,It may exists in XE4,XE5. Here is the code to show the bug proc ...