目录
目录
类与对象
一、引出
用现有知识解决养猫问题
缺点:不利于数据管理,效率低
引出新技术
二、概述和快速入门
类与对象关系示意图
类:把所有猫的属性提取出来形成一个类
int是java提供的数据类型
类也是数据类型,是我们自定义的数据类型
例子
public class Object01{
//编写一个mian方法
public static void main(String[] args){
/*
张老太养了两只猫猫:一只名字叫小白,今年 3 岁,白色。
还有一只叫小花,今年 100 岁,花色。 请编写一个程序,
当用户输入小猫的名字时, 就显示该猫的名字, 年龄, 颜色。
如果用户输入的小猫名错误, 则显示 张老太没有这只猫猫。
*/
//使用OOP面向对象解决
//实例化一直猫【创建一只猫对象】
//new Cat() 创建一只猫
//Cat cat1 = new Cat();把创建的猫赋给cat1
Cat cat1 = new Cat();
//Scanne myScanner = new Scanner(System.in);与上述语句类似
cat1.name = "小白";
cat1.age = 3;
cat1.color = "白色";
cat1.weight = 4;
//创建第2只猫
Cat cat2 = new Cat();
cat2.name = "小花";
cat2.age = 100;
cat2.color = "花色";
cat2.weight = 5;
//怎么访问对象的属性
System.out.println("第一只猫信息" + cat1.name + " " + cat1.age + " "
+ cat1.color + " " + cat1.weight);
System.out.println("第一只猫信息" + cat2.name + " " + cat2.age + " "
+ cat2.color + " " + cat2.weight);
}
}
//使用面向对象的方式解决养猫问题
//定义一个猫类 Cat->自定义的数据类型
class Cat{
//属性
String name;//名字
int age;//年龄
String color;//颜色
double weight;//体重
}
通过以上代码可以得出:
1) 类是抽象的, 概念的, 代表一类事物,比如人类,猫类.., 即它是数据类型.
2) 对象是具体的, 实际的, 代表一个具体事物, 即 是实例.
3) 类是对象的模板, 对象是类的一个个体, 对应一个实例
编译错误记录
文件object01.java,编译时提示 错误: 需要 class、interface、enum 或 record
public calss Object02{
原因:public class 打错,打成public calss
三、对象在内存中的存在形式
String是引用数据类型,根据jvm的规则,其数据默认被保存在方法区的常量池中
四、属性/成员变量的注意事项和细节说明
1) 属性的定义语法同变量, 示例: 访问修饰符 属性类型 属性名;
访问修饰符: 控制属性的访问范围
有四种访问修饰符 public, proctected, 默认, private
2) 属性的定义类型可以为任意类型, 包含基本类型或引用类型(数组,对象)
3)默认值:遵守数组规则 int 0, short 0, byte 0, long 0, //整数型都是0
float 0.0,double 0.0,//浮点型是0.0
char \u0000, boolean false, String null
代码说明:
public class PropertiesDetail{
//编写一个main方法
public static void main(String[] args){
//创建一个Person对象
person1是对象名,
//new Person()创建的对象空间(数据)才是真正的对象
Person p1 = new Person();
//对象的属性默认值,同数组
System.out.println("\n当前这个人的信息");
System.out.println("age=" + p1.age + " name=" + p1.name + " sal=" + p1.sal
+ " gender=" + p1.gender +" isPass=" + p1.isPass);
}
}
class Person{
int age;
String name;
double sal;
char gender;
boolean isPass;
}
关键知识点:
p1 是对象名(对象引用) 类比:人名
new Person() 创建的对象空间(数据) 才是真正的对象 类比:这个人本身
五、如何创建对象
1) 先声明再创建
Cat cat ; //声明对象 cat
cat = new Cat(); //创建
2) 直接创建
Cat cat = new Cat();
六、如何访问属性
对象名.属性名;
cat.name ;
cat.age;
cat.color;
七、类和对象的内存分配机制(重要)
对象的赋值也是引用赋值,赋的是地址(类似数组)
只要是数据空间一定会有一个地址
java内存的结构分析
1) 栈: 一般存放基本数据类型(局部变量)
2) 堆: 存放对象(比如Cat cat, 数组等)
3) 方法区: 常量池(常量, 比如字符串), 类加载信息(属性信息、方法信息)
八、创建对象流程分析
一、在方法区加载类信息(属性信息/方法信息),只加载一次
二、 在堆中分配新空间,默认p.name为null,p.age为0
三、把地址赋给p,p就指向对象
四、对象属性的指定初始化0→10;null→jack
九、对象机制练习
public class Object04{
//编写一个main方法
public static void main(String[] args){
Person a = new Person();
a.age = 10;
a.name = "小明";
Person b;
b = a;
System.out.println(b.name);
b.age = 200;
b = null;
System.out.println(a.age);
System.out.println(b.age);
}
}
class Person{
int age;//属性或者成员变量或者field(字段)
String name;
}
输出结果
内存分析
总结:1)由于对象是引用赋值,所以当执行b=a时,b和a指向同一地址,因此任何一方变化都会影响另一方
2)当b = null时,就表示b是一个空值,不指向任何地址,所以编译后输出会报错