面向对象
1.面向对象和面向过程的解释:
面向对象:
找合适的人做合适的事
面向过程:
亲力亲为,自力更生,体验人生乐趣
2. 类和对象
类:
同一种事物的统称,主要描述事物的【属性】和【行为】
电脑类:
属性: 屏幕尺寸,颜色,CPU
行为: 玩游戏,学习,看新闻
对象:
唯一的,独立的,特殊的个体
3. Java代码中如何实现类
/*
在Java中定义类的格式:
class 自定义类名 {
事物的属性描述; // 变量
事物的行为描述; // 方法
}
*/
// 自定义一个人类 Person
class Person {
//属性描述,这里使用【成员变量】来描述属性
String name; // 描述当前Person类存在name String 类型 属性
int age; // 描述当前Person类存在 age int类型 属性
char gender; // 描述当前Person类存在 gender char类型 属性
// 行为描述, 这里使用【成员方法】来描述Person类的行为
// 吃饭行为
public void eat() {
System.out.println("牛排");
}
// 睡觉行为
public void sleep(int time) {
System.out.println(name + "睡了" + time + "个小时")
}
// 敲代码行为
public void coding() {
System.out.println("bug不是程序员想要的");
}
}
4. 在Java代码中,创建对象
public class Demo1 {
public static void main(String[] args) {
/*
创建一个Scanner类对象
Scanner sc = new Scanner(System.in);
Scanner: 类名 数据类型
sc: 类对象,同时也是一个引用数据类型,数组名
new: 创建对象的关键字,同时表示创建的对象内存空间是保存在内存的【堆区】
Scanner(System.in): 【构造方法】 Constructor
*/
// 创建了一个Person类对象,类对象的名字叫做 p
Person p = new Person();
/*
int[] arr = new int[10];
arr.length 获取数组的容量
. 的
类对象.成员变量,操作类内的成员变量
*/
p.name = "小明";
p.age = 16;
p.gender = '男';
System.out.println("Name:" + p.name + " Age:" + p.age + " Gender:" + p.gender);
}
}
7. 聊一聊构造方法Constructor
构造方法的作用:
用于初始化类对象的成员变量。Constructor
问题一[了解]:
发现代码中并没有【显式】定义构造方法,但是在代码中可以直接使用一个无参构造方法?
这是因为Java编译器,在编译Java代码中,会给没有【显式】定义构造方法的类,提供一个当前类的无参构造方法,供调用者使用。
如果在类内自己定义了一个构造方法,那么Java编译器就不会再给你提供任何构造方法
借助于Java反编译工具 javap, 反编译Java文件,编译之后.class 字节码文件
javap -c -l -private XXX.class
问题二:
构造方法:
public 类名(初始化类对象需要的参数) {
// 初始化类对象成员变量的语句
}
// 构造方法必须使用类名,其他成员方法绝对不允许使用类名【甲鱼的臀部 规定】
// 构造方法可以存在多个,但是绝对不允许出现【参数类型】完全一致的方法
// 一般情况下,在定义类时都会留有一个无参构造方法备用
问题三:
使用无参构造方法时,成员变量的值都是多少???
使用无参构造方法,初始化对象时,在类对象中的所有成员变量,都是对应数据类型的 “0” 值
数据类型对应的 “0” 值
byte 0
short 0
int 0
long 0L
float 0.0F
double 0.0
boolean false
char '\0'
【所有的引用数据类型】都是 null