A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qiu6894491 初级黑马   /  2019-8-21 00:36  /  925 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 qiu6894491 于 2019-8-21 00:39 编辑

二、面向对象
1、面向对象思想:
    (1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象,
         强调具备功能的对象;
    (2)思想特点:
         A:是符合人们思考习惯的一种思想;
         B:将复杂的事情简单化了;
         C:将程序员从执行者变成了指挥者;

         比如我要达到某种结果,我就寻找能帮我达到该结果的功能的对象,如我要洗衣服我就买洗衣机,
         至于怎么洗我不管。
    (3)特征:
        封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式
        继承: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义
              这些属性和行为,只要继承那个类即可。
        多态: 一个对象在程序不同运行时刻代表的多种状态,父类或者接口的引用指向子类对象
2、类和对象:
    类:对现实世界中某类事物的描述,是抽象的,概念上的定义。
    对象:事物具体存在的个体。

3:成员变量和局部变量的区别(重点)
    (1)作用域
        成员变量:针对整个类有效。
        局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)
    (2)存储位置
        成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
        局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。
              当方法调用完,或者语句结束后,就自动释放。
    (3)初始值
        成员变量:有默认初始值。
        局部变量:没有默认初始值,使用前必须赋值。
4、封装:
    指隐藏对象的属性和实现细节,仅对外提供公共访问方式;比如电脑机箱、笔记本等
    好处:
        将变化隔离;
        方便使用;
        提高复用性;
        提高安全性
5、关键字private:封装在代码中的体现
    (1)私有的意思,权限修饰符
    (2)用来修饰成员变量和成员函数
    (3)用private修饰的成员只在本类中有效
    (4)私有是封装的一种体现
6、构造方法:
    (1)特点:
        方法名与类名相同
        没有返回类型
        没有返回值
    (2)作用:构造函数是用于创建对象,并对其进行初始化赋值,对象一建立就自动调用相对应的构造函数,
    (3)构造方法的注意事项:
        A:如果一个自定义类没有构造方法,系统会默认给出一个无参构造方法。
        B:如果一个自定义类提供了构造方法,那么,系统将不再给出无参构造方法。
          这个时候,你可以不使用无参构造方法。
          如果你想使用,那么,就必须手动给出无参构造方法。

        建议:一般情况下,我们的自定义类都要手动给出无参构造方法。
    (4)构造方法和成员方法的区别
        A:格式区别
            构造方法和类名相同,并且没有返回类型,也没有返回值。
            普通成员方法可以任意起名,必须有返回类型,可以没有返回值。
        B:作用区别
            构造方法用于创建对象,并进行初始化值。
            普通成员方法是用于完成特定功能的。
        C:调用区别
            构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数
            普通成员方法是由创建好的对象调用,可以调用多次

7、this关键字
    (1)this关键字代表本类对象的一个引用,谁调用this所在的方法,this就代表谁  
    (2)this的使用场景
        A:用于区分同名成员变量和局部变量;
        B:在定义函数时,该函数内部要用到调用该函数的对象时,因为此时对象还没建立,故this代表此对象
        B:构造函数间调用
            **这个时候,this(参数)必须作为第一条语句存在。

8、Person p = new Person();在内存中做了哪些事情。
    (1)将Person.class文件加载进内存中。
    (2)如果p定义在主方法中,那么,就会在栈空间开辟一个变量空间p。
    (3)在堆内存给对象分配空间。
    (4)对对象中的成员进行默认初始化。
    (5)对对象中的成员进行显示初始化。
    (6)调用构造代码块对对象进行初始化。(如果没有就不执行)
    (7)调用构造方法对对象进行初始化。对象初始化完毕。
    (8)将对象的内存地址赋值给p变量,让p变量指向该对象。
9、单例设计模式:
    (1)设计模式:
        解决某类问题行之有效的方法,是一种思想,是规律的总结
    (2)用来保证某个类在内存中只有一个对象
    (3)保证唯一性的思想及步骤
        **为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化
        **为了其他程序访问到该类对象,须在本类中创建一个该类私有对象
        **为了方便其他程序访问到该类对象,可对外提供一个公共访问方式

10、Random类的使用(重点)
    (1)产生随机数的类
    (2)掌握内容
        A:构造方法
            **Random() 创建一个新的随机数生成器。
            **Random(long seed) 使用单个 long 种子创建一个新的随机数生成器。
        B:成员方法
            **int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
            **int nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、
            在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
11、Scanner类的使用
    (1)可以获取从键盘的输入数据
    (2)掌握内容
        构造方法:
            Scanner(InputStream source) 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
            如:Scanner sc = new Scanner(System.in);
        方法摘要
            sc.nextInt();获取整型数据
            sc.nextLine();获取字符串数据

      

12、package关键字
    (1)包:其实就是文件夹。用于区分不同包下相同的类名。
    (2)好处:
        A:对类文件进行分类管理。
        B:给类提供了多层命名空间
            aaa.Demo
            bbb.Demo
        C:写在程序文件的第一行。
        D:包也是一种封装形式。
