栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础知识------面向对象(1)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础知识------面向对象(1)

一、回顾

1.面向对象的思想

        学习Java的一个基本核心是理解面向对象思想:万物皆对象。
        面向对象是一种解决问题的思路。按照这种思路,我们关心的是有什么东西能帮助我们解决问题,然后找到这个东西,使用这个东西的功能来解决问题。
        用面向对象思想写程序时,我们首先要进行需求分析,搞清楚要做什么事情,然后就要找具有能够实现我们需求的功能的类(如果找不到,再自己手写这样的类),最后创建对象,调用函数,实现需求。

2.类的书写

        2.1 先有类后有对象,Java程序就是由不同的类组成的,所以写好类是写好一个Java程序最基本的要求。类是对象的抽象,对象是类的实例化。
        一个类中可以书写的成员有以下几种:成员变量、set和get函数、其他一般函数、构造函数。

        2.2 构造函数:构造函数就是在创建对象时由JVM自动调用的函数,作用是在创建对象时给对象的成员变量赋值的;
        写法:
        修饰符:构造函数只能使用访问权限修饰符修饰;如public、private等;不允许使用static关键字修饰构造函数
        返回值类型:构造函数没有返回值类型,连void都没有;这个是区分一个函数是否是构造函数的标准
        函数名:构造函数的函数名必须和类名一致
        参数列表:构造函数可以重载,参数列表可以根据需要定义;
        return语句:所有Java的函数都需要通过return语句出栈,所以构造函数中也有return语句,只是因为不返回数据,所以一般不写;

        默认构造函数:在Java中,所有类都有空参构造函数提供。若自定义了 构造函数后,不提供空参构造函数。

        2.3对象内存图解

        对象在内存中的位置:
        对象由new关键字创建,如同数组,实体存在于堆内存中任何事物均可以定义成类,创建对象,属于引用类型而对象的引用变量是一个普通变量。存储的值是该对象堆内存中的地址。

        基本类型赋值代码解释

        

        基本类型赋值对应内存图

                

        

                

3.this关键字

        this关键字,一般出现在不带static关键字修饰的函数里面,表示对调用这个函数的对象的引用,也就是哪个对象调用这个函数,函数中的this就指向那个对象;
        一般用来区分成员变量和局部变量;

 this还有一个作用,可以在一个构造函数中调用本类的其它构造函数;

注意:当使用this关键字调用其它构造函数时,必须放在构造函数的第一行;

4.匿名对象

        匿名对象就是没有名字的对象;
        对象的名字就是保存了这个对象的引用地址的变量;
        所以匿名对象,就是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。

具有特点:

  1. 匿名对象必须创建的时候就直接使用;
  2. 匿名对象只能使用一次;
  3. 匿名对象可以作为方法的返回值或者给方法传参;

 

 

5.类名作为参数类型和返回值类型

函数的参数列表,里面其实都是变量;如果参数列表的数据类型是一个类名,表示接受的参数是这个类的对象;
函数的返回值类型,表示这个函数要返回的数据的类型;如果一个函数的返回值类型是一个类名,表示这个函数运行结束后要返回这个类的对象;

6.string回顾

6.1string类的作用

        String类是专门用来描述字符串这种数据的类,在String类中,定义了大量操作字符串的函数

6.2String类的常用方法回顾

 构造方法:
        接受字符数组做参数;

判断方法:
         1. equals 判断两个字符串是否全等

(equals和==的区别:==比较的是内存地址值,equals比较的是内容是否相等。这个内容挺大的,展开说看这里。参考这里前者很详细,后者评论区有很多讨论的地方值得一看。内存分配及变量存储位置(堆、栈、方法区常量池、方法区静态区) - XiaoTeng.bat - 博客园 以及优美的讲解equals和==的区别_无聊的大鱼-CSDN博客_equals和==的区别)这里,我会单开一个文章进行书写,为了大家也为了我自己。
         2. equalsIgnoreCase 判断两个字符串是否全等,忽略大小写
         3. startsWith 判断字符串开头
         4. endsWith   判断字符串结尾
         5. contains   是否包含否字段
获取方法:
         1. charAt   传递索引,获取字符 返回 char
         2. indexOf  传递字符,获取索引 返回int(若无返回-1)
         3. substring 获取字符串一部分 返回String
         4. length   字符串长度 返回int转换方法:
其它方法:
          1. toCharArray() 字符串变成字符数组,返回char[]
          2. toUpperCase() 转成大写 返回String
          3. toLowerCase() 转成小写 返回String
          4. split() 切割字符串 返回String[]
          5. trim() 去掉字符串两端空格 返回String
          6. replace 替换已有字符 

7.集合回顾

7.1集合概念

        集合是一种容器,可以保存不同类型的数据,而且集合的容量不固定;

7.2为什么使用集合

        开发中总会遇到数据需要保存的情况;如果是单个数据,可以使用变量保存;
        如果是多个数据,还使用变量就很不方便,所以就需要使用容器保存;
        我们基础班学习过的容器有三种:
数组容器:
        1、可以保存基本类型数据和引用类型数据;
        2、数组一旦创建,容量就不能改变;
        3、一个数组只能保存一种类型的数据;
字符串缓冲区:
        1、只能保存字符数据;不管添加什么数据进去,都会转换为字符数据保存;
        2、容量不固定,可以随着使用自动扩大
        3、主要用在需要对字符串频繁修改的场合
