目录
前言
什么是面向对象编程(OOP)?什么是类?什么是对象?
一、基本解释
面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
什么是对象?对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
什么是类?类是一个模板,它描述一类对象的行为和状态。例如男孩和女孩就是类(class)
而具体的每个男孩或者女孩为该类的对象(object)。
也就是说类是对象的模板,对象是类的实例。
关于面向对的其他知识可以在后续的学习之中进行完善和巩固。
二、类的属性
1.属性的定义
在类中, 但是方法外部定义的变量. 这样的变量我们称为 "字段" 或 "属性" 或 "成员变量"(三种称呼都可以, 一般不会严格区分)。
2.属性的初始化
2.1默认值规则
对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值。在之前介绍过,不再过多介绍。
2.2构造方法规则
每个类都有构造方法(构造器)。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。一旦定义构造方法,则不会自动补构造方法。在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。使用方法如下:
public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数:name
System.out.println("小狗的名字是 : " + name );
}
public static void main(String[] args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "tommy" );
}
}
2.3定义时初始化规则
定义时初始化不再介绍
2.4构造代码块规则
在类的内部,在方法的外部直接使用一个大括号。这个就是构造代码块。
2.5执行顺序
1)默认值规则
2)定义时初始化和构造代码块按书写顺序
3)构造方法规则
具体顺序请看下面的例子
public class InitOrder {
public InitOrder() {
System.out.println("6");
}
{
System.out.println("3");
}
public int a = initA();
{
System.out.println("4");
}
public int b = initB();
{
System.out.println("5");
}
public int initA() {
System.out.println("1");
return 1;
}
public int initB() {
System.out.println("2");
return 2;
}
public static void main(String[] args) {
InitOrder initOrder = new InitOrder();
}
}
3.this的用法
this的用法主要有两种,如下:
1.起引用的作用,表示当前类
2.在一个构造方法中调用另外一个构造方法。
4.权限控制
get方法和set方法分别用于控制权限,通过这两个方法可以实现对属性的读和写。具体的使用方法如下所示。
package oop.GetSet;
public class Person {
private String name;
public String getName() {
return name;
}
private String sex;
public String getSex() {
return sex;
}
public void setSex(String sex) {
if(sex!="男"||sex!="男"||sex!="未知"){
throw new RuntimeException("请输入“男”或“女”或“未知”!!!");
}
this.sex = sex;
}
private boolean alive;
public boolean isAlive() {
return alive;
}
}
三、类的方法
方法(method)用于描述一个对象的行为。Java中主要以实例方法的形式体现(说白了就是函数)。
方法分为两类
1.静态方法(类方法)加static修饰。
2.实例方法(普通方法)不加static修饰。
静态方法和实例方法的比较如下
静态方法 实例方法 方法内部 无this
不能访问属性
不能调用普通方法
有this
能访问属性
能调用普通方法
方法外部 可直接调用
不需要传this
对象的引用来访问
需要传this
四、实例化过程
由类到对象的过程成为实例化过程,主要包含以下几个步骤
1.通过类中的信息来计算对象的内存大小,再由JVM虚拟机在堆区分配空间,然后进行默认的初始化(表现为属性全部是默认值)
2.执行初始化过程(不再赘述)
3.通过引用赋值(object name=xxxxx)
总结
1.变量的总结
生命周期 | 内存区域 | |
局部变量 | 随方法 | 栈区 |
类变量 静态变量 静态属性 | 随类 | 方法区 |
实例变量 实例属性 属性 成员变量 | 随实例 | 堆区 |
2.对象的三个层次总结
1)概念层:现实生活中的一些对象(如学生、汽车等等)
2)逻辑层:对现实生活中的概念的抽象(状态表现为属性,行为表现为方法)
3)物理层:在内存中的形式