• 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返回我们关心的数据

  • 相关阅读:
    thinkphp在wamp 配置去掉url中index.php方法
    mysql新监语句需要前面加SET FOREIGN_KEY_CHECKS=0;
    ini_set的用法介绍
    SpringBoot项目启动报错:java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    我的分享:第八章: 用Redis轻松实现秒杀系统
    项目分享:第一章:个人电商项目
    SpringBoot框架:第二章:SpringBoot中static和templates二个目录下的页面和静态资源访问的三个常见问题
    我的分析:第八章:JAVA高级工程师知识点
    Springboot项目启动报org.springframework.beans.factory.UnsatisfiedDependencyException
    Disconnected from the target VM, address: '127.0.0.1:56577', transport: 'socket'
  • 原文地址:https://www.cnblogs.com/LuckyGJX/p/8974145.html
Copyright © 2020-2023  润新知