一. 二维数组的定义格式和常见用法

二维数组的定义格式:

                        1)直接给定一维数组的长度    数组类型[][]  数组名称=new 数组类型 [x][y]

                        2)给定一维数组的个数           数组类型[][]  数组名称=new 数组类型[x][]

                        3)给定数组的元素值               数组类型[][]  数组名称=new 数组类型[][]{{元素1,元素2...},{元素1,元素2...},......}

                                              简便写法          数组类型[][]  数组名称={{元素1,元素2...},{元素1,元素2...},......}

  注意:简便写法在声明之后必须立即初始化,不能先声明再初始化

二维数组的初始化:

                       1)静态初始化:给定数组长度,系统默认初始值   形式为定义格式中的1),2)

                       2)动态初始化:不给定数组长度,给定初值          形式为定义格式中的3)和简便写法

二维数组的遍历:   

                        给定一个静态初始化的二维数组如何遍历数组元素?其实这个问题不难理解,构造两个循环的嵌套,外层循环控制一维数组的个数,内层循环控制一维数组的长度

例如:给定int[][] array=new int[][]{{1,2,3},{4,5,6},{7,8,9}};,遍历数组元素

java面向对象

二.代码块的简单概述及应用

代码块的定义:在java中,用{}括起来的叫做代码块

代码块的分类:

                      1)局部代码块 :直接定义在方法内部,一般和 if ,while, for....等一起使用
                      2)初始化代码块:直接定义在类中方法外

                      3)静态代码块:用static修饰的初始化代码块

静态代码块,构造代码块,构造方法的执行流程:

                      1)静态代码块只执行一次,随着类的加载而加载

                      2)每次创建对象都会调用构造方法,在调用构造方法之前都会先执行一次初始化代码块

优先级:静态代码块>初始化代码块>构造方法

三.继承关系

继承的特点:继承只能单继承不能多继承,但是可以多层继承

继承的格式:class 子类  extends 父类

继承的好处:

                    1) 继承可以提高代码的复用性

                    2) 继承可以提高代码的维护性

                    3) 它是多态的前提

方法的覆盖: 子类声明一个与父类相同的方法声明,其目的是覆盖父类的方法,当对象调用这个方法时优先调用子类中的这个方法完成自己的功能

注意事项:

                   1) 子类继承父类的成员或方法是由其修饰符决定的,private不能直接访问

                   2) 子类不能继承父类的构造方法但可以通过super()访问

                   3) 子类构造方法进行数据初始化时,总是默认访问父类构造方法,让其先进行初始化

注意:super()语句必须在构造方法第一句, object是所有类的父类

假如父类没有无参构造方法?会有什么结果,如何解决?

编译错误    1) 可以自己提供无参构造方法

                  2) 通过super(有参构造)访问

                  3) 通过this()访问本类的无参构造,在通过无参构造间接访问父类的带参构造

注释:成员变量名称一致时,访问的时采用"就近原则" 

寻找顺序:局部位置----->成员位置---->父类的成员位置---->如果还没有就报错

四.多态

多态的概念:同一时刻,体现出不同的形态

多态的前提:

                 1) 必须有继承关系

                 2) 必须有方法的覆盖

                 3) 存在向上转型

多态的弊端及解决方法: 

           弊端:不能访问子类的特有的功能

           解决方法:向下转型,将父类的引用强制转换为对子类的引用

向下转型容易出现的错误: class cast Exception,类型转换不当,此时仔细分析内存的指向问题

多态的优点:

               1) 提高代码的复用性

               2) 提高代码的扩展性

多态成员的访问特点:

              1) 成员变量:编译看左,运行看左

              2) 成员方法(非静态):编译看左,运行看右

              3) 成员方法(静态):编译看左,运行看左

五.抽象类

概念:将类中的功能抽象化,用abstract修饰类

抽象类的特点:不能实例化即不能创建对象

