黑马程序员--面向对象01

来源:互联网 发布:vue.js可视化表单设计 编辑:程序博客网 时间:2024/06/18 08:50

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
注:视频来源,毕向东老师的 JAVA 基础视频。

理解面向对象

概述:
1. 面向对象是相对面向过程而言。
2. 面向对象和面向过程都是一种思想。
3. 面向过程强调功能行为。
4. 面向对象则是将功能封装进对象,强调具备了功能的对象。
5. 面向对象时基于面向过程的。

面向对象的特点:
1. 是一种符合人们思考习惯的思想。
2. 可以将复杂的事情简单化。
3.将程序员从执行者转换成了指挥者。

注意:以后开发其实就是在找对象使用,没有对象就创建对象。

面向的对象的三大特征:封装,继承,多态。

类与对象

概述
类就是对现实生活中事物的描述。
对象就是这类事物中实实在在存在的个体,包含属性和方法,对象的存在就是为了封装数据的。(堆内存)

成员变量和局部变量
成员变量:

  1. 成员变量定义在类中,在整个类中都可以被访问。
  2. 成员变量随着对象的建立而建立,存在于对象所在的堆内存中。
  3. 成员变量有默认初始化值。

局部变量:

  1. 局部变量只定义在局部范围内,如:函数内,语句内等。
  2. 局部变量存在于栈内存中。
  3. 作用的范围结束,变量空间会自动释放。
  4. 局部变量没有默认初始化值。

匿名对象
匿名对象是对象的简化形式。
匿名对象两种使用情况:

  1. 当对对象方法仅进行一次调用的时。
  2. 匿名对象可以作为实际参数进行传递。

封装

概念
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处
a)将变化隔离。
b)便于使用。
c)提高重用性。
d)调高安全性。
原则
a) 将不需要对外提供的内容都隐藏起来。
b) 把属性都隐藏,提供公共方法对其访问。
注意:
私有仅仅是封装的一种表现形式。之所以对外提供访问方式,就因为可以在访问中加入逻辑判断等语句对访问的数据进行操作,提高代码的健壮性。

构造函数

特点:

  1. 函数名与类名相同。
  2. 不用定义返回值类型。
  3. 不可以写return。

作用:给对象进行初始化。

注意:

  1. 默认构造函数的特点:当一个类中没有定义构造函数时,那么系统就会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。
  2. 多个构造函数是以重载的形式存在的。

构造代码块
给所有对象进行初始化。对象一建立就运行,而且优先于构造函数运行。

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;    }}
0 0