集合:
        1、只能保存引用类型的数据
        2、可以保存不同类型的数据
        3、容量不固定,可以随着使用自动扩大

所以当我们需要保存多个对象,并且对象的数量不确定,或者数据类型不一致时,就需要使用集合容器;

8.IO回顾
8.1.IO的概念及作用
        IO技术,I指的是Input,输入的意思,表示将数据从计算机内存之外读进计算机内存;
        O指的是Output,输出的意思,表示将数据从计算机内存写出到其他地方;
        IO技术,就是用来实现数据在计算机内存里面和计算机内存之外进行转移的;

9.继承

9.1继承的好处与限制
        继承 : 这是一个 "拼爹" 的时代,儿子拥有父亲的财产. (举例 : 健林- -> 思聪) 
        特点 : 父亲的财产是父亲辛苦奋斗而来的.儿子不费吹灰之力,生下来就有了.就因为他们之间是父子关系.
        在现实生活中,继承一般是指的子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系.通过继承可以使多种事物之间形成一种关系体系. 
        在 Java 中,类的继承是指在一个现有类的基础上去构建一个新的类.构建出来的新类被称作子类,现有类被称作父类.子类 `无条件` 拥有父类全部可继承的属性和方法.继承通过 "extends 关键字" 实现.

(JDK1.8之前在 Java 中.类只支持单继承,不允许多重继承.即一个类只能有一个直接父类).

(JDK1.8之后在Java中的继承可以是多继承,请参看):jdk8 类和接口的多继承详解_rentian1的博客-CSDN博客_jdk11 多继承

术语 :
A 类是 B 类的子类, 也称为派生类。   Derived class
B 类是 A 类的父类, 也称为基类、超类。 Super class

继承的效果 : 子类从父类继承,就代表子类 `无条件` 拥有了父类 `可继承` 的全部成员属性和方法.
总结 : 子类 "无条件" 拥有父类全部可继承的属性和方法. 继承是类在继承,而不是对象在继承.

父类和子类(派生类)之间的关系 

注意JDK1.8版本前:

  1.Java中的继承是单继承,也就是说一个类只能继承一个父类,不能继承多个父类.
  2.继承的合理性: 引用 <<大话西游>> 里的一句话来描述继承 "人,是人他妈生的,妖 是妖他妈生的"。

9.2继承在代码中的体现 (找爸爸)
        父类 (公共类) : Person 类. 属性: 姓名, 年龄, 性别
        子类 : 学生 (学号)   老师 (领域)   校长 (工作年限)
解决: `类中` 代码重复的问题.
        找出他们之间的一个共性类型.然后将需要提供复用的代码进行抽取.将这些复用代码定义到这个共性的类中. 最后是用 extends 关键字实现类的继承.

9.3继承的注意点 :JDK1.8版本前
1> 继承是类在继承,而不是对象在继承. 每个对象之间是毫无关系的.对象的属性值相互之间不会影响.
继承的意思: 子类从父类继承.相当于子类拥有了父类的所有成员.这个时候创建一个子类对象,子类中不仅有自己的特有成员也有父类中的共有成员.

2> 什么时候需要使用继承 ? (is a 关系)
当发现多个类具有相同成员的时候,那么就可以使用继承.将共同的成员定义在父类中,让子类去继承.

3> 不要为了仅仅只是得到某个类的成员而去继承.不要为了继承而继承. 
如: Worker : Dog (因为 Dog 类中有姓名和年龄) 语法上其实任意的类之间都是可以继承的.情理,逻辑上并不是任意的类之间都可以继承的.只有满足A类是一个B类的时候,才可以拥有继承关系.让A类去继承B类.同样可以理解为只有子类是一个父类的时候,才可以继承.

1.学生     "人"
2.学生     老师 
3.空调     "家用电器"
4.车       "交通工具"
5.车       自行车
6........
继承强调的是: 同一个 "物种".

4> 只要有一个成员或方法不是所有子类都拥有的,那么这个成员属性和方法就不应该定义在父类之中. 如: 鸟类中的"fly"方法. 因为并不是所有的鸟类都会飞.只要有一个成员不是所有的子类都拥有的,那么这个成员就不应该定义在父类之中.
5> 子类不能直接访问父类中私有的成员变量(不能继承,但是子类对象的内存中有该属性)

6> 子类一定不要拥有和父类同名的成员变量. 因为子类可以继承父类的成员变量.

 

9.4 特殊情况 :
子父类中定义了一模一样的成员变量.
解释 : 
1.两个变量都存在于子类中.如果子类调用父类继承过来的方法访问成员变量,那么系统会在父类继承的成员中查找.如果找到,则直接使用.如果找不到,编译报错!
2.如果子类直接调用自己类中的方法,那么系统首先在子类自己的属性中查找.如果找到则直接拿来使用,如果没有找到.那么才会在父类中进行寻找.
在子类中若要访问父类中的成员变量,可以使用关键字super来完成。super用来表示当前对象中包含的父类对象空间的引用。

注意 : 这种情况开发见不到.因为父类一旦描述完了属性,子类直接使用就可以了.不需进行重名定义.

 

​​​​​​​9.5单一继承与多重继承

单一继承 :

 一个类,只能继承一个父类,也叫单一继承.

  • Java 不支持多继承,但是支持 "多重继承". 

     

    多重继承 :

    1. class A Animal
    2. {}
    3. class B extends A Dog
    4. {}
    5. class C extends B ArmyDog
    6. {}

    多重继承形成了Java的继承体系!

     

     

     

  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/704403.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号