面向过程:当需要实现一个功能的时候,所有的过程步骤都需要仔细完成,要详细处理每一个细节。
面向对象:当需要实现一个功能的时候,不必关心具体的步骤,而是找一个具有该功能的对象(实例类)来帮忙做。
面向对象极大的方便了代码使用,使代码更加的灵活。
首先举一个很简单的例子感受一下面向对象的灵活和简便!
package shuyv.day01.demo06Gril;
import java.util.Arrays;
public class Demo01PrintArray {
public static void main(String[] args) {
int[] array = { 10, 20, 30, 40, 50 };
// 要求打印格式为:{ 10, 20, 30, 40, 50 }
// 使用面向过程,比较注意细节,为了满足所有需求,所有步骤都要仔细完成。
System.out.print("[");
for (int i = 0; i < array.length; i++) {
if (i == array.length - 1) { // 如果是最后一个元素
System.out.println(array[i] + "]");
} else { // 如果不是最后一个元素
System.out.print(array[i] + ", ");
}
}
System.out.println("============================");
// 使用面向对象,结果一样却更加简单
// 找一个JDK给我们提供好的Array类,其中有一个toString方法
// 直接就可以把数组变成我们想要的格式的字符串
System.out.println(Arrays.toString(array));
}
}
有时候实现同样的功能,面向对象却可以如此的灵活!!!
下面介绍一下面向对象中的一些概念
1.类:
什么是类,一类事物,或者说是类别等等,概念有些抽象,但用代码来解释类,类就是相关属性和行为的集合,它是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
2.属性:
属性便是一个事物所具有的性质,就是该事物的状态信息。
3.行为(方法):
行为便是说该事物能够做什么,有什么用。再类中其实就是方法。
4.对象:
对象是一类事物的具体体现。对象是一个实例,而且具备该事物的属性和特征。
下面我们举例一个学生类
代码演示:
/*
学生类:
成员变量:(属性)
String name;
int age;
成员方法:(行为)
public void eat() {}
public void sleep() {}
public void study() {}
注意事项:
1.成员变量直接定义在类当中,在方法外面。
2.成员方法不要写static关键字。
*/
public class Demo03Student01 {
// 成员变量
String name; // 姓名
int age; // 年龄
// 成员方法
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
public void study() {
System.out.println("打魔兽");
}
}
通常情况下,一个类并不可以直接使用,需要根据类创建一个对象,才可以使用。
1.导包
需要使用类的时候直接导入,注意位置。
格式: import 包名称.类名称;
注意,对于当前类如果属于同一个包的情况下,可以省略导包语句不写。
2.类的创建
格式:类名称 对象名 = new 类名称();
例如:Student stu = new Student();
3.使用
使用成员变量:对象名.成员变量名
使用成员方法:对象名.成员方法名(参数)
注释下图:下面代码所有的类都在同一个包里
代码举例:
public class Demo04Student02 {
public static void main(String[] args) {
// 1.导包,,,需要使用Demo03Student01类,
// 该类和Demo03Student02类处于同一个包下面,所以神略导包语句
// 2.创建,格式:
// 类名称 对象名 = new 类名称();
Demo03Student01 stu = new Demo03Student01();
// 3.使用其中的成员变量,格式:
// 对象名.成员变量
System.out.println(); // null
System.out.println(stu.age); // 0
System.out.println("=================================");
// 改变对象当中的成员变量数值内容
= "dkl";
stu.age = 20;
System.out.println(); // dkl
System.out.println(stu.age); // 20
System.out.println("==================================");
// 使用对象的成员方法,格式:
// 对象名.成员方法名()
stu.eat();
stu.sleep();
stu.study();
}
}
注意事项:如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样。
将类对象作为参数传递给方法
当一个对象作为参数,传递到方法中时,实际上传递进去的就是对象的地址值。
代码演示:
public class Demo08PhoneParam {
public static void main(String[] args) {
Demo05Phone01 oneplus = new Demo05Phone01();
oneplus.brand = "oneplus8";
oneplus.price = 6000.0;
oneplus.color = "pink";
method(oneplus); // 传递进去的参数其实就是内存地址值(哈希值)
// 当一个对象作为参数,传递到方法中时,实际上传递进去的就是对象的地址值。
}
public static void method(Demo05Phone01 param) {
System.out.println(param.brand); // oneplus8
System.out.println(param.price); // 6000.0
System.out.println(param.color); // pink
}
}
将类对象作为返回值
当使用一个对象类型作为方法的返回值时,返回值其实就是对象的地址值。
代码演示:
public class Demo09PhoneReturn {
public static void main(String[] args) {
Demo05Phone01 OnePlus7pro = getPhone();
// OnePlus7pro得到了方法调用的返回值对应的地址值
// 当使用一个对象类型作为方法的返回值时,返回值其实就是对象的地址值。
System.out.println(OnePlus7pro.brand); // oneplus7pro
System.out.println(OnePlus7pro.price); // 5999.0
System.out.println(OnePlus7pro.color); // RosePink
}
public static Demo05Phone01 getPhone() {
Demo05Phone01 oneplus7pro = new Demo05Phone01();
oneplus7pro.brand = "oneplus7pro";
oneplus7pro.price = 5999.0;
oneplus7pro.color = "RosePink";
return oneplus7pro; // 将oneplus7pro的地址值返回给调用行
}
}