Java基础15-final、static关键字和Object类

一、final关键字

1.什么是final关键字

继承的出现提高了代码的复用性,并方便开发。但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写。可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,那怎么解决呢?

要解决上述的这些问题,需要使用到一个关键字finalfinal的意思为最终,不可变。final是个修饰符,它可以用来修饰类,类的成员,以及局部变量。

2.final的特点

①修饰类不可以被继承,但可以继承其他类

②final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final。

③修饰的变量称为常量,这些变量只能赋值一次。

④引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改。

⑤ 修饰成员变量,需要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均需要为其赋值。)

二、static关键字

1.什么是static

当在定义类的时候,类中都会有相应的属性和方法。而属性和方法都是通过创建本类对象调用的。当在调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余。可是不创建对象,方法又调用不了,这时就会想,那么我们能不能不创建对象,就可以调用方法呢?

以上问题就可以通过static关键字来实现。static它是静态修饰符,一般用来修饰类中的成员。

 2.static的特点

static修饰的成员变量属于类,不属于这个类的某个对象。

 ②static修饰的成员可以并且建议通过类名直接访问。

访问静态成员的格式:

类名.静态成员变量名

类名.静态成员方法名(参数)

注意:

 静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。

同一个类中,静态成员只能访问静态成员

 这是因为,static修饰的方法和变量,属于类,先进方法区,非静态的变量在他们进方法区时还没有产生。

 main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中。

3.静态常量

上边我们知道,final修饰的变量是常量

那final和static共同修饰的就是静态常量了

定义格式:

public static final 数据类型 变量 = ;

当我们想使用类的静态成员时,不需要创建对象,直接使用类名来访问即可。

注意:

接口中的每个成员变量都默认使用public static final修饰。

所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。

interface Inter {
    public static final int COUNT = 100;
}

三、Object类

Object是java中所有类的根类,是祖宗级的。

1.Object为什么是所有类的根类,到底什么是Object类?

* object本身指对象的意思。我们发现所有的对象都具有某一些共同的行为,所以,我们抽象出一个类object对象类,其他都会继承于object类,也拥有object类中的方法

* 引用数据类型:类/接口/数组,引用类型又称为对象类,所谓数组的数组变量名称,应该指数组对象。

2.Object类常见方法

* 1.protected void finalize():垃圾回收器再回首某一个对象之前,会调用该方法,做扫尾操作,该方法我们不要去调用
* 2.getclass(),返回当前对象的真实类型。在反射中用的多。
* 3.hashcode(),返回对象的哈希码值,hashcode决定了对象在哈希表中的存储位置。不同对象的hashcode是不一样的

* 4.equals(),拿当前对象(this)和参数obj作比较,

* 在object类中的equals方法,本身和==符号相同,都是比较对象的内存地址

* 官方建议:每个类都应该覆盖equals方法,不要比较内存地址,而失去比较我们关心的数据

* 5.toString():把一个对象转换为字符串。
* 默认情况下打印对象,打印的是对象的十六进制的hashCode值

* 官方建议我们:应该每个类都应该覆盖toString返回我们关心的数据

原文地址:https://www.cnblogs.com/LuckyGJX/p/8974145.html