面向对象
面向过程语言设计思想
过程: 具体步骤
把要完成的一件事情,分成一步一步的步骤,然后逐步完成.
把大象装进冰箱.
洗衣服
1.打开洗衣机盖 ()
2.衣服扔进去()
3.关闭洗衣机盖()
面向对象语言设计思想
首先会宏观的对整个事物进行分析(分类),不关心具体要做什么,关心谁(对象)去做.
洗衣机
开盖()
关盖()
洗衣服()
人
操作()
面向过程和面向对象是相辅相成的,面向对象是宏观的设计,面向过程是具体的实现.
Java类
类就是对同一类事物(具体存在的) 共有的属性(名词)行为(动词)的定义(抽象)
类是一个模板 根据某个类 来创建这个类的具体实例(对象)
发现类(设计类)
定义类的成员变量
定义类的成员方法
java对象
对象是类的实例 是概念的具体存在 以类为模板,在内存中创建一个真实存在的实例.
万事万物(现实存在)皆为对象(可以使用的)
类中的变量
从数据类型角度分:
基本类型变量: byte short int long float dobule char boolean
引用类型变量: 类 数组 接口...
按照位置划分:
成员变量:直接被类包含
成员变量的数据类型可以为基本类型也可以为引用类型
可以对成员变量进行初始化赋值(不建议), 如果不初始化,创建对象时,可以调用构造方法使用默认值赋值.
成员变量在创建对象的时候会从类中复制一份到对象中。
成员变量可以被类中方法、构造方法和特定类的语句块访问
成员变量生命周期: 变量什么时候生(对象创建),什么时候死(对象被回收时)
局部变量:在方法(成员方法,构造方法)中 或者代码块中
局部变量在使用前必须显示的初始化赋值
局部变量生命周期: 变量什么时候生(方法被调用时),什么时候死(方法运行结束 出栈)
类中的方法
成员方法: (非static修饰的) 被对象调用. 完成对象的功能(行为) 定义在类中
构造方法 : 用来初始化创建出来的对象 例如为对象中的属性赋值
方法名与类名相同,没有返回值,不需要void修饰
每一个类中至少有一个默认无参的构造方法,每次创建对象时至少调用一个.
如果显示的定义一个构造方法,默认的就失效了
方法重载
在同一个类中,有多个方法的名称相同.
如何区分方法
通过参数区分: 参数个数不同, 类型,顺序
方法的重载与方法返回值类型无关
● 对象与引用
● static关键字
● 代码块
● 包
● 访问权限修饰符
● 面向对象特征--封装
● this关键
对象与引用
• Java 语言中除基本类型之外的变量类型都称之为引用类型。
• Java中的对象是通过引用对其操作的.
例如: 我们有一个自定义类为Car(汽车类) class Car{ String color; String name; String model; } Car car= new Car(); 通常把这条语句的动作称之为创建一个对象,其实,它包含了三个动作。
基本类型和引用类型的区别: 基本类型 byte,short,int,long,float,double,char,boolean 它的值就是一个数字,一个字符或一个布尔值. 引用数据类型 类,接口,数组 它的值是对象在内存空间中的地址,具体的对象存在堆中
● 值传递与引用传递 ● Java中进行方法调用中传递参数时,参数传递有两种: ● 值传递:(形参数类型是基本数据类型):方法调用时,实际参数把它的值传递给 对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是 两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。 ● 引用传递:(形参数类型是引用数据类型参数):也称为传地址。方法调用时,实 际参数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形 式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下 来,所以方法执行中形式参数的改变将会影响实际参数。 基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身。
static 关键字
概念 :static被称为静态,可以用来修饰类的属性,方法,代码块,内部类。
随着类的加载而加载。
优先于对象存在
修饰的成员,被所有对象所共享
可不创建对象,直接被类调用
static属性 静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存 中只有一个
static方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用
在static方法内部只能访问类的static属性,不能访问类的非static属性,static属性先加载
代码块
代码块在类中声明,类似一个没有名称的方法体(代码块),代码分实例块和静态块 实例块:每次创建对象时自动调用 { //任何符合语法的Java代码 } 静态块:类加载时自动调用,仅一次,与是否创建对象无关。 static { //任何符合语法的Java代码}
包
●包的概念: 就是文件夹
●包的作用: 1.避免类重名 2.按照不同功能管理类 3.控制访问权
● 包(package)的命名规范: 在包名中,可以使用.号来区分包的级别;包名一般情况下是小写 第一级 指该项目的类型,如com,org,gov等, 第二级 指项目所开发或者运行的公司名称,如:oracle,sun,huawei 等 第三级 指项目的名称,如:bcms,oa,erp,cms等 第四级 指项目模块的名称,如:bean,action,exception等 ● 包可以更好得管理逻辑相关的类,可以控制不同包之间的访问权限 ● 导入外部包的类,关键字“import”
访问权限修饰符
Java语言有四个权限访问修饰符,权限从大到小依次为:
1)public :公共权限 修饰类、属性、方法。可以被任意类访问
2)protected:受保护的权限 修饰属性、方法。 可以被同包类访问,如果不是同包类,必须是该类的子类才可以访问。
3)default:同包权限 修饰类、属性、方法。只能被同包的类访问
4)private:私有权限 修饰属性、方法。 只能在本类中访问
●面向对象语言的三大特征
封装
就是将类中某些信息隐藏起来(权限),不让外界直接访问,而是通过提供的特定方法来访问.
this
表示当前正在调用的对象
继承
儿子 继承 父亲
优点: 儿子可以使用父亲的功能 提高代码的复用性
继承使用场景
Student Dog Car Pseron
Dog 继承 Car
Car 继承 Dog
Dog 继承 Animal
满足 xxx是xxx is a
Student 继承 Person
Teacher 继承 Person
继承是面向对象程序设计思想,提高代码的重用性,可扩展性
多态
封装 包装
继承 子继承父
多态:
同一种事物,在不同时刻表现不同的状态
满足3条件:
要有继承
要有方法重写
父类引用指向子类对象
Object obj = new Car();
obj = new Dog();
obj = new Cat();
抽象类
如果一个类中没有包含足够的信息(抽象方法)来描绘一个具体的对象,这样的类就是抽象 类。
抽象类中可以没有抽象方法,有抽象方法必定是抽象类
一般用在体系结构的顶层用来进行功能的定义声明