【Java基础】Java总览_小王师傅66的博客-CSDN博客
[Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客
[Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用_小王师傅66的博客-CSDN博客
[Java基础]面向对象_小王师傅66的博客-CSDN博客
[Java基础]面向对象-内存解析_小王师傅66的博客-CSDN博客
Java字节码分析快速入门/字节码执行分析(一)_java 字节码入门_小王师傅66的博客-CSDN博客
JVM-运行时数据区_小王师傅66的博客-CSDN博客
目录
系列文章目录
前言
一、this
是什么?
举个例子
二、static
是什么
举个例子
三、final
四、super
总结
在前面的文章中,我们讲过Java关键字是电脑提前定义好的,有特殊意义的标识符。Java关键字对编译器有特殊意义,用来表示一种数据类型,或程序的结构。关键字不能用来做为对象,类,方法,包,参数的名称。在这篇文章中,我们将介绍Java类中常用的关键字的使用:this,static,final,super
1、在类的方法或属性中使用this关键字,代表使用该方法或属性所属实例对象的引用;
2、当必须指出当前使用方法的对象时,要使用this;
3、有时使用this可以区分成员变量和方法参数重名的情况;
4、this可以看做一个变量,它的值是当前对象的引用;
class CirclePoint {
private double x;
private double y;
CirclePoint() {
}
CirclePoint(double x, double y) {
this.x = x; // 成员变量和参数名相同,使用this区分
this.y = y;
}
CirclePoint moveLeft(){
x--;
return this; // 返回当前对象的引用
}
}
另外,在实例方法、实例初始化块和构造方法中,局部变量表第0位都存放着当前对象的引用,方便通过this关键字访问对象本身。 (在静态方法、静态初始化块、类构造器中没有this对象的概念,静态方法的栈帧由该类的class对象创建,静态方法依赖类本身;局部内部类中,内部类没有继承外部类,所以局部内部类的方法中,第0位也不会存放外部类的引用。)
在类中,用static声明的变量是静态变量,是类的公共变量,在第一次使用时初始化;静态变量对于该类的所有对象来说只有一份;
在类中,用static声明的方法是静态方法。非静态方法,需要在生成对象时产生。调用静态方法时,不会将对象的引用传递给它,所以在静态方法中不能调用非静态成员。
可以通过对象引用或类名访问静态成员,不需要实例化,通常用来存储类级别的信息。
1、声明静态变量
public class Demo {
public static int value = 10;
}
2、声明静态方法
public class Demo {
public static void print() {
System.out.println("Static method");
}
}
3、静态初始化块
public class Demo {
static {
System.out.println("Static initializer");
}
}
4、静态内部类
public class Outer {
static class Inner {
public static void show() {
System.out.println("Static inner class");
}
}
}
5、静态导入
import static java.util.concurrent.TimeUnit.NANOSECONDS;
long startNanoTime = nanoTime();
静态变量和静态方法都独立于对象存在,不需要创建实例就可以访问,在jvm中存放在方法区中。
这里需要注意的是,方法区和数据段是两个概念。 数据段是操作系统概念,是进程地址空间中的一部分,用于存储全局变量和静态变量。方法区是JVM概念,是一块逻辑区域,存储类信息、静态变量和常量池等数据。两者的主要区别在于: 数据段是进程级的,每个进程都有自己的数据段,仅可在进程内访问。方法区是JVM级的,所有线程共享一块共享的方法区,可跨线程访问。两者的关系是: JVM会向操作系统申请一块 native 内存作为进程的数据段。 然后从这块内存中划分出一部分作为方法区使用。 方法区中的静态域部分对应于这个进程的数据段。所以方法区和数据段不是包含关系,而是两个不同层次的概念。数据段存储于进程内存空间中,而方法区逻辑上属于JVM的一部分,但最终也是映射到 native 内存的数据段区域进行存储的。
final关键字,可以用来声明变量,方法,类,参数,其主要作用是使数据不可修改,进而保证系统的安全性和可靠性。
1、 final变量把一个变量声明为final后,它就不能被重新赋值,即变成一个常量。例如:
final int AGE = 25;
AGE = 30; //错误,不能重新赋值
2、final方法把一个方法声明为final后,它就不能被子类重写。例如:
public final void print(){
System.out.println("Hello");
}
public class B extends A {
public void print(){ //错误,不能重写final方法
System.out.println("World");
}
}
3、 final类把一个类声明为final后,它就不能被继承。例如:
final class A {}
class B extends A { //错误,不能继承final类
}
4. final参数 把一个方法的参数声明为final后,它就成了一个常量不可改变。例如:
void method(final int a) {
a = 20; //错误,不能重新赋值
}
在Java中,使用super引用基类的成员。
1、调用父类的构造方法:在子类的构造方法中使用super()可以调用父类的构造方法。
public class Father {
public Father() {
System.out.println("Father的构造方法");
}
}
public class Son extends Father {
public Son() {
super(); // 调用父类的构造方法
System.out.println("Son的构造方法");
}
}
2.、调用父类的方法:如果子类重写了父类的方法,可以使用super.方法名() 调用父类的方法。
public class Father {
public void print() {
System.out.println("Father");
}
}
public class Son extends Father {
public void print() {
super.print(); // 调用父类的print()方法
System.out.println("Son");
}
}
使用super可以访问父类的构造方法或方法,避免被子类重写或隐藏。它在继承关系中发挥着重要作用。
在这篇文章中,我们主要学习了Java的4个关键字:this,static,final,super。this可用于获取方法、属性所属对象的引用;static标识公共变量,公共方法,在开发过程中,可减少重复的代码,节省内存空间;final使数据不可改变,保证系统的安全性和可靠性。super关键字,使子类可以访问到基类的方法和属性。