黑马程序员------面向对象

本文介绍了Java面向对象的基本概念,包括类与对象、封装、继承、多态等特性,并详细解释了构造函数、成员变量与局部变量的区别,以及static、final等关键字的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                   ------- android培训java培训、期待与您交流! ----------

 1、面向对象概念:
 面向对象是基于面向过程的,只是将复杂的问题简单化。也就是说 面向对象将功能封装进对象,强调具备功能的对象,而面向过程强调功能行为。
2、类与对象:
   类:对现实生活中事物的描述。(事物描述:描述的是事物的属性以及行为)。
   对象:这类事物,实实在在存的个体。
   在java中属性对应类中成员变量,行为对应类中的方法,对象 对应 java 在堆内存中用 new 建立 实体。    
3、  面向对象三大特征:封装、继承、多态
  封装:隐藏对象的属性和实现细节,对外提供公共访问接口。  好处:提高代码的重用性,以及安全性。
   继承:java语言只支持单继承,用extends表示。即一个类只能继承与另一个类。我们将被继承的类称之为基类(父类),继承类称之为子类(派生类)。
多个类中存在相同的属性和行为时,将这些内容抽取到一个单独的类中,再由多个类继承这个抽取出来的类(父类),此时多个多个类就不必在定义这些属性和方法,只要继承即可。
   多态:一个对象在程序不同运行时刻的多种状态。(就是类的多种表现方式)。多态具体表现在重写和重载,比如同名不同参,子类重写父类。
4、构造函数(构造方法):
     (1)特点:
          方法名与类名相同
          没有返回类型
          没有返回值
     (2)作用:构造函数是用于创建对象,并对其进行初始化赋值,对象一建立就自动调用相对应的构造函数,
     (3)构造方法的注意事项:
          A:如果一个自定义类没有构造方法,系统会默认给出一个无参构造方法。
          B:如果一个自定义类提供了构造方法,那么,系统将不再给出无参构造方法。
            这个时候,你可以不使用无参构造方法。
            如果你想使用,那么,就必须手动给出无参构造方法。

          建议:一般情况下,我们的自定义类都要手动给出无参构造方法。
     (4)构造方法和成员方法的区别
          A:格式区别
               构造方法和类名相同,并且没有返回类型,也没有返回值。
               普通成员方法可以任意起名,必须有返回类型,可以没有返回值。
          B:作用区别
               构造方法用于创建对象,并进行初始化值。
               普通成员方法是用于完成特定功能的。
          C:调用区别
               构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数
               普通成员方法是由创建好的对象调用,可以调用多次
  5:成员变量和局部变量的区别(重点)
     (1)作用域
          成员变量:针对整个类有效。
          局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)
     (2)存储位置
          成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
          局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。
                 当方法调用完,或者语句结束后,就自动释放。
     (3)初始值
          成员变量:有默认初始值。
          局部变量:没有默认初始值,使用前必须赋值。
6、static关键字
  (1)是一个修饰符,用于修饰成员,包括修饰成员变量、成员方法
    (2)特点:
          a、随着类的加载而加载。b、优先于对象存在。c、被所有对象共享。 d、可以被类名直接调用。
    (3)静态的注意事项
          A:静态方法只能访问静态成员
               为什么:因为静态的内容是随着类的加载而加载,它是先进内存的。
          B:静态方法中不能使用this,super关键字
          C:主方法是静态的
               public static void main(String[] args)
               public:公共的意思,是最大权限修饰符。
               static:由于jvm调用main方法的时候,没有创建对象。
                      只能通过类名调用。所以,main必须用static修饰。
               void:由于main方法是被jvm调用,不需要返回值。用void修饰。
               main:main是主要的意思,所以jvm采用了这个名字。是程序的入口。

               String[]:字符串数组
               args:数组名

     (4)静态变量和成员变量的区别
          A:调用方式
               静态变量也称为类变量,可以直接通过类名调用。也可以通过对象名调用。
               这个变量属于类。
               成员变量也称为实例变量,只能通过对象名调用。这个变量属于对象。
          B:存储位置
               静态变量存储在方法区长中的静态区。
               成员变量存储在堆内存。
          C:生命周期
               静态变量随着类的加载而存在,随着类的消失而消失。生命周期长。
               成员变量随着对象的创建而存在,随着对象的消失而消失。
          D:与对象的相关性
               静态变量是所有对象共享的数据。
               成员变量是每个对象所特有的数据。
     (5)静态的优点和弊端
          优点:
          对对象的共享数据进行单独空间的存储,节省内存,没有必要每个对象都存储一份
          可直接被类名调用
          弊端:
          生命周期过长,随着类的消失而消失
          访问出现权限,即静态虽好但只能访问静态
     (6)什么使用使用静态呢?
          A:当所有对象共享某个数据的时候,就把这个成员变量定义为静态修饰的。
          B:当某个方法没有访问该类中的非静态成员,就可以把这个方法定义为静态修饰。

          静态的生命周期比较长,所以一般不推荐使用。
     (7)静态代码块
          A:它只执行一次,它比main还先执行。
          B:执行顺序
               静态代码块--构造代码块--构造方法
7、instanceof关键字
          A:用于判断某个对象是否是某种类型。
          B:格式
               对象名 instanceof 子类(实现)名
8、final关键字

  final可以修饰类,方法,变量。

         final修饰的类不可以被继承。为了避免被继承,被子类复写功能。

         final修饰的方法不可以被覆盖。

         final修饰的变量是一个常量。只能被赋值一次。

既可以修饰成员变量,又可以修饰局部变量。在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。方便于阅读。而这个值不需要改变,所以加上final修饰

作为常量:常量的书写规范所有字母都大写,如果由多个单词组成。的那次见通过“_”连接。

内部类只能访问被final修饰的的局部变量。

9、this和super的区别
          this:代表本类对象的引用。
          super:代表父类的存储空间。
10、Object类:
     (1)是所有类的根类,超类。
        java中提供的类以及我们自定义的类都直接或者间接的继承自Object类。
     (2)Object类中的方法
          A:void finalize()
            当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
          B:Class getClass()
            获取对象的字节码文件的描述类,后面再讲反射的时候还会在说这个类。
            String name = s.getClass().getName();
          C:int hashCode()
            获取对象的哈希值。其实就是对象的内存地址值十进制表示
          D:String toString()
            返回对象的字符串表示。
            表示格式:
            getClass().getName()+"@"+Integer.toHexString(hashCode());

            一般我们输出对象名的时候,其实底层调用的就是该对象的toString()方法。
            这种返回没有意义,所以,我们会重写这个方法,显示类的成员变量信息。
          E:boolean equals(Object obj)
            用于比较两个对象的地址值是否相同。
            我们获取对象后,比较它的地址值意义不大。所以也会对这个方法进行重写。
            重写要完成什么功能,是根据需求定的。
     (3)==和equals的用法:
          A:==怎么用?
               **可以用于比较基本数据类型,比较的就是基本数据类型的值是否相等。
               **可以用于比较引用数据类型,比较的是对象的地址值是否相等。
          B:equals怎么用?
               equals只能用于比较引用数据类型的。
               **Object提供的equals是用于比较对象地址值是否相同。
               **自定义类中,如果重写了equals方法,那么就是按照你自己的需求来比较的。
11、内存结构:
     栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
     堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
     方法区:静态成员、构造函数、常量池、线程池
     本地方法区:window系统占用

     -------  android培训 java培训 、期待与您交流! ----------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值