零基础学java第三周 -- 面向对象

一、面向对象思想

1.概述:面向对象是相对于面向过程来讲的,指的是把 相关的数据和方法组织为一个整体 来看待。

2.三大思想:

OOA:面向对象分析(Object Oriented Analysis)

OOD:面向对象设计(Object Oriented Design)

OOP:面向对象程序(Object Oriented Programming

3.三大特征:

封装性:所有的内容对外部不可见

继承性:将其他的功能继承下来继续发展

多态性:方法的重载本身就是一个多态性的体现

二、类与对象

1.概述:

类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。

类必须通过对象才可以使用,对象的所有操作都在类中定义。

类由属性和方法组成。

2.定义格式:

class 类名称{

     成员属性

     成员方法

}

三、创建对象内存分析

1.栈:

概述:Java栈的区域很小 , 大概2m左右 , 特点是存取的速度特别快,栈存储的特点是, 先进后出。

存储内容:基本数据类型的数据和应用数据类型的地址。

2.堆:

存储内容:类的对象

3.方法区:

存储内容:类信息、静态的变量、常亮和成员方法。

方法区中包含了一个特殊的区域 ( 常量池 )(存储的是使用static修饰的成员)

4.PC寄存器:

PC寄存器保存的是 当前正在执行的 JVM指令的 地址 ! 在Java程序中, 每个线程启动时, 都会创建一个PC寄存器 !

四、构造方法(构造器)

作用:用于对象初始化。

执行时机: 在创建对象时,自动调用。

特点: 所有的Java类中都会至少存在一个构造方法 如果一个类中没有明确的编写构造方法, 则编译器会自动生成一个无参的构造方法, 构造方法中没有任何的代码!

            如果自行编写了任意一个构造器, 则编译器不会再自动生成无参的构造方法。

定义格式:与普通方法基本相同, 区别在于: 方法名称必须与类名相同, 没有返回值类型的声明 !

五、方法的重载(overload)

方法名称相同, 参数类型或参数长度不同, 可以完成方法的重载 ! 方法的重载与返回值无关!

六、封装private

在开发中, 为了避免出现逻辑错误, 我们建议对所有属性进行封装,并为其提供setter及getter方法进行设置和取得 操作

七、this

在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:

       1.调用类中的属性

       2.调用类中的方法或构造方法

      ·3.表示当前对象

八、static

概述:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访 问。 并且不会因为对象的多次创建 而在内存中建立多份数据

重点:

1. 静态成员 在类加载时加载并初始化。

2. 无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 )

3. 在访问时: 静态不能访问非静态 , 非静态可以访问静态

九、代码块

普通代码块:在执行的流程中 出现的 代码块, 我们称其为普通代码块。

构造代码块:在类中的成员代码块, 我们称其为构造代码块, 在每次对象创建时执行, 执行在构造方法之前。

静态代码块:在类中使用static修饰的成员代码块, 我们称其为静态代码块, 在类加载时执行。 每次程序启动到关闭 ,只会 执行一次的代码块。

同步代码块:在后续多线程技术中学习。

执行顺序: 静态代码块 --> 构造代码块 --> 构造方法

十、包

1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

2、包如同文件夹一样,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名 加以区别。因此,包可以避免名字冲突。

3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

十一、权限修饰符

十二、继承

1.继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法

2.格式:

class 父类 {

}

class 子类 extends 父类{

}

3.继承的限制:java中只有单继承,多重继承,没有多继承

十三、super

1.通过super可以访问父类构造方法。

2.通过super可以访问父类的属性。

3.通过super可以访问父类的方法。

子类的构造方法中自动创建父类的构造方法。

十四、重写(override)

1.参数列表必须完全与被重写的方法相同。

2.返回类型必须完全与被重写方法的返回值类型相同。

3.访问权限不能比父类中被重写的方法访问权限更低。

4.父类的成员方法只能被他的子类重写。

5.声明为static和private的方法不能被重写,但是能够被再次声明。

重载(overload)和重写(override)的区别:

         发生的位置:重载在一个类中,重写在字符类中

         参数列表限制:重载必须是不同的,重写必须相同

         返回值类型;重载与返回值类型无关,重写返回值类型必须一致

         访问权限:重载与访问权限无关,重写的子方法权限必须不小于父的方法权限

         异常处理:重载与异常无关,重写异常范围可以更小,但不能抛出新的异常

十五、final关键字

1.final修饰属性、变量

          变量成为常量,无法对其再次赋值

          final修饰的局部变量时只能赋值一次(可以先声明后赋值)

          final修饰的是成员属性时必须在声明时赋值

2.final修饰类:不可以被继承

3.final修饰方法:不能被子类重写

十六、抽象类

1.概念:

抽象类必须使用abstract class声明。

一个抽象类中可以没有抽象方法。

抽象方法必须写在抽象类或者接口中。

格式:

        abstract class 类名{

                // 抽象类

        }

2.抽象方法

       概念:只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用abstract关键字声明。

格式:

abstract class 类名{

      // 抽象类

      public abstract void 方法名() ; // 抽象方法,只声明而未实现

}

3.不能被实例化

在抽象类的使用中有几个原则:

        抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。

        一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全部抽象方法。

4.常见问题

      抽象类能否使用final声明? 不能,因为final属修饰的类是不能有子类的 , 而抽象类必须有子类才有意义,所以不能。

      抽象类能否有构造方法? 能有构造方法,而且子类对象实例化的时候的流程与普通类的继承是一样的,都是要先调用父类中的构造方法(默 认是无参的),之后再调用子类自己的构造方法。

5.抽象类和普通类的区别

     抽象类必须用public或protected修饰(如果为private修饰,那么子类则无法继承,也就无法实现其抽象方法)。 默认缺省为 public。

     抽象类不可以使用new关键字创建对象, 但是在子类创建对象时, 抽象父类也会被JVM实例化。

     如果一个子类继承抽象类,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么子类也必须定义为 abstract类。

十七、接口

1.概念

如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口。

定义格式:

interface 接口名称{

     全局常量 ;

     抽象方法 ;

}

2.接口的实现

接口可以多实现:

格式: class 子类 implements 父接口1,父接口2...{ }

以上的代码称为接口的实现。那么如果一个类即要实现接口,又要继承抽象类的话,则按照以下的格式编写即可:

class 子类 extends 父类 implements 父接口1,父接口2...{ }

3.接口与抽象类的区别

    抽象类要被子类继承,接口要被类实现。

    接口只能声明抽象方法,抽象类中可以声明抽象方法,也可以写非抽象方法。

    接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

    抽象类使用继承来使用, 无法多继承。 接口使用实现来使用, 可以多实现

    抽象类中可以包含static方法 ,但是接口中不允许(静态方法不能被子类重写,因此接口中不能声明静态方法)

    接口不能有构造方法,但是抽象类可以有

十八、多态

· 向上转型:将子类实例变为父类实例 |- 格式:父类 父类对象 = 子类实例 ;

· 向下转型:将父类实例变为子类实例 |- 格式:子类 子类对象 = (子类)父类实例 ;

十九、包装类

1.概述:八种包装类可以分为俩大类型

Number:Integer、Short、Long、Double、Float、Byte都是Number的子类表示是一个数字。

Object:Character、Boolean都是Object的直接子类。

2.字符串转换

在Integer类中提供了以下的操作方法:

public static int parseInt(String s)

将String变为int型数据

二十、可变参数

语法:

返回值类型 方法名称(数据类型…参数名称){

        //参数在方法内部 , 以数组的形式来接收

}

注意: 可变参数只能出现在参数列表的最后。

二十一、递归

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值