第五章 面向对象之二

本文详细介绍了Java编程中的关键字this,super,static,final和abstract的作用。this用于对象内部引用自身,super用于访问父类成员。static修饰的变量和方法属于类,而非实例。final用于声明不变的类、方法或变量,而abstract则用于创建抽象类和方法。此外,还讲解了final、finally和finalize的区别。
摘要由CSDN通过智能技术生成

1、this和super关键字的作用

1.1 this是对象内部指代自身的引用

  1. this可以调用成员变量,通常用于解决成员变量和局部变量同名冲突
  2. this可以调用成员方法
  3. this可以在构造方法中调用重载的构造方法,且必须是构造方法的第一条语句。

1.2 super代表对当前对象的直接父类对象的引用

  1. super可以调用直接父类的成员变量(注意权限修饰符的影响,比如不能访问private成员)
  2. super可以调用直接父类的成员方法(注意权限修饰符的影响,比如不能访问private成员)
  3. super可以调用直接父类的构造方法,只限构造方法中使用,且必须是第一条语句。

2、static关键字的作用(修饰变量、方法、代码块)

2.1 static可以修饰变量、方法、代码块和内部类

        1、static属性属于这个类所有,即由该类创建的所有对象共享同一个static属性。可以对象创建后通过对象名.属性名和类名.属性名两种方式来访问。也可以在没有创建任何对象之前通过类名.属性名的方式来访问。

        2、static方法也可以通过对象名.方法名和类名.方法名两种方式来访问

        3、static代码块。当类被第一次使用时(可能是调用static属性和方法,或者创建其对象)执行静态代码块,且只被执行一次,主要作用是实现static属性的初始化。

        4、static内部类:属于整个外部类,而不是属于外部类的每个对象。不能访问外部类的非静态成员(变量或者方法),.可以访问外部类的静态成员

2.2 static变量和非static变量的区别(都是成员变量,不是局部变量)

 1.在内存中份数不同

         不管有多少个对象,static变量只有1份。对于每个对象,实例变量都会有单独的一份static变量是属于整个类的,也称为类变量。而非静态变量是属于对象的,也称为实例变量

2.在内存中存放的位置不同

        静态变量存在方法区中, 实例变量存在堆内存中   

3.访问的方式不同

        实例变量: 对象名.变量名  stu1.name="小明明";

        静态变量:对象名.变量名  stu1.schoolName="西二旗小学"; 不推荐如此使用

        类名.变量名  Student.schoolName="东三旗小学"; 推荐使用

4.在内存中分配空间的时间不同

        实例变量:创建对象的时候才分配了空间。静态变量:第一次使用类的时候

Student.schoolName="东三旗小学";
//或者
Student stu1 = new Student("小明","男",20,98);

 3、final和abstract关键字的作用

final和abstract是功能相反的两个关键字,可以对比记忆

        1、abstract可以用来修饰类和方法,不能用来修饰属性和构造方法;使用abstract修饰的类是抽象类,需要被继承,使用abstract修饰的方法是抽象方法,需要子类被重写。

        2、final可以用来修饰类、方法和属性,不能修饰构造方法。使用final修饰的类不能被继承,使用final修饰的方法不能被重写,使用final修饰的变量的值不能被修改,所以就成了常量。

        3、特别注意:final修饰基本类型变量,其值不能改变。但是final修饰引用类型变量,栈内存中的引用不能改变,但是所指向的堆内存中的对象的属性值仍旧可以改变。

        例如

class Test {

    public static void main(String[] args) {

        final Dog dog = new Dog("欧欧");

        dog.name = "美美";//正确

        dog = new Dog("亚亚");//错误
    }
} 

 4、final、finally、finalize的区别(重点)

         1、final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

        2、finally在异常处理时提供 finally 块来执行任何清除操作。如果有finally的话,则不管是否发生异常,finally语句都会被执行。

        3、finalize方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要清理工作。finalize() 方法是在垃圾收集器删除对象之前被调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值