类与对象
为什么会有类与对象?
- java 设计者 引入 类与对象(OOP) ,根本原因就是现有的技术,不能完美的解决新的新的需求.
快速入门
package Object_Practice;
// 使用面向对象的方式来解决问题
public class Object01 {
public static void main(String[] args) {
// 使用oop来解决这个问题
// 1.实例化一只猫[创建一个对象]
// 2.cat1(cat2) 就是一个对象
Cat cat1 = new Cat();
cat1.name = "小白";
cat1.age = 3;
cat1.color = "白色";
Cat cat2 = new Cat();
cat2.name = "小花";
cat2.age = 100;
cat2.color = "花色";
// 如何访问对象的属性呐
System.out.println("====第一只猫信息====\n" +"姓名:" + cat1.name + "\n"
+"年龄:" + cat1.age +"\n"
+"颜色:" + cat1.color);
System.out.println("====第二只猫信息====\n" +"姓名:" + cat2.name + "\n"
+"年龄:" + cat2.age +"\n"
+"颜色:" + cat2.color);
}
}
class Cat {
// 属性
String name;// 名字
int age;// 年龄
String color;// 颜色
// 行为
}
总结:
- 类是抽象的,概念的,代表一类事物,不如人,猫,它是个数据类型
- 对象是具体的,实际的,代表一个具体的事物,即实例
- 类是对象的模板,对象是类的一个个个体,对应一个实例
一、类
概念:类主要是由它的属性和行为组成的
二、对象
概念:对象是类的具体实例
2.1对象的内存布局形式
总结:
- 会把类中字符串放到常量池中
- 基本数据类型放在堆中
- 创建对象时,会加载猫类的信息,包括属性和行为
三、类与对象
从概念或叫法上看:
-
成员变量 = 属性 = field(字段) (即 成员变量是用来表示属性的,授课中,统一叫 属性)
-
属性是类的一个组成部分,一般是基本数据类型,也可以是引用数据类型(对象,数组)
class Car{
//属性/成员变量/field(字段)
String name;
double price;
String color;
String [] master;
//可以是基本数据类型,也可以是引用数据类型
}
3.1如何创建
-
先声明再创建
Cat cat; cat = new Cat();
-
直接创建
Cat cat = new Cat();
3.2如何访问属性
基本语法:对象名.属性名
3.2类与对象的分配机制
public static void main(String[] args) {
Person p1 = new Person();
//p1指向 new Person 开辟出来的空间,包括它分配出来的数据
//p1 称为对象引用/对象名,new Person 才是真正的对象
p1.name = "杨文龙";
p1.age = 21;
p1.sal = 86;
p1.isPass = true;
//对象的属性默认值,遵守数组的规则:
// int 0,short 0, byte 0, long 0, float 0.0,
//double 0.0,char \u0000, boolean false,String NULL
System.out.println("这个人的信息");
System.out.println("姓名:" + p1.name +"\n"
+ "年龄:" + p1.age + "\n"
+ "分数:" + p1.sal + "\n"
+ "是否通过:" + p1.isPass + "\n" );
Person p2 = p1;
System.out.println("年龄:" + p1.age);//输出多少
}
3.2.1Java内存的结构分析
- 栈:一般存放基本数据类型(局部变量)
- 堆:存放对象(Cat cat,数组等)
- 方法区: 常量池(常量,比如字符串),类加载信息
例如
Person p1 = new Person();
p.name = "jack";
p.age = 10;
- 先在方法区加载类信息( 对象的 属性和 行为 ,只会加载一次)
- 在堆中开辟内存空间,进行默认初始化,
- 把地址赋给p1,p1指向分配出来的空间(对象)
- 进行指定初始化
注意事项和细节
-
属性的定义语法同变量,示例:访问修饰符 属性类型 属性
- 访问修饰符:用来控制属性的范围范围
- public
- protected
- 默认
- private
- 访问修饰符:用来控制属性的范围范围
-
属性的定义类型可以为任意类型,包含基本类型或引用类型
-
属性如果不赋值,有默认值,规则和数组一致
- 具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000, boolean false,String
package Object_Practice;
public class PropertiesDetail {
public static void main(String[] args) {
Person p1 = new Person();
//p1指向 new Person 开辟出来的空间,包括它分配出来的数据
//p1 称为对象引用/对象名,new Person 才是真正的对象
//对象的属性默认值,遵守数组的规则:
// int 0,short 0, byte 0, long 0, float 0.0,
//double 0.0,char \u0000, boolean false,String NULL
System.out.println("这个人的信息");
System.out.println("姓名:" + p1.name +"\n"
+ "年龄:" + p1.age + "\n"
+ "分数:" + p1.sal + "\n"
+ "是否通过:" + p1.isPass + "\n" );
}
}
class Person{
int age;
String name;
double sal;
boolean isPass;
}