面向对象
1、面向过程与面向对象的区别
面向过程:“面向过程”(Procedure Oriented,简称PO)是一种以过程为中心的编程思想。简单来说就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用。一气呵成,牵一发而动全身。
面向对象:面对对象(Object Oriented)是软件开发方法。它是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。简单来说就是把重复的东西剥离出来,然后这些重复的东西看作一个有相关的整体,即模块化(类),不同的模块组合去完成任务。
2、以面对对象的方式去构建类
类:是实现信息分装的基础,类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。类可以看作为一类对象的模板,也可以看作为图纸。
对象:类的实例,是根据图纸构建出来的具体的事物。
3、如何构建类
3.1、属性
属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。 在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
这是一个车的类的属性:
String brand;//品牌
String color;//颜色
int speed;//速度
一个学生类的属性:
int id;
String sname;
int age;
3.2、行为/方法
方法用于定义该类或该类实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法很类似于面向过程中 的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是 类,方法是从属于类和对象的。
[修饰符] 方法返回值类型 方法名(形参列表) {
// n条语句
}
public void run(){
System.out.println("车会跑");
}
3.3、综合代码
下图是一个汽车类,包含了汽车的属性,行为。
package com.shsxt.day06;
/**
* 汽车类
*/
public class Car {
// 属性
String brand;// 品牌
String color;// 颜色
int speed;// 速度
// 行为
public void run() {
System.out.println(brand + "车会跑");
}
}
4、属性和行为的权限问题
public
:公开的,公共的,所有人都可以调用的。
private
:私有的,只能自己访问。
/**
* 汽车类
*/
public class Car {
// 属性
private String brand;// 品牌
private String color;// 颜色
private int speed;// 速度
// 行为
public void run() {
System.out.println(brand + "车会跑");
}
// 提供一些公开的方法
public void setBrand(String b) {
brand = b;
}
public String getBrand() {
return brand;
}
}
5、就近原则
因为程序的就近原则,我们有时编写的代码如果遵循了见名知意的约定就容易出现以下比较尴尬的情况,自己赋值给自己。为了避免这种情况的发生,Java语言提供了 this
关键字来区分类的变量(成员变量)和传入参数变量(局部变量)的区别。this
表示当前正在运行的对象。
6、构造器
1、根据类创建了对象以后,会默认有一个无参的构造器
2、如果自定义了构造器,则无参构造器会失效,按需改写
3、构造器可以重载
// 无参构造器
权限修饰符 类名() {
}
// 有参构造器
权限修饰符 类名(参数1, 参数2) {
}
/**
* 汽车类
*/
public class Car {
// 属性
private String brand;// 品牌
private String color;// 颜色
private int speed;// 速度
// 无参构造器
public Car() {
}
// 有参构造器-重载
public Car(String brand, String color, int speed) {
this.brand = brand;
this.color = color;
this.speed = speed;
}
// 有参构造器-重载
public Car(String brand, String color) {
this.brand = brand;
this.color = color;
}
// 有参构造器-重载
public Car(String brand) {
this.brand = brand;
}
// 行为
public void run() {
System.out.println(this.brand + "车会跑");
}
}
Car car = new Car("福特", "黑色", 110);
7、toString方法打印所有属性
public String toString() {
return "Car [品牌:" + this.brand
+ ",颜色:" + this.color
+ ",速度:" + this.speed + "]";
}
8、类的加载顺序
1、new关键字开辟空间
2、成员属性赋予默认值
3、加载构造器
9、static静态关键字
static属于类,不属于对象,一般使用构建工具类比较多。