面向对象编程初步(OOP:Object Oriented Programming)
面向过程和面向对象的比较:
区别:面向过程的事物比较简单,可以用线性思维去解决;面向对象的事物比较复杂,使用简单的线性思维无法解决。
共同点:面向过程和面向对象都是解决实际问题的一种方式。二者相辅相成,并不是对立的。解决问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统;具体到微观操作,仍然使用面向过程方式来处理。
Everything is Object 万事万物皆对象
类和对象
类可以生成对象,类是对象的抽象。
对象是具体的事物,类是对对象的抽象(抽出象的部分)。先有具体的事物,然后抽象各个对象之间的部分,归纳出类通过类再认识其他对象。
对象的特征 ——属性:对象具有的各种特征。每个对象的每个属性都拥有特定值。
——方法:对象执行的操作。
对象:用来描述客观事物的一个实体,由一组属性(静)和方法(动)构成。
类是模子,确定对象将会拥有的特征(属性)和行为(方法)。具有相同属性和方法的一组对象的集合类是对象的类型。
不同于int类型:具有方法。
对象和类的关系:特殊到一般,具体到抽象。
类我们叫做class,对象我们叫做Object(对象),instance(实例)。“某个类的对象”和“某个类的实例”是一个意思。
类可以看成一类对象的模板,对象可以看成该类对象的一个具体实例。
类是用于描述通一类型的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。
属性(成员变量:field)用于定义该类或该类对象包含的数据或者说静态属性,作用范围是整个类体。
在定义域变量时可以对其初始化,Java使用默认的值对其初始化。(数值:0,0.0,char:u0000,boolean:false,所有引用类型:null)
属性定义格式:[修饰符] 属性类型 属性名 = [默认值]; 面向对象中,整个程序的基本单位是类,方法是从属于对象的。
注:(1)修饰符和默认值可以没有,没有的时候系统会根据数据类型对应的给默认值。
(2)数据类型和属性名一定要有,属性名的定义要符合合法的标识符命名规范。
方法定义格式:[修饰符] 方法返回值类型 方法名(形参列表){逻辑代码 //n条语句}
注:(1)方法可以没有修饰符,Java中的修饰符有4个 public、protected、[default]、private。
(2)方法的返回类型可以没有,void代表无值返回。
(3)方法的返回类型可以是任意的数据类型,可以是基本数据类型,也可以是引用数据类型。
(4)方法的参数列表也可以没有,如果有多个参数列表时需要用逗号。
(5)方法的参数传递是值传递。
所有Java程序都以类class为组织单元,关键字class定义自定义的数据类型。
定义一个类的步骤:
1、定义类名
2、编写类的属性
3、编写类的方法
使用对象的步骤:
创建对象:类名 对象名 = new 类名();
引用对象成员:使用 “ . ” 进行操作(调用)
引用类的属性:对象名.属性
引用类的方法:对象名.方法名()
局部变量和成员变量
区别:声明位置不同,类中、方法中作用范围不同:当前类的方法,当前方法。不同方法中即使有同名的局部变量,没有关系,互不影响,建议相同。
内存存放的位置:栈内存、堆内存
所有new出来的东西都在堆里
成员变量有默认值,局部变量没有默认值。
Java中的对象和数组是通过引用对其操作的
引用可以理解为一种受限的指针,引用就是一个变量或对象的别名(引用的本质是一个对象)
指针是一个内存空间的地址(指向存储一个变量值的空间或一个对象的空间),指针是不可以进行整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。引用不行,只能进行赋值运算。(Java里没有指针)
内存分析
栈:存放局部变量 先进后出(FILO),自下而上存储。方法执行完毕,自动释放空间。
堆:存放new出来的对象,需要垃圾回收器来回收Syatem.gc()。
方法区:存放类的信息(代码)、static变量、字符串常量。
构造器 constructor(构造方法)
定义:一个在创建对象时被自动调用的特殊方法(在堆中进行存储)
作用:(1)构造方法没有返回值
(2)构造器的方法名必须和类名一致
(3)构造器的形参列表和普通方法一样
(4)为对象进行初始化(成员变量)工作
重载:一个类可以有多个同名的方法,但是要求方法的参数列表不同。
(1)参数个数不同
(2)参数类型不同
(3)参数顺序不同
注:(1)重载发生在同一类中的
(2)一般我们都需要构造方法的重载,当成员变量很多的时候,只需要对部分成员变量进行初始化操作
方法调用(形参和实参)
定义方法的参数是形式参数
调用方法的参数是实在参数
调用方法是要求参数个数相同,类型兼容
参数传递
基本数据类型的参数传递无法通过方法调用改变变量的值。引用数据类型的参数传递可以通过方法调用改变变量的值。



