JAVA学习笔记--简介几个常见关键字static、final、this、super
一、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的更多相关文章
- 疯狂java学习笔记之面向对象(四) - this关键字
Java中this关键字主要有以下两个方法: 1.this引用 - 可用于任何非static修饰的方法和构造器中,当this用于方法中时,它代表调用该方法的实例/对象;当this用于构造器中时,它代表 ...
- java学习笔记(八):继承、extends、super、this、final关键字
继承解决代码重用的问题,方便管理和维护代码. 继承 子类拥有父类非private的属性,方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以用自己的方式实现父类的方法. Java ...
- Java学习笔记(十八):static关键字
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记08--泛型
java学习笔记08--泛型 泛型可以解决数据类型的安全性问题,它主要的原理,是在类声明的时候通过一个标识标识类中某个属性的类型或者是某个方法的返回值及参数类型.这样在类声明或实例化的时候只要指定好需 ...
- java学习笔记5--类的方法
接着前面的学习: java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址 ...
- java学习笔记(2)注释、public lcass、class、标识符、字面值、变量
java学习笔记(1)中说过了java的一些基础知识,发展史,特点,编译和运行过程,配置环境变量等,接下来开始介绍java的语法等只是点 关于java源程序中的注释: *什么是注释?注释的作用是什么 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
随机推荐
- iOS获取设备ip地址(OC版)
#import <SystemConfiguration/CaptiveNetwork.h> #import <ifaddrs.h> #import <arpa/inet ...
- TopJUI Combobox onSelect 事件失效BUG
版本:2.2.8 onChange : function(b, c) 两个参数:当前选择后在Combobox中显示的数据,实际是textField:另一个是改变前的数据 onSelect : func ...
- MySQL语句的优化
1.使用limit 当不需要取出全部数据时,在查询后面加上limit限制. 2.select * 每次看到select * 的时候都需要用怀疑的眼光审视,是不是真的需要返回全部的列. 3.重复查询相同 ...
- OpenWrt-Git依赖报错
前言 在Ubuntu中搭建openwrt编译环境时,安装完了需要的软件之后,我们执行命令检查依赖是否满足, make defconfig 有时会出现以下警告: ihid@ubuntu:~/chaos_ ...
- kubernetes常用基础命令
创建资源对象 创建名为nginx-deploy的控制器资源对象 [root@master ~]# kubectl run nginx-deploy --image=nginx:1.12 --repli ...
- BurpSuite—-Scanner模块(漏洞扫描)
一.简介 Burp Scanner 是一个进行自动发现 web 应用程序的安全漏洞的工具.它是为渗透测试人员设计的,并且它和你现有的手动执行进行的 web 应用程序半自动渗透测试的技术方法很相似. 使 ...
- PAT (Basic Level) Practice (中文)1001
1001 害死人不偿命的(3n+1)猜想 (15 分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复 ...
- Testing for diversifying selection for two clades with a background clade
在利用branch-site检测趋同进化的时候 .可以将各个趋同进化枝分别进行检测,分析的时候不去除某一趋同枝系 .在分析的时候,需要去除其他趋同枝系的影响 I have sequences of a ...
- Hadoop命令大全
Hadoop命令大全 分类: 云计算2011-03-01 15:04 6852人阅读 评论(0) 收藏 举报 hadoop作业任务集群class脚本 1.列出所有Hadoop Shell支持的命令 ...
- 20155224 《实验二 Java面向对象程序设计》实验报告
实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 没有Linux ...