黑马程序员--面向对象01
来源:互联网 发布:vue.js可视化表单设计 编辑:程序博客网 时间:2024/06/18 08:50
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
注:视频来源,毕向东老师的 JAVA 基础视频。
理解面向对象
概述:
1. 面向对象是相对面向过程而言。
2. 面向对象和面向过程都是一种思想。
3. 面向过程强调功能行为。
4. 面向对象则是将功能封装进对象,强调具备了功能的对象。
5. 面向对象时基于面向过程的。
面向对象的特点:
1. 是一种符合人们思考习惯的思想。
2. 可以将复杂的事情简单化。
3.将程序员从执行者转换成了指挥者。
注意:以后开发其实就是在找对象使用,没有对象就创建对象。
面向的对象的三大特征:封装,继承,多态。
类与对象
概述
类就是对现实生活中事物的描述。
对象就是这类事物中实实在在存在的个体,包含属性和方法,对象的存在就是为了封装数据的。(堆内存)
成员变量和局部变量
成员变量:
- 成员变量定义在类中,在整个类中都可以被访问。
- 成员变量随着对象的建立而建立,存在于对象所在的堆内存中。
- 成员变量有默认初始化值。
局部变量:
- 局部变量只定义在局部范围内,如:函数内,语句内等。
- 局部变量存在于栈内存中。
- 作用的范围结束,变量空间会自动释放。
- 局部变量没有默认初始化值。
匿名对象
匿名对象是对象的简化形式。
匿名对象两种使用情况:
- 当对对象方法仅进行一次调用的时。
- 匿名对象可以作为实际参数进行传递。
封装
概念
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处
a)将变化隔离。
b)便于使用。
c)提高重用性。
d)调高安全性。
原则
a) 将不需要对外提供的内容都隐藏起来。
b) 把属性都隐藏,提供公共方法对其访问。
注意:
私有仅仅是封装的一种表现形式。之所以对外提供访问方式,就因为可以在访问中加入逻辑判断等语句对访问的数据进行操作,提高代码的健壮性。
构造函数
特点:
- 函数名与类名相同。
- 不用定义返回值类型。
- 不可以写return。
作用:给对象进行初始化。
注意:
- 默认构造函数的特点:当一个类中没有定义构造函数时,那么系统就会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。
- 多个构造函数是以重载的形式存在的。
构造代码块
给所有对象进行初始化。对象一建立就运行,而且优先于构造函数运行。
this关键字
class Student{ private String name; private int age; public Student(String name, int age) {//局部变量和成员变量相同 super(); this.name = name;//this代表他所在函数所属对象的引用 this.age = age;//简单说:哪个对象在调用this所在的函数,this就代表哪个对象。 } public String getName() { return name; } public int getAge() { return age; } public String toString(){ return "name="+this.name+" age="+this.age; }}
总结:
this的两种用法:1、用于区分同名变量的情况,说的成员和局部同名的时候;2、用于构造函数间调用。
static关键字
static是一个修饰符,用于修饰成员(成员变量和成员函数)。当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。格式:类名.静态成员。
static特点:
1.随着类的加载而加载。 也就是说:静态会随着类的消失而消失,说明它的生命周期最长。
2.优先于对象存在。明确一点:静态是先存在。对象是后存在。
3.被所有对象所共享。
4.可以直接被类名所调用。
实例变量和类变量的区别:
1、存放位置。
类变量随着类的加载而存在于方法区中。
实例变量随着对象的建立而存在于堆内存中。
2、生命周期。
类变量生命周期最长,随着类的消失而消失。
静态有利有弊:
利处:对对象共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。可以直接被类名调用。
弊端:生命周期过长。
访问出现局限性。(静态虽好,只能访问静态)。
静态使用注意事项:
1、静态方法只能访问静态成员。
非静态方法既可以访问静态也可以访问非静态。
2、静态方法中不可以定义this,super关键字。
因为静态优先于对象存在。所以静态方法中不可以出现this。
3、主函数是静态的。
什么时候使用静态?
从两方面下手: 因为静态修饰的内容有成员变量和函数。
1、什么时候定义静态变量(类变量)呢?
当对象中出现共享数据时,该数据被静态所修饰。
对象中的特有数据要定义成非静态存在于堆内存中。
2、什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。
静态代码块:
格式:
static
{
静态代码块中的语句。
}
特点:随着类的加载而执行,执行一次。并优先于主函数。用于给类进行初始化。
Person p = new Person(“zhangsan”,20);
这句话做了什么事情?
1、因为new用到了Person.class,所以会找到Person.class文件,并加载到内存中。
2、执行该类中的static静态代码块,如果有的话,给Person.class,类进行初始化。
3、在堆内存中开辟内存空间,并确定分配内存地址。
4、在堆内存中建立对象的特有属性,并进行默认初始化。
5、对属性进行显示初始化。
6、对对象进行构造代码块初始化。
7、对对象进行对应的构造方法初始化。
8、将对象地址付给栈内存中的p变量。
单例设计模式
作用:单例设计模式:解决一个类在内存只存在一个对象。
两种形式:
1.饿汉式:Single类一进内存,就已经创建好了对象。
2.懒汉式:对象是方法被调用时,才初始化,也叫做对象的延时加载。称为:懒汉式。Single 类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
注意:懒汉式经常出现在面试中。
public class day6{ public static void main(String[] args) { }}//饿汉式单例设计模式class Single{ private static Single s = null; private Single(){} public static Single getInstance(){ if (s==null) synchronized(Single.class){//防止多线程安全问题,上锁。 if (s==null){ s = new Single(); } } return s; }}
- 黑马程序员-面向对象01
- 黑马程序员 面向对象---01
- 黑马程序员------面向对象01
- 黑马程序员--面向对象01
- 黑马程序员 面向对象
- 黑马程序员---面向对象
- 黑马程序员-面向对象
- 黑马程序员-面向对象
- 黑马程序员-面向对象
- 黑马程序员--面向对象
- 黑马程序员-面向对象
- 黑马程序员--面向对象
- 黑马程序员--面向对象
- 黑马程序员-面向对象
- 黑马程序员--面向对象
- 黑马程序员-面向对象
- 黑马程序员-----面向对象
- 黑马程序员 面向对象
- java设计模式学习之装饰者模式
- Delphi7学习第一天
- fetch bulk collect into 批量效率的读取游标数据【转载】
- 栈与队列
- [LeetCode]Product of Array Except Self
- 黑马程序员--面向对象01
- 我的cocos2之旅 第一天(环境的安装以及Hello World)
- 2015.7.24 改正后的稍简陋通讯录
- 最新期货交易时间表
- hdu 1068 poj 1466 最大独立集
- ssh方式访问oschina仓库
- 程序猿利器(二) sql server 存储过程升级脚本自动合并
- gadget编码与单元测试和service编写示例
- 使用Lua 局部变量来优化性能,同时比较局部变量和全局变量