初识面向对象
1. 整体介绍
1.整个面向对象这一部分的知识点,预计时长一周(5天)
2.我们在面向对象之前学习的内容有以下两个特点
2.1 之前的内容关联性不是特别紧密
2.2 之前的内容语法格式,需要记忆的内容比较多,需要理解的较少
3.面向对象这一部分的内容
3.1 关联性特别紧密 中途一定不能落下内容
3.2 这一部分内容 需要理解的较多 代码也会随之增多
2. 万物皆对象
自然界中的任何事物,都可以理解为一个对象,通过分析其共有的特征和行为,将其描述的完整。
任何事物都可以分为某一类,分类是我们认识世界很自然的过程。
3.特征和属性
一类事物共有的特征,称之为属性。在代码中使用属性描述。
4. 行为和方法
一类事物共有的行为,称之为方法。在代码中使用方法描述。
5.类和对象的关系
类是对象的抽象
对象是类的具体
6.编写类和对象
学生类
学生共有的特征:属性
姓名
年龄
身高
体重
性别
爱好
班级
……
学生共有的行为:方法
学习
吃饭
睡觉
谈恋爱
做运动
……
类的对象的抽象,对象是类的具体
类仅仅是一个模板,对象是真真实实存在的个例/实例
package com.atguigu.test6;
/**
* 学生类
* 学生共有的特征:属性
* 姓名
* 年龄
* 身高
* 体重
* 性别
* 爱好
* 班级
* ...
*
* 学生共有的行为:方法
* 学习
* 吃饭
* 睡觉
* 谈恋爱
* 做运动
* ...
*
* 类的对象的抽象,对象是类的具体
* 类仅仅是一个模板,对象是真真实实存在的个例/实例
* */
public class Student {
// 属性/成员变量/实例属性/实例变量
String name;
int age;
double height;
double weight;
char sex;
String hobby;
String gradeName;
// 成员方法/实例方法/普通方法/非静态方法
public void study(){
System.out.println("学生学习");
}
public void eat(){
System.out.println("学生吃饭");
}
public void sleep(){
System.out.println("学生睡觉");
}
public void love(){
System.out.println("学生谈恋爱");
}
public void sport(){
System.out.println("学生做运动");
}
public static void main(String[] args) {
// 1.创建对象 语法格式:类名 对象名 = new 类名();
Student stu1 = new Student();
// 2.通过对象访问属性 给属性赋具体的值 语法格式:对象名.属性名 = 值;
stu1.name = "张三";
stu1.age = 20;
stu1.sex = '男';
stu1.height = 175;
stu1.weight = 70;
stu1.gradeName = "三年二班";
stu1.hobby = "尬舞";
System.out.println(stu1.name);
System.out.println(stu1.age);
System.out.println(stu1.gradeName);
System.out.println(stu1.height);
System.out.println(stu1.weight);
System.out.println(stu1.hobby);
System.out.println(stu1.sex);
// 3.通过对象访问方法 语法格式:对象名.方法名();
stu1.study();
stu1.eat();
stu1.sleep();
stu1.sport();
stu1.love();
System.out.println("------------------------");
Student stu2 = new Student();
stu2.name = "李四";
stu2.age = 22;
stu2.sex = '男';
stu2.height = 177;
stu2.weight = 80;
stu2.gradeName = "三年二班";
stu2.hobby = "口技";
System.out.println(stu2.name);
System.out.println(stu2.age);
System.out.println(stu2.gradeName);
System.out.println(stu2.height);
System.out.println(stu2.weight);
System.out.println(stu2.hobby);
System.out.println(stu2.sex);
stu2.study();
stu2.eat();
stu2.sleep();
stu2.sport();
stu2.love();
}
}
7.成员变量和局部变量区别
局部变量 | 实例变量 | |
---|---|---|
存储位置 | 基本数据存在栈中,引用数据类型,名字在栈,值在堆 | 实例变量全部存在堆中 |
生命周期 | 随着方法的入栈而生效,随着方法的出栈而死亡 | 随着对象的创建而生效,随着对象被垃圾回收而死亡 |
package com.atguigu.test7;
/**
* 成员变量/属性/字段/实例变量
*
* 定义位置:直接书写在类中
* 作用范围:整个类中都可以访问
* 能否重名:可以与局部变量重名,局部变量优先使用(就近原则)
* 默认值:有默认值 默认值与数组相同
* */
public class Student {
String name;
int age;
double height;
char sex;
boolean isAdult; // 是否成年
public void study(){
// String name = "hello"; // name重名的话,会优先使用局部变量 hello
System.out.println(name + "学生在学习");
}
public void eat(){
System.out.println(name + "学生吃饭");
}
public void sleep(){
System.out.println(name + "学生睡觉");
}
public void printInfo(){
System.out.println("我的名字是:" + name);
System.out.println("我的年龄是:" + age);
System.out.println("我的身高是:" + height);
System.out.println("我的性别是:" + sex);
System.out.println("是否成年:" + isAdult);
}
public static void main(String[] args){
Student stu1 = new Student();
stu1.name = "张三";
stu1.age = 20;
stu1.height = 177;
stu1.sex = '男';
stu1.study();
Student stu2 = new Student();
stu2.name = "赵四";
stu2.study();
System.out.println("-----------------------------");
stu2.printInfo();
System.out.println("-----------------------------");
Student stu3 = new Student();
stu3.printInfo();
}
}