一、使用对象的原因
如果我们需要对猫进行一个描述(名字、年龄、走路、喵叫......)
①单独用变量来记录数据,把信息拆解了,不利于数据的管理;
②用数组来记录数据,会出现如下问题:
1)数据类型体现不出来;
2)只能用下标才能获取对应信息,导致变量名字、内容的对应关系不明确;
3)不能体现我们对象的行为。
一个程序就是一个世界,有很多事务(对象(属性、行为))
二、类与对象
2.1 类与对象的关系
1、类是抽象的,概念的,代表一类事物,比如人类、狗类...,即它是一种数据类型;
2、对象是具体的 ,实际的,代表一个具体的事务,比如一只具体的猫,即它是一个实例;
3、类是对象的模板,而对象是类的一个个体,对应一个实例。
2.2 对象在内存中的存在形式
对象名(对象引用)只是用来指向对象的,真正的对象是对象空间(内存中存储的地址和数据)。
public class Object01 {
public static void main(String[] args) {
Cat cat01 = new Cat();
cat01.age = 12;
cat01.color = "白色";
cat01.name = "小白";
}
}
class Cat{
String name;
String color;
int age;
}
2.3 属性与成员变量
2.3.1 两者关系
1、属性与成员变量是同一个意思。(这也有种叫法:字段(field))
2、属性是类的一个组成部分,一般是基本数据类型,也可以是引用数据类型(对象,数组)。
2.3.2 属性的注意事项
1、属性的定义语法类似变量: 访问修饰符 属性类型 属性名;
2、有四种访问修饰符:public,protected,默认,private;
3、访问修饰符的作用:控制属性或方法的访问范围;
4、如果属性不赋值,会有默认值,规则和数组一样;
2.4 类与对象的内层分配机制
Java内存结构分析
1、栈:一般存放基本数据类型(局部变量);
2、堆:存放对象(Cat cat,数组等);
3、方法区:常量池(常量,例如字符串),加载类信息;
2.5 成员方法(简称方法)
在某些情况下,我们需要定义成员方法。比如人类,除了基本的属性外(年龄,姓名...),我们人类有会有一些动作方法:说话、跑步...
2.5.1 方法调用小结
1、当程序执行到方法时,就会开辟一个独立的空间(栈空间);
2、当方法执行完毕后,或者执行到return语句时,就会返回;
3、返回到调用方法的地方(返回后,原本的开辟的栈就会销毁);
4、返回后,继续执行剩下的程序。
2.5.2 方法的作用(好处)
考虑这么一个情况,如果你的程序中有多个for循环输出,那你是不是要一遍一遍重写,而且当需要对输出部分的代码进行修改时,是不是还得一个一个重新改,这样子太麻烦了。我们是不是可以写一个for循环输出的方法,任何需要输出时调用改方法即可,而且要对输出部分代码进行修改时,只需要修改方法,就可以达到各个输出的部分全部修改。
1、提高代码复用率,降低代码冗余;
2、将实现的细节封装起来,然后提供其他用户来调用即可;
2.5.3 方法的定义
访问修饰符 返回数据类型 方法名(形参列表...){ //方法体
代码块;
return 返回值; //可有可没有。
}
例子:
class Person{
String name;
int age;
//方法(成员方法)
//
//1.public: 表示方法是公开的;
//2.void: 表示方法没有返回值;
//3.speak(): speak是方法名,()中是形参列表;
public void speak(){
System.out.println("我是个好人");
}
}
2.5.4 方法细节
①访问修饰符:
1、有四种访问修饰符:public,protected,默认,private;
2、访问修饰符的作用:控制属性或方法的访问范围;
②返回数据类型:
1、一个方法最多只有一个返回值;(需要返回多个结果可以返回数组)
2、返回类型可以为任意类型,包含基本类型和引用类型(数组、对象);
3、如果方法要求有返回数据类型,则方法体中最后执行的语句必须为 return 值;