13、import关键字
    (1)导入包的关键字
    (2)格式:
        import 包名;
  
    14、字符串中各种功能的方法
        A:判断
        ****    boolean equals(Object anObject):判断两个字符串的内容是否相同,复写了Object的方法
        ****    boolean equalsIgnoreCase(String anotherString):判断两个字符串的内容是否相同,
                                    不区分大小写
        ****    boolean contains(String s):判断一个字符串中是否包含另一个字符串
                        注意:判断字符串是否包含特殊字符.直接表示为str.contains(".")
            boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
            boolean startsWith(String suffix):测试此字符串是否以指定的前缀开始
            boolean isEmpty():测试字符串是否为空
        B:获取
        *****    int length():返回此字符串的长度
        *****    char charAt(int index):返回指定索引处的 char值
        *****    int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
            int indexOf(int ch, int fromIndex):返回在此字符串中第一次出现指定字符处的索引,
                               从指定的索引开始搜索。
            int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。
            int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次
                                出现处的索引,从指定的索引开始。
        ***    int lastIndexOf(int ch):返回指定字符在此字符串中最后一次出现处的索引。
            int lastIndexOf(int ch, int fromIndex)
                返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
            int lastIndexOf(String str)
                返回指定子字符串在此字符串中最右边出现处的索引。
            int lastIndexOf(String str, int fromIndex)
                返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
        *****    String substring(int beginIndex) (注意:该方法substring的String是小写!!!)
                返回一个新的字符串,它是此字符串的一个子字符串。
            String substring(int beginIndex, int endIndex) (注意该方法的String是小写!!!)
                返回一个新字符串,它是此字符串的一个子字符串,包含头不包含尾。
        C:转换
        *****    byte[] getBytes():(很常用!)从字符串到字节数组的方法
            void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
                将字符从此字符串复制到目标字符数组。
        *****    char[] toCharArray():(很常用!)从字符串到字符数组的方法
        ****    static String copyValueOf(char[] data)
                返回指定数组中表示该字符序列的 String。
            static String copyValueOf(char[] data, int offset, int count)
                返回指定数组中表示该字符序列的 String。
        *****    static String valueOf(数据类型):把该数据类型的数据转换成字符串。
        ***    String toLowerCase():把字符串转换成小写
            String toUpperCase():把字符串转换成大写
        ***    字符串的连接
            String concat(String str):将指定字符串连接到此字符串的结尾。
        D:替换(扩展)
            String replace(char oldChar, char newChar):用新字符替换旧字符(替换所有)
            String replace(String target, String replacement):用新的子串换旧串
        E:分割(扩展)
            String[] split(String regex):根据指定的字符串把一个字符串分割成一个字符串数组
        F:    去空格(扩展)
            String trim():去除字符串的前后空格
        G:    排序(扩展)
            int compareTo(String anotherString)
                按字典顺序比较两个字符串。
            int compareToIgnoreCase(String str)
                按字典顺序比较两个字符串,不考虑大小写。

15、:StringBuffer
    (1)字符串的缓冲区,是一个容器。
    (2)它和String的区别
        它是缓冲区可变长度的。
    (3)构造方法
        StringBuffer() 构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
        StringBuffer(int num) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
        StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
    (4)常用方法
        A:增加数据
            **append :添加各种类型的数据
            **insert : 在容器指定位置插入各种类型的数据。
        B:删除数据
            **deleteCharAt : 删除指定位置的字符
            **delete 还可以用于清空StringBuffer的缓冲区
        C:替换
            **replace
        D:获取
            **charAt
        E:长度和容量
            **length() 元素的个数
            **capacity 元素的理论值
        F:获取元素的位置
            **indexOf
            **lastIndexOf
        G:截取
            **substring(int start)
            **substring(int start,int end)
        H:反转
            **reverse
    (5)字符串和StringBuffer的转换
        String-->StringBuffer通过构造:
            如:StringBuffer sb = new StringBuffer(String str)
        StringBuffer--String通过toString方法
            如:StringBuffer sb = new StringBuffer();
               sb.toString();

16、:StringBuilder
    和StringBuffer的功能是一样的,但是有区别:
    StringBuffer(JDK1.0)是线程安全的。
    StringBuilder(JDK1.5)不保证线程安全。

    一般来说,我们写的程序都是单线程的,所以,用StringBuilder,效率高。

    JDK版本的升级原则:
    A:提高效率
    B:提高安全性
C:简化书写

17、集合:
    (1)为什么出现集合类?
        面向对象对事物的体现都是以对象的形式,为了方便对多个对象的操作,就对对象进行存储。
        集合就是存储对象最常用的一种方式.
    (2)数组和集合都是容器,两者有何不同?
        **数组长度固定,而集合长度是可变的   
        **数组值可以存储对象,还可以存储基本数据类型;而集合只能存储对象   
        **数组存储数据类型是固定的,而集合存储的数据类型不固定        
    (3)集合类的特点:
        集合只能存储对象
        集合的长度是可变的
        集合可以存储不同类型的对象
            

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马