类与对象(OOP)
快速入门
- 类是抽象的,概念的,代表一类事物。即它是数据类型
- 对象是具体的,实际的,代表一个具体事物。即它是实例
- 类是对象的模版,对象是类的一个个体,对应一个实例
-
养猫问题:
张老太养了两只猫猫:一只叫咪咪,今年3岁,白色;一只叫喵喵,今年5岁,玳瑁色。
请编写一个程序,当用户输入小猫名字时,就显示该猫的名字、年龄、花色。如果用户输入的名字错误,则显示“张老太没有这只猫”
import java.util.Scanner;
public class Object01{
public static void main(String[] args) {
/*张老太养了两只猫猫:一只叫咪咪,今年3岁,白色;一只叫喵喵,今年5岁,玳瑁色。
请编写一个程序,当用户输入小猫名字时,就显示该猫的名字、年龄、花色。如果用户输入的名字错误,则显示“张老太没有这只猫”*/
Scanner myScanner = new Scanner(System.in);
//实例化对象
Cat cat1 = new Cat();
cat1.name = "咪咪";
cat1.age = 3;
cat1.color = "白色";
Cat cat2 = new Cat();
cat2.name = "喵喵";
cat2.age = 5;
cat2.color = "玳瑁色";
String reply = myScanner.next();
if ("咪咪".equals(reply)) {
System.out.println("Cat1:" + cat1.name + " " + cat1.age + " " + cat1.color);
}else if ("喵喵".equals(reply)){
System.out.println("Cat2:" + cat2.name + " " + cat2.age + " " + cat2.color);
}else{
System.out.println("张老太没有这只猫");
}
}
}
class Cat{//属性
String name;
int age;
String color;
}
对象内存布局
属性/成员变量
-
从概念或叫法来看,成员变量 = 属性 = field,即成员变量是用来表示属性的
-
属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象、数组)
-
属性的定义语法等同变量
访问修饰符 属性类型 属性名
访问修饰符的作用是控制使用范围,有四种访问修饰符:public protected private 默认, 之后详讲
-
属性如果不赋值,有默认值,规则和数组一致
关于数的都是0/0.0,boolean是false,String4. 是null,char是\u0000
创建对象
-
先声明再创建
Cat cat;//这里声明完对象后,栈中的cat指向的是null cat = new Cat();//new后才有地址,cat随即指向在堆中的地址
-
直接创建
Cat cat = new Cat();
类和对象的内存分配机制
-
栈:一般存放基本数据类型(局部变量)
-
堆:存放对象(Cat cat,数组等)
-
方法区:常量池(常量,字符串等),类加载信息
-
示例
Person p = new Person(); p.name = "jack"; p.age = 10;
- 先加载Person类信息(属性和方法信息,只会加载一次)
- 在堆中分配空间,进行默认初始化
- 把地址赋给p,p就指向对象
- 进行指定初始化,如p.name = “ ”
对象机制练习.
-
以下代码会输出什么?
Person a = new Person(); a.age = 10; a.name = "小明"; Person b; b = a; System.out.println(b.name);//输出 小明 b.age = 200; b = null;//把b置为null,意思是把b和堆中的连线切断 System.out.println(a.age);//输出 200 System.out.println(b.age);//输出异常