黑马程序员——面向对象(一)
来源:互联网 发布:qq堂 知乎 编辑:程序博客网 时间:2024/05/06 01:50
黑马程序员——面向对象
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 面向对象的概念
1.1理解面向对象
◆面向对象是相对面向过程而言
◆面向对象和面向过程都是一种思想
◆面向过程(强调的是功能行为)
◆面向对象(将功能封装进对象,强调具备了功能的对象)
◆面向对象是基于面向过程的
执行者变指挥者
1.2面向对象:三个特征:封装,继承,多态
开发就是找对象使用,没有对象,就创建一个对象
找对象,建立对象,使用对象
2. 类与对象的关系
2.1
类:对现实生活中事物的描述
对象:就是这类事物,实实在在存在个体
映射到java中,描述就是class定义的类
具体对象就是对应到java在堆内存中用new建立实体
属性对应类中变量,行为对应的类中的函数(方法)
其实定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法)
Class Car
{
public String name=””;
public void run()
{
}
}
2.2
成员变量和局部变量作用范围
成员变量作用于整个类中
局部变量作用于函数中或者语句中也就是所在{}中
在内存中的位置
成员变量:在堆内存中,因为对象的存在,才在内存中存在
局部变量:在栈内存中
2.3匿名对象
◆匿名对象是对象的简化形式
◆匿名对象两种使用情况
当对对象方法仅进行一次调用时
匿名对象可以作为实际参数进行传递
3. 封装
▲定义:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
▲好处:将变化隔离、便于使用、提高重用性、提高安全性
▲封装原则:
将不需要对外提供的内容都隐藏起来
把属性都隐藏,提供公共方法对其访问
▲私有仅仅是封装的一种表现形式
▲之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句, 对访问的数据进行操作,提高代码健壮性
4. 构造函数
对象一建立就会调用与之对应的构造函数
构造函数的作用:可以用于给对象进行初始化
▲构造函数的小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造 函数
当在类中自定义了构造函数后,默认的构造函数就没有了
▲特点:
函数名与类名相同
不用定义返回值类型
不可以写return语句
▲作用:
给对象进行初始化
▲注意:
默认构造函数的特点
多个构造函数是以重载的形式存在的
▲构造函数和一般函数在写法上有不同
在运行上有不同
构造函数是在对象一建立就运行,给对象初始化
而一般方法是对象调用时才执行,是给对象添加对象具备的功能
一个对象建立,构造函数只运行一次
而一般方法可以被该对象调用多次
▲什么时候定义构造函数
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中
▲构造代码块
作用:给对象进行初始化
对象一建立就运行,而且优先于构造函数执行
▲构造代码块和构造函数的区别
构造代码块是给所有对象进行统一初始化
而构造函数是给对应的
构造代码块中定义的是不同对象共性的初始化内容
▲一个了类中默认会有一个空参数的构造函数,这个默认的构造函数的权限和所属类一致,如果类被public修饰,那么默认的构造函数也带public修饰符
默认构造函数的权限是随着类的变化而变化
5. this关键字
this:看上去,是用于区分局部变量和成员变量同名情况的
this:就代表本类的对象,代表它所在函数所属对象的引用
那个对象调用this所在的函数,this就代表那个对象
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这是用this 来表示这个对象
但凡本类功能内部使用了本类对象,都用this表示
this语句:用于构造函数之间进行相互调用
this语句只能定义在构造函数的第一句
6. static关键字
●用于修饰成员(成员变量和成员函数)
●被修饰的成员具备以下特点
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
●使用注意
静态方法只能访问静态成员
静态方法中不可以写this,super关键字
主函数是静态的
String name 成员变量,实例变量
static String name 静态成员变量 类变量
●实例变量和类变量的区别
1.存放位置
类变量随着类的加载而存在于方法区中
实例变量随着对象的建立而存在于堆内存中
2.声明周期
类变量声明周期最长,随着类的消失而消失
实例变量生命周期随着对象的消失而消失
●静态使用注意事项
1.静态方法只能访问静态成员
非静态方法既可以访问静态也可以访问非静态
2.静态方法中不可以定义this。super关键字
●静态有利有弊
利:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份,可以直接被类名调用
弊:生命周期过长
访问出现局限性(只能访问静态)
●什么时候使用静态
定义静态变量(类变量)对象中出现共享数据时,该数据被静所修饰
定义静态函数:当功能内部没有访问到非静态数据(对象的特有数据)
静态的应用
每一个应用程序中都有共性的功能
可以将这些功能进行抽取,独立封装,以便复用
●静态代码块
特点:随着类的加载而执行,只执行一次,并优先于主函数,用于给类进行 初始化的
●Person p = new Person(“张三”,27)这句话都做了什么事情
1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中
2.执行该类中的static代码块,如果有的话,给Person.class类进行初始化
3.在堆内存中开辟空间,分配内存地址
4.在堆内存中建立对象的特有属性,并进行默认初始化
5.对属性进行显示初始化
6.对对象进行构造代码块初始化
7.对对象进行对应的构造函数初始化
8.将内存地址付给栈内存中的p变量
7. 单例设计模式
设计模式:解决某一类问题最行之有效的方法java中有23种通用模式 JOF
单例设计模式:解决一个类在内存中值存在一个对象
想要保证对象唯一
1. 为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象
将构造函数私有化
2. 还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象
在类中创建一个本类对象
3. 为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式
提供一个方法可以获取该对象
定义单例时建议使用饿汉式
/** * 单例设计模式1 * 饿汉式 * @author Administrator * */public class Single {private Single(){}private static Single s = new Single();public static Single getInstance(){return s;}}
/** * 单例模式2 懒汉式 * * @author Administrator * */public class Single {private Single() {}private static Single s = null;private static Single getInstace() {if (s == null) {synchronized (Single.class) {if (s == null)s = new Single();}}return s;}}
- 黑马程序员—java面向对象一
- 黑马程序员—面向对象(一)
- 黑马程序员———面向对象(一)
- 黑马程序员——JAVA面向对象(一)
- 黑马程序员——day05面向对象(一)
- 黑马程序员——面向对象(一)
- 黑马程序员——面向对象(一)
- 黑马程序员——二维数组、面向对象(一)
- 黑马程序员—OC—面向对象(一)
- 黑马程序员——面向对象(一)
- 黑马程序员——java面向对象(一)
- 黑马程序员——Java面向对象知识点(一)
- 黑马程序员——面向对象(一)
- 黑马程序员——JAVA 面向对象总结(一)
- 黑马程序员——面向对象(一)
- 黑马程序员——面向对象(一)
- 黑马程序员——面向对象(一)
- 黑马程序员——Java基础--面向对象(一)
- 集合框架常用的方法总结
- 随笔
- Android 杂谈
- ionic 学习资源整理
- ubuntu14.04 android studio 安装
- 黑马程序员——面向对象(一)
- 操作系统与网络实现 之二
- unity3d 在编辑器中修改AnimationClip的属性值
- Android ListView异步加载图片错位、重复、闪烁分析以及解决方案
- LeetCode---Construct Binary Tree from Preorder and Inorder Traversal
- ios9 提示框的正确使用
- Magic Leap红成这样 所以过去一年它做了什么? 光场 全息
- IO常用方法
- RedHat 9.0 中文显示问题