------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.面向对象
1.1.面向对象的概念
面向对象是一种对现实世界的一种抽象,是计算机编程技术发展到一定阶段后的产物
1.2.理解面向对象
面向对象是相对于面向过程而言
面向对象和面向过程都是一种思想
面向过程:强调的是功能行为,以过程为中心,算法为驱动 程序=算法+数据
面向对象:将功能封装进对象,强调具备了功能的对象,以对象为中心,消息为驱动 程序=对象+消息
面向对象是基于面向过程的
一句话概括:万物皆对象
举例:电灯泡的发明与使用
有对象直接拿来用,没有对象造一个对象用
1.3.面向对象的特点
三个特征:封装,继承,多态
找对象,建立对象,使用对象,维护对象的关系
现实中的对象:张三 李四
想要描述:提取对象中共性内容.对具体的抽象
描述时:这些对象的共性有:姓名,年龄,性别,学习java的功能
映射到java中,描述就是class定义的类
具体对象就是对应java在堆内存中用new建立实体
1.4.类与对象的关系
类就是对现实生活中事务的描述
对象就是这类事实物就是实实在存在的个体
概括:类是对象的抽象,对象是类的具体class Car
{
//描述颜色
String color = "红色";
//描述轮胎数
int num = 4;
//运行行为。
void run()
{
System.out.println(color+".."+num);
}
}
Car a=new Car()内存中开辟情况
成员变量:定义在方法之外的变量
局部变量:定义在方法内部,参数列表,for循环等位置上
区别:
1. 作用的范围不一样
成员变量作用于整个类中,局部变量作用于函数中,或者语句中
2. 在内存中的位置:
成员变量在堆内存中,因为对象的存在,才在内存中存在
局部变量存在于栈内存中,当方法调用结束后会消失
1.5.匿名对象
没有名字的对象
匿名对象时对象的简化形式
匿名对象两种使用情况
1. 当对对象方法仅进行一次调用时,比较简化
如果对一个对象进行多个成员调用时,必须起个名字
2. 匿名对象可以作为实际参数进行传递
匿名对象调用属性没有意义,调用方法有意义
new Car();
匿名对象开辟内存情况:1.6.封装(encapsulation)
是指隐藏对象的属性和实现的细节,仅对外提供公共访问方式
好处:
1. 将变化隔离
2. 便于使用
3. 提高重用性
4. 提高安全性
原则:
1. 将不需要对外提供的内容都隐藏起来
2. 把属性都隐藏,提供公共方法对其访问
拿买电脑举例:你找一个人给你买电脑,这个懂电脑的人如何去和卖电脑的人谈内存,谈硬盘,谈CPU你都不需要了解,只要那人把电脑买到即可.也就是说,这个人去买电脑的技巧和方法和你都没有关系,对你是隐藏的
注:函数是java中最小的封装体
类也是封装体
包也是封装体
框架也是封装体
饭店:顾客-->服务员-->厨师
关键字:
private:私有的,权限修饰符:用于修饰类中的成员(成员变量,成员方法)
私有只在本类中有效,类以外即使建立了对象也不能直接访问
注:封装不是私有
私有仅仅是封装的一种表现形式
之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句
对访问的数据进行操作.提高代码的健壮性
成员变量在不初始化值得情况下是可以进行运算的,因为在堆内存中开辟空间时会赋值为默认值
局部变量在不初始化值得情况下是不可以进行运算的,因为它是在栈内存中开辟的内存空间,不会赋默认值
2.构造函数
1. 函数名与类名相同
2. 不用定义返回值类型
3. 不可以写return语句
作用:
给对象进行初始化
注意:
1. 默认构造函数的特点
a. 当一个类中没有定义构造函数的时候,那么系统会默认给该类加入一个空参数的构造函数
b. 当在类中自定义了构造函数后,默认的构造函数就没有了,如果初始化时调用空参数的构造函数,编译会报错
2. 多个构造函数是以重载的形式存在的
对象一建立就会调用与之相对应的构造函数
一出现就出现了一些基础的特性(人一出生就会哭)
练习:定义一个person类,写3个构造函数
class Person{
private String name;
private int age;
Person(){
}
Person(String name){
this.name=name;
}
Person(String name,int age){
this.name=name;
this.age=age;
}
}
3. 构造函数和一般函数的不同点
a. 在写法上不同
b. 在运行上不同:
i:构造函数在对象一建立时就运行,为对象初始化
ii:一般函数在对象调用时才运行,是为对象添加所具备的功能
c. 运行的次数
i:构造函数只运行一次(声明的对象构造方法只能执行一次)
ii:一般函数可以被对象调用多次
4. 什么时候定义构造函数呢?
a. 在分析事物时,该事物在存在时就具备;一些特性或行为,那么将这些内容定义在构造函数中
2.1构造代码块:
{
System.out.print(“hello”);
}
作用:给对象进行初始化
对象一建立就运行,而且优先于构造函数执行
构造代码块与构造函数的区别
1. 构造代码块是给所有的对象进行统一初始化
2. 而构造函数是给对应的函数初始化
可以把不同构造函数的的共性放在构造代码块中统一初始化
构造代码块小细节:
1. 构造函数可以使用private修饰,只是被修饰的构造函数不能被在他类中初始化对象
当局部变量名称和全局变量名称相同
String name;
public Person(String name){
name=name;
}
在编译时不会出错,在运行时也不会出错
但是执行结果却是null
如果方法中有的此变量名,在方法中就会调用此变量名
如果方法中没有此变量名,才会去全局变量中寻找变量名
如果想把局部变量中的值赋给全局变量,需要对全局变量进行标识
就引入了关键字:this
3.this关键字
this可以区分局部变量和成员变量情况
问题:
1. this为什么可以解决这个问题呢?
2. this到底代表的是什么呢?
this:
代表本类的对象
代表它所在函数所属对象的引用
简单说:哪个对象在调用this所在的函数,this就代表哪个对象
this 关键字的应用
当定义类时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象
(本类对象调用本类方法时,使用this关键字)
构造函数之间调用已经有的方法:
public Person(String name){
name=name;
}
public Person(String name,int age){
this(name);//没有点
this.age=age;
}
注意:
1. this语句只能定义在构造函数的第一行,因为初始化要先执行
2. this只能在构造函数之间应用,成员方法不能调用构造函数
3. this指向的是当前对象的内存地址值(可以输出)