- 面向对象与面向过程
- 对于面向对象的思想: 强调的是对象也就是我们所说的实体,代表着指挥者,代表语言有C++、C#、Java
- 对于面向过程的思想:强调的是过程也就是动作行为,代表着执行者,代表语言有C语言
- 宏观上来看对于一门面向对象的语言里不能纯面向对象,必须要有执行者参与;而对于一门语言可以纯面向过程。
- 那么到底什么是面向对象呢?
面试官为了公司的发展和业务的需求,需要招聘一批具有专业素养的人来面试,面试官是对象,调用面试这个方法; - 那到底什么是面向过程呢?
面试官进行简历筛选,打电话或者e-maile通知我来这里,对我提出问题等等一系列行为叫做面向过程。
- 类的定义
- 类是事物描述的集合,定义类就是定义类中的成员。类是对象的模板,定义对象的属性,并提供用于已创建对象的构造方法以及操作对象的普通方法。
- 类也是一种数据类型。可以用它声明对象引用变量。对象引用变量似乎存放了一个对象,但事实上只是对象的引用,他们的区别可以忽略。
- 对象的定义
对象就是该类事物的实例,由类所产生出来的。 - 类与对象的关系
类就好比一个模具,而对象就是模具加工出来的各种形状的玩意。
类也可以想象为一个图纸,而对象就是图纸建造出来的房子。 - 类的代码定义
一个类中主要是描述相同属性和行为的
- 对于属性,可用变量表示,类中的变量为成员变量
- 对于行为,可用函数表示,类中的一般函数我们叫做成员函数。
- 成员变量
定义在一个类中,每个对象都有一个该属性,其值可以不同,都属于特有属性。 - 成员函数
在类中的成员函数,该类所创建出的对象都可调用。 - 如何创建对象
首先在堆内存中开辟空间(开辟大小由JAVA内存自己决定)同时划分地址,在这个空间里成员变量默认初始化,成员变量显示初始化,然后栈中的函数中有一个对象变量名,我们将堆内存的地址给过去就好了。 - 成员变量与局部变量
- 存储位置:成员变量存在于堆内存所属的对象中;局部变量存在于栈内存所属的函数中。
- 生命周期:成员变量随着对象的创建而存在,随着对象的消亡而结束;局部变量随着函数的进栈而存在,随着函数的弹栈而消失
- 初始化:成员变量有默认初始化,局部变量只能在初始化后被调用。
- 全局变量:该类中成员变量全局访问;局部变量只能在代码块访问
- private关键字
私有,是一个权限修饰符,用于修饰成员,私有内容只有在本类有效。对于一些数据我们具有隐私并且不想直接被访问或修改,那么我们就可以在成员变量前加private
- 那么我们外界如何访问和修改private的成员变量呢?
那就只能采取间接的方式,在eclipse中使用快捷键shift+alt+s选择setter和getter方法。
对于需要修改设置该变量可以使用void setxxx(){this.xxx=xxx}
对于需要访问该变量可以使用String getxx(){return xxx}
最后呢,我们只需要对象.方法名()
- 构造函数
- 什么是构造函数?
可以为对象初始化,并且构建创造对象时的函数 - 构造函数的特点
- 构造函数名与类名相同
- 构造函数没有返回值类型,没有返回值
- 构造函数没有void
- 构造函数有return
- 无参构造函数
一个类中没有构造函数,那么就会默认有一个无参构造函数,当然我们也可以创建一个无参构造函数,去给创建好的对象初始化。 - 有参构造函数
当一个类中如果有有参构造函数的话,那么默认的无参构造函数就会失效,我们创建的有参构造函数,目的就是为了在对象创建的时候给他传数据初始化。 - 什么时候定义构造函数
在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在函数中。
-
构造函数与一般函数的区别
- 构造函数:对象创建时就会调用与之对应的构造函数,对对象进行时初始化;一般函数:对象创建后需要函数功能时才调用。
- 构造函数:只有在对象创建时被调用一次;一般函数:对象创建后可以调用多次。
-
this关键字
- 当局部变量和成员变量同名用this区分;
- this用于构造函数中时:调用其他构造函数,只能在构造函数第一行,并且时单方向调用,不可循环调用
- 一般函数不可调用构造函数
- 哪个对象调用了this所在函数,this就代表哪个对象
- 一个类中的成员必须用对象调用
- static关键字
- static的定义
可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main()。因为在程序开始执行时必须调用main() ,所以它被声明为static。 - static的特点
- static是一个修饰符,用于修饰成员。
- static修饰的成员被所有对象共享
- static优先于对象存在
- static修饰成员可以通过类名来调用
- static中的数据是共享数据,而对象存储的数据是特有数据
- 在没有创建对象的情况下来进行调用(方法/变量)。
- 可不可以都定义成static
不可以,都定义成static那么所有数据都成共享的,就没有对象的意义了,每个对象都一样没有自己的特有属性那么就不叫对象了。 - static函数
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。
- 静态成员与实例成员的区别
- 生命周期
实例变量随着对象的创建而存在,随着对象的回收而释放
静态变量随着类的加载而存在,随着类的消失而消失 - 调用方式
成员变量只被对象调用
静态变量可以被类和对象调用 - 别名
成员变量也称实例变量
静态变量也称类变量 - 数据存储位置
成员变量数据存放在堆内存中的对象中,是对象的特有属性
实例变量存储在静态区共享数据区。
- 代码块
- 静态代码块
- 构造代码块
- 局部代码块
- 对象的创建流程
javac 编译源代码 生成,class文件 java 将.class文件加载进JVM中的方法区(静态,非静态) JVM中从静态区读取主函数 创建一个对象 在堆内存中开辟空间 划分地址 默认初始化 显示初始化 构造函数进栈 针对性初始化 构造函数弹栈 将对象地址传给栈内存中函数区域中的变量。