生活中什么是面向对象
面向对象: 想吃烤羊排
- 去馕坑烤肉店
- 两个人点一斤羊排
- 等25分钟
- 吃
- 付款走人
面向过程:自己做烤羊排
-
从JD上买羊排,洋葱,大葱,姜,烧烤料,孜然粉,辣椒面
-
解冻羊排,准备辅料
-
切羊排,腌制,撒盐,腌制30分钟
-
烤箱预热5分钟,220度
-
烤制 25分钟 15分钟翻面
-
吃!!!蘸料~~~
-
收拾东西
从生活角度看面向对象:找合适的人,做合适事 从生活角度看面向过程:亲力亲为,自力更生,体验人生疾苦
类和对象
类就是一类事物的统称,对当前事物的一些描述,属性描述和行为描述;对象就是具体化的,独立的唯一的特殊的个体。
类 :人、动物、汽车、电脑
对象:某个人、某种动物、某个汽车、某个电脑
Java中定义类的格式
/*
class ClassName {
// 属性描述
// 行为描述
}
要求:
1. ClassName要求符合大驼峰命名法,并且要做到见名知意!!!
2. 属性描述,是用于描述当前类拥有的一些特征,这里可以使用变量
该变量有一个特定的名字【成员变量】 Field
3. 行为描述,是用于描述当前类可以做到一些事情,这里使用方法。
该方法有一个特定的名字【成员方法】Method
*/
Java中定义类【成员变量】
/**
* 这里定义的是一个Person类
*
* @author Anonymous
*/
class Person {
// 属性描述,这里使用成员变量 Field
// 使用String类型来描述Person类的姓名属性
String name;
// 使用int类型数据描述Person类的年龄属性
int age;
// 使用char类型数据描述Person类的性别属性
char gender;
}
Java中定义类【成员方法】
// 使用方法描述Perosn类的吃饭行为
public void eat(String food) {
System.out.println("吃" + food);
}
// 使用方法描述Person类的睡觉行为
public void sleep() {
System.out.println("说出来你可能不行,是床先动的手~~~");
}
// 使用方法描述Person类的打豆豆行为
public void daDouDou() {
System.out.println("吃饭,睡觉,打豆豆");
}
/*
特征:
1. 目前没有使用static关键字
2. 方法和之前所学方式形式一致,同样拥有三大元素 返回值,方法名和形式参数列表
Shift + Alt + A
*/
类对象使用
Java中创建类对象的形式
/*
new 对象!!!
*/
// 获取一个扫描器的类对象!!!
Scanner sc = new Scanner(System.in);
/*
java.util.Scanner :数据类型,Scanner类型。创建的【变量】是Scanner的类对象,同时也是一个引用数据类型
sc :
类对象,变量 Scanner的类对象,sc是对象名
new :
申请内存的【堆区】空间,并且清理整个空间中的所有数据。
代码中,只有有new关键字,一定会使用到内存的堆区空间,并且是新的内存空间。
Scanner(System.in) :
1. 这里是一个方法,因为有小括号
2. 方法名字和类名一致
3. 该方法称之为构造方法,Constructor 构造方法
总结:
类名 对象名 = new 构造方法(所需参数);
*/
// 这里创建了一个Person类对象,对象名person
Person person = new Person();
System.out.println(person);
/*
* com.qfedu.a_object.Person@15db9742
* com.qfedu.a_object 完整的包名
* Person 数据类型,这里创建的对象是一个Person类对象
* @15db9742 当前类对象在内存空间的中首地址!!!十六进制展示方式
*/
Person person1 = new Person();
System.out.println(person1);
/*
* com.qfedu.a_object.Person@6d06d69c
* 发现第二个Person类对象 person1空间首地址 6d06d69c 和第一个对象不一致
* 这里就意味着两个对象的空间首地址不一致,不是同一个对象!!!
*/
Java中使用类对象调用成员变量
/*
int[] arr = new int[10];
获取数组的容量:arr.length
获取一个数组中【的】length属性
格式:
对象名.属性名/成员变量名;
. == > 的
可以操作取值或者赋值操作。
*/
// 通过Person类对象 person调用类内的成员变量
// 【赋值】Person类对象 person中对应的成员变量
person.name = "XX";
person.age = 16;
person.gender = '男';
// 【取值】展示Person类对象 person中保存的成员变
量数据
System.out.println("Name:" + person.name);
System.out.println("Age:" + person.age);
System.out.println("Gender:" +person.gender);
Java中使用类对象调用成员方法
/*
得到了一个Scanner类对象sc
Scanner sc = new Scanner(System.in);
使用过以下方法:
sc.nextInt();
sc.nextFloat();
sc.nextLine().charAt(0);
格式:类对象.方法名(必要的参数);
. ==> 的
*/
this关键字特征
class SingleDog {
public SingleDog() {
System.out.println("Constructor : " + this);
}
public void test() {
System.out.println("Method Called : " + this);
}
}
/*
* this关键字特征:
* this关键字表示调用当前方法的类对象,
* 或者是当前构造方法中初始化的类对象
*/
public class Demo4 {
public static void main(String[] args) {
SingleDog singleDog = new SingleDog();
System.out.println("Instance : " + singleDog);
singleDog.test();
}
}
方法的重载
- 所有的方法名字都是一致的!!!
- 所有的方法参数都是不一样的!!!
- 同一个类内!!!
优点:
- 简化了开发压力
- 简化了记忆压力
- 更快捷的调用方法,同时又满足了不同的情况!!!
规范:
重载情况下,在同一个类内,不可以出现相同方法名和相同参数数据类型的方法!!!
基本原理:
方法名一致的情况下,通过形式参数列表数据类型的不同来选择不同的方法行。
反射 ==>Constructor Method