Java关键字详解之final|Java关键字详解之final static this super的用法
目录
- 1. final 关键字:
- 2. static 关键字:
- 3. this 关键字:
- 4. super 关键字:
正文开始@Assassin
1. final 关键字:
final
关键字,意思是最终的、不可改变的,初始化之后就不能再次修改 ,用来修饰类、方法和变量,具有以下特点:final
修饰的类不能被继承,final
类中的所有成员方法都会被隐式的指定为 final 方法;final
修饰的方法不能被重写;final
修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另一个对象;
2. static 关键字:
static
关键字主要有以下四种使用场景:- 修饰成员变量和成员方法: 被
static
修饰的成员属于类,不属于单个这个类的某个对象,也就是说被类中所有对象共享,可以并且建议通过类名调用(创建对象来调用也不报错,不建议 )。被static
声明的成员变量属于静态成员变量,静态变量 存放在Java
内存区域的方法区。调用格式:类名.静态变量名
,类名.静态方法名()
- 静态代码块: 静态代码块定义在类中方法外, 静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 该类不管创建多少对象,静态代码块只执行一次;
- 静态内部类(static 修饰类的话只能修饰内部类): 静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非 static 成员变量和方法。
- 静态导包(用来导入类中的静态资源,1.5 之后的新特性): 格式为:
import
,static
这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法。
3. this 关键字:
this
是自身的一个对象的引用,可以简单地理解为代表对象本身,(本质上this是一个变量,存储的是当前对象的地址)。站在内存的角度,也就是说:this
是指向对象本身的一个指针。this 的用法在 Java 中大体可以分为3种:
- 普通的直接引用
- 形参与成员名字重名,用 this 来区分:
class Person {private int age = 10; public Person(){System.out.println("初始化年龄:"+age); }public int getAge(int age){this.age = age; return this.age; }} public class TestDemo {public static void main(String[] args) {Person assassin = new Person(); System.out.println("assassin's age is " + assassin .getAge(12)); }}
运行结果:
文章图片
文章图片
可以看到,这里 age 是 getAge 成员方法的形参,this.age 是 Person 类的成员变量。
- 引用构造函数
super
一起讲,this
跟super
很像,都是对象的引用;4. super 关键字:
super
可以理解为是指向自己父(超/基)类对象的一个指针,指向的是离自己最近的一个父类。super 也有三种用法:
- 普通的直接引用
this
类似,super
相当于是指向当前对象的父类,这样就可以用 super.xxx
来引用父类的成员。- 子类中的成员变量或方法与父类中的成员变量或方法同名
package com.test; class Country {String name; void value() {name = "China"; }}class City extends Country {String name; void value() {name = "Shanghai"; super.value(); //调用父类的方法System.out.println(name); System.out.println(super.name); }public static void main(String[] args) {City c=new City(); c.value(); }}
【Java关键字详解之final|Java关键字详解之final static this super的用法】运行结果:
文章图片
文章图片
可以看到,这里既调用了父类的方法,也调用了父类的变量。若不调用父类方法
value()
,只调用父类变量 name
的话,则父类 name
值为默认值 null
。- 引用构造函数
super(参数)
:调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。this(参数)
:调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。使用 this 和 super 要注意的问题:
- 在构造器中使用
super()
调用父类中的其他构造方法时,该语句必须处于构造器的首行,否则编译器会报错。另外,this
调用本类中的其他构造方法时,也要放在首行。-this
、super
不能用在static
方法中。
被
static
修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享。而 this
代表对本类对象的引用,指向本类对象;而 super
代表对父类对象的引用,指向父类对象;所以, this
和 super
是属于对象范畴的东西,而静态方法是属于类范畴的东西。到此这篇关于Java关键字详解之final static this super的用法的文章就介绍到这了,更多相关Java final 用法 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- C语言浮点函数中的modf和fmod详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用