JAVA SE(九)—— JAVA 面向对象3(关键字:this、super、static、final)

一、this 与super

1、概念
this表示本类对象,代表对本类的引用。
super表示父类引用,存在于子类中,与this用法几乎一致,作用是调用父类的构造函数(对父类的引用)。
父类和子类有相同名字的属性时,优先调用自己的属性。

2、使用
① 当全局变量和局部变量一致的时候,用于区分全局变量和局部变量。 带有this的叫做成员变量,否则叫做局部变量。
② 哪个对象调用的该方法,方法里面使用了this,那么this就代表的是哪个对象。
③ 如果子类中出现非私有的同名成员变量时,子类要访问本类的中的变量用this,访问父类中的同名变量用super。

二、static

1、概念
static关键字表示静态,是一个修饰符,用于修饰成员(成员变量,成员函数),被static修饰的方法叫做静态方法,被static修饰的成员属性叫做静态成员属性 当成员被静态修饰后,就多了一个调用方式,除了可以直接被对象调用外,还可以直接被类名调用。类名.静态成员。

2、特点
(1)随着类的加载而加载:也就是说静态会随着类的消失而消失,说明它的声明周期最长;
(2)优先于对象存在:静态是先存在的,对象是后存在的;
(3)被所以对象所共有;
(4)可以直接被类名所调用。

3、静态与非静态区别
(1)存放位置
类变量随着类的加载存在于方法区中,实例变量随着对象的建立而存在于栈内存或者堆内存中。 静态的存放在静态区,非静态的存放在堆或者栈内存中。

(2)生命周期
类变量生命周期最长,随着类的消失而消失,实例变量随着对象的消失而消失。

(3)调用方式
成员属性和方法只能通过对象进行调用,静态的成员方法和成员属性可以用对象进行调用,也可以用类名.名称使用。

4、利与弊
(1)利
对对象的共享数据进行单独的存储,节省空间;
可以直接被类名调用。

(2)弊
声明周期过长;
访问数显局限性(只能访问静态)。

5、使用注意事项
(1)报错解释:无法从静态上下文引用非静态量:静态优先于对象的存在。
(2)静态的成员方法只能调用静态的成员属性和成员方法,不能调用非静态的成员属性和成员方法。
(3)静态方法里面不能使用this、super关键字,因为静态优先于对象存在。
(4)主函数是静态的。main主函数解析:

public static void main(String[] args){

}
  • jvm在调用主函数时,传入的是new String[0]
  • 主函数是一个特殊的函数,作为程序的入口,可以被jvm调用,主函数格式是固定的:jvm识别
  • 主函数的定义:
    public:代表着该函数访问权限是最大的。
    static:代表主函数随着类的加载就已经存在了。
    void:主函数没有具体的返回值。
    main:不是关键字,但是是一个特殊的单词,可以被jvm识别。
    (String[] args):函数的参数,参数类型是一个数组,该数组中的元素是字符串。字符串的数组

三、final

(1)final表示常量,一般用大写,放在常量池,可用于修饰类、变量和方法,用于表示它修饰的类、方法和变量不可改变。

(2)final修饰常量,该常量不能再进行重新赋值

  • final 修饰方法,方法不能被重写
  • final修饰类,该类不能被继承

(3)final修饰基本类型变量和引用类型变量的区别:

  • 当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。但对于引用变量而言,它保存的仅仅是一个引用,final只保证这个引用类型变量所引用的地址不会改变, 即一直引用同一个对象,但这个对象完全可以发生改变。

(4)代码执行的优先级:静态代码块 > 构造代码块 > 构造函数
Demo

public class Person{
	{
		System.out.println("构造代码块");
	}
	public Person(){
		System.out.println("构造函数");
	}
	static{
		System.out.println("静态代码块");
	}
}

代码运行的时候,首先执行静态代码块里面的内容,然后执行构造代码块的内容,最后才执行构造函数里面的内容。

发布了40 篇原创文章 · 获赞 0 · 访问量 365

猜你喜欢

转载自blog.csdn.net/baidu_27414099/article/details/104424620