Java学习八(类和对象)

万物皆对象

类是封装对象的属性和行为的载体,也就是具有相同属性和行为的一类实体被称为类。

封装

封装是面向对象编程的核心思想,就是将对象的属性和行为封装起来,其载体就是类,封装的思想是对客户隐藏其实现细节,客户只需要用就行了。例如,用户使用计算机,通过敲打键盘就可以实现某些功能,而无需知道计算机内部是如何操作的。

采用封装的思想就是保证类内部数据结构的完整性,应用该类的用户不能轻易的直接操作此数据结构,只能执行类允许公开的数据,这就避免了外部操作对内部数据的影响,提高了程序的可维护性。

继承

继承就是利用特定对象中的共有属性,分为子类和父类,子类继承与父类

多态

将父类对象应用于子类的特征就是多态,多态的实现不是依赖于具体类,而是依赖与抽象类和接口,在抽象类中,不能实例化对象,而且只能给出一个方法的标准,不能给出实现的具体流程。

权限修饰符

private的范围是在本类中,

public的范围是在应用程序中都可以使用

protected的范围是在同包的其他类或子类中使用

类的构造方法

构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,每当类实例化一个对象时,类都会自动调用构造方法,构造方法没有返回值。

this关键字

在java语言中规定使用this关键字来代表本类对象的引用,this关键字被隐式地用于引用对象的成员变量和方法。

  1. Public Class Student {
  2. String name; //定义一个成员变量name
  3. private void SetName(String name) { //定义一个参数(局部变量)name
  4. this.name=name; //将局部变量的值传递给成员变量
  5. }
  6. }

在上面的例子中,this.name是成员变量,后面的name就是形参的值,,其实实质上setter()方法实现的功能就是将形参的值赋予成员变量。在静态方法中不能使用this关键字。

对于更多的this关键字的应用 https://www.cnblogs.com/lzq198754/p/5767024.html

==和equals()方法的区别

对于基本类型(byte,short,int,long,float,double,boolean,char)

“==“比较的是两个对象的值是否相同,equals()方法比较的是两个对象的地址是否相同。

对于引用类型(除基础类型的值)

equals()方法是String类中的方法,用于比较两个对象引用所指的内容是否相等。“==”运算符比较的是两个对象引用的地址是否相同

对象的销毁

每个对象都有生命周期的,当对象的生命周期结束时,分配给该对象的内存地址将会被回收,,Java有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器将回收无用的但占用内存的资源,在JVM中,有两种情况的会被视为垃圾,一种是对象引用超过其应用范围,一种是将对象赋值为null。

java中只能回收那些有new操作符创建的对象,对于那些不是通过new操作符创建的对象,一般采用Object类提供的finalize()方法,用户可以在自己类中定义这个方法,如果用户在类中定义了finalize()方法,在垃圾回收的时候会首先调用该方法,在下一次垃圾回收动作发生时,才能真正回收被对象占用的内存。

垃圾回收或finalize()方法不保证一定会发生,如JVM内存损耗待尽时,是不会执行垃圾回收的。

由于垃圾回收不受认为控制,具体执行时间也不确定,所以finalize()方法也就无法执行,为此,java提供了System.gc()方法强制启动垃圾回收器。