抽象类成员的特点:

             成员变量:既可以是变量,也可以是常量

             成员方法:既可以是抽象方法也可以是非抽象方法           

             构造方法:有参/无参

注意:抽象类的的抽象方法没有方法体,必须在子具体类中重写

注释:

            1) 有抽象方法的类一定是抽象类,但抽象类不一定有抽象方法

            2) 抽象类的子具体类为非抽象类,否则没有研究意义

抽象类多态的使用和多态相同

六.接口

概念:给一些类提供一些额外的功能(扩展功能), 定义接口的关键字是:interface

接口的成员特点:

               1) 成员变量:全部为常量,默认的修饰符:public static final

               2) 成员方法:全部为抽象的方法

注意:接口没有构造方法

接口子实现类的格式: class  实现类名    implements   接口名

接口多态的使用和多态相同

七.final关键字

final可以修饰类, 成员变量, 成员方法

             1) final修饰类,则该类不能被继承

             2)  final修饰成员变量,则该变量代表一个常量

             3) final修饰成员方法,则该方法不能被重写

注释: final修饰成员变量,该变量可以是基本数据类型,也可以是引用数据类型

             1) 修饰基本数据类型,则代表该值一旦被赋初始值,则该值不能被重新赋值

             2) 修饰引用数据类型,则代表该引用类型的地址不能改变,但该地址里面的内容可以改变

八.形式参数和返回值的问题

 1)  形式参数为具体类: 形式参数为一个具体类的话,则创建具体对象作为实际参数

java面向对象

 2)形式参数为抽象类:抽象类形式参数要借助其子具体类来实现

java面向对象

3)形式参数是接口:形式参数如果是接口的话,则需要创建其子实现类

java面向对象

4)返回值是一个类:

java面向对象

5)返回值是抽象类:返回值如果是抽象类的话,必须借助于其子具体类来完成返回操作

 java面向对象

6)返回值是接口: 返回数据类型如果是接口,则必须要先建立其子实现类

java面向对象

九.内部类的访问特点及内部类的分类

内部类的分类: 内部类有两种:
            1)成员内部类

            2)局部内部类

内部类的访问特点:

 1.内部类(非静态)访问外部类可以直接访问,包括私有的成员变量

注意:局部内部类访问局部变量,jdk1.8声明该变量时不加final不会报错,但jdk1.7则会报错

java面向对象

 2.外部类如果要访问成员内部类(非静态)成员的话,则要创建对象,分两种情况
            1)创建两次对象,间接访问

            2)直接访问 :外部类名.内部类名 对象名=new 外部类无参构造.new 内部类无参构造

3.外部类访问局部内部类

            1)内部类如果是静态的,外部类访问内部类的成员

                  外部类名.内部类名 对象名=new 外部类名.内部类名()

            2)静态的内部类如果要访问外部类的数据,则该数据必须有static修饰,静态类只能访问静态成员

4.匿名内部类

前提:必须存在接口/类(抽象类/具体类)

格式:new   接口名/类名(){

          重写的方法(){.........}

};

注释:利用匿名内部类不需要创建子实现类

实际应用如下例:

java面向对象

十.抽象类和接口的区别?
        1成员的区别:
                1)成员变量:抽象类既可以是变量也可以是常量,接口只能是常量
                2)成员方法:抽象类既可以有抽象方法也可以有非抽象方法,接口只能有抽象方法
                3)构造方法:抽象类有构造方法,接口没有构造方法
        2关系的区别:
                1)接口和类之间是实现关系,一个类继承一个类的同时,还可以实现多个接口
                2)类和类是继承关系,只能是单继承,不能是多继承,但是可以是多层继承
                3)接口和接口之间是继承关系,可以是单继承也可以是多继承
        3设计原则的区别:
                1)抽象类是一种继承关系,体现的是一种"is a"的关系
                2)接口是一种实现关系,体现的是一种"like a"的关系


       

       

  

       

 

               


























相关文章: