12_面向对象初识
1、类和对象
类:
针对于一类事物的描述,包括属性描述和行为描述
人类为例
属性行为:身高、体重、年龄、姓名
行为描述:吃饭、睡觉、打游戏
对象:
具体的、唯一的、独立的、特殊的个体
2、Java中定义类的格式
格式:
class 类名 {
属性描述
采用变量形式 存储对应的数据 进行属性描述
【Field 成员变量】
行为描述
采用方法形式 使用方法声明明确方法所需参数和返回值信息 同时完成对应功能
【Method 成员方法】
}
类名命名要求:
见名知意、大驼峰命名法
2.1 Java定义类之成员变量
class Person {
/* 属性描述 【Field 成员变量】 */
/*
id 成员变量 数据类型为 int 类型 用于描述当前类对应对象的 id 属性
id 成员变量对应的具体数据 需要在创建对象之后给予赋值操作
*/
int id;
/*
name 成员变量 数据类型为字符串类型 用于描述当前 Person 类对象的姓名
*/
String name;
/*
age 成员变量 数据类型为 int 类型 用于描述当前 Person 类对象的年龄
*/
int age;
}
2.2 Java中定义类之成员方法
/**
* 自定义类,当前类没有使用 public 关键字
* 类名和文件名不一致,
* Person 类型,类名符合见名知意,大驼峰命名法
*/
class Person {
/* 行为描述 【Method 成员方法】 */
/**
* Person 类吃饭(eat)行为描述 参数类型为字符串类型
* 要求用户调用时提供字符串类型参数 告知吃了什么食物
*
* @param food 字符串类型 食物的名称
*/
public void eat(String food) {
System.out.println("今天吃了" + food);
}
/**
* Person 类睡觉(sleep)行为描述
*/
public void sleep() {
System.out.println("睡觉时间到了");
}
/**
* Person 类敲代码(coding) 行为描述
*/
public void coding() {
System.out.println("键盘敲烂,月薪过万");
}
}
2.3 Java实例化对象方式
/*
创建对象/实例化对象的格式:
类名 对象名 = new 构造方法(参数);
*/
Person person = new Person();
2.4 通过对象操作成员变量赋值和取值
/*
Person 类对象操作成员变量
目前 Person 类内对应的成员变量有
int id; String name; int age;
格式:
类对象.成员变量
*/
//通过 对象名.成员变量 对成员变量进行赋值操作
person.id = 001;
person.name = "小芳";
person.age = 18;
//通过 对象名.成员变量 对成员变量进行取值操作
System.out.println("ID: " + person.id);
System.out.println("Name: " + person.name);
System.out.println("Age: " + person.age);
2.5 通过对象调用成员方法
/*
Person 类对象调用执行成员方法
目前 Person 类内对应的成员方法有
void eat(String); void sleep(); void coding();
格式:
对象.成员方法();
*/
//通过 Person 类对象 person 调用 eat 方法 方法所需参数为 String 类型
person.eat("火锅");
person.sleep();
person.coding();
3、构造方法
3.1 Java编译器提供的无参构造方法
javap -c -l -private XXX.class
【注意】
Java编译器发现当前类没有自己声明/定义构造方法,会自动提供一个无参构造方法;如果当前类中存在任意一个构造方法,Java编译器不再提供对应的无参构造方法。
3.2 Java中的构造方法
构造方法的作用:
1. 构造方法的名称必须是类名,用于提供给 new 关键字
使用,明确当前实例化对象对应的数据类型
2. 构造方法只用于初始化实例化对象数据内容。
构造方法格式:
public 类名(初始化操作必要的参数) {
初始化赋值语句,给予成员变量赋值操作。
}
3.3 构造方法案例
/**
* 自定义类 SingleDog 类
*/
class SingleDog {
//Single 成员变量
int id;
String name;
int age;
//无参构造方法
public SingleDog() {
System.out.println("类 SingleDog 的无参构造方法,所有的成员变量都没有初始化");
}
//带有 String 类型参数的构造方法 用于初始化 name 成员变量
public SingleDog(String name) {
/*
name 是 SingleDog 类的成员变量 String 类型
name 是构造方法参数
*/
this.name = name;
System.out.println("类 SingleDog 的有参构造方法,仅初始化成员变量 name");
}
//带有 int, String 类型参数的构造方法 用于初始化 id, name 成员变量
public SingleDog(int id, String name) {
this.id = id;
this.name = name;
System.out.println("类 SingleDog 的有参构造方法,仅初始化成员变量 id, name");
}
//带有 int, String, int 类型参数的构造方法 用于初始化 id, name, age 成员变量
public SingleDog(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
System.out.println("类 SingleDog 的有参构造方法,初始化成员变量 id, name, age");
}
}
public class Demo2 {
public static void main(String[] args) {
System.out.println();
/*
new 关键字 + 无参构造方法
实例化 SingleDog 对象 对象名为 sd1
*/
SingleDog sd1 = new SingleDog();
//对 SingleDog 类对象 sd1 做取值操作
System.out.println("id: " + sd1.id);
System.out.println("name: " + sd1.name);
System.out.println("age: " + sd1.age);
System.out.println();
/*
new 关键字 + 有参构造方法
实例化 SingleDog 对象 对象名为 sd2 传递 String 类型参数 name
*/
SingleDog sd2 = new SingleDog("小芳");
//对 SingleDog 类对象 sd2 做取值操作
System.out.println("id: " + sd2.id);
System.out.println("name: " + sd2.name);
System.out.println("age: " + sd2.age);
System.out.println();
/*
new 关键字 + 有参构造方法
实例化 SingleDog 对象 对象名为 sd3 传递 int, String 类型参数 id, name
*/
SingleDog sd3 = new SingleDog(1, "小芳");
//对 SingleDog 类对象 sd3 做取值操作
System.out.println("id: " + sd3.id);
System.out.println("name: " + sd3.name);
System.out.println("age: " + sd3.age);
System.out.println();
/*
new 关键字 + 有参构造方法
实例化 SingleDog 对象 对象名为 sd3 传递 int, String, int 类型参数 id, name, age
*/
SingleDog sd4 = new SingleDog(1, "小芳", 18);
//对 SingleDog 类对象 sd3 做取值操作
System.out.println("id: " + sd4.id);
System.out.println("name: " + sd4.name);
System.out.println("age: " + sd4.age);
}
}
3.4 构造方法总结
1. 构造方法格式
public 类名(必要参数) {
成员变量赋值语句;
}
2. 实例化对象格式
类名 对象名 = new 构造方法(实际参数);
3. 实例化对象 是由 new + 构造方法 完成
a. new 关键字根据构造方法名称,明确对应数据类型,在
内存【堆区】申请对应的空间
b. new 关键字将申请的空间进行数据清理
c. 构造方法利用参数内容和赋值语句,给予成员变量赋值
操作