/* 类与对象
1.类是抽象的,概念的,代表一类事物,比如人类,狗类,猫类...即它是数据类型,自定义的数据类型
2.对象是具体的,实际的,代表一个具体事物,即实例
3.类是对象的模板,对象是类的一个个体,对应一个实例
创建对象
1.先声明再创建
People p1;
p1 = new People();
2.直接创建
People p1 = new People();
*/
/* 属性(成员变量)
1.叫法:成员变量 = 属性 = field(字段)
2.属性是类的组成部分,一般是基本数据类型,也可以是引用数据类型(对象,数组)
3.语法同变量,访问修饰符 + 属性类型 + 属性名
四种访问修饰符:public,proctected,default(默认),private
4.属性的定义类型可以为任意类型,包含基本类型或引用类型
5.属性如果不赋值,有默认值,规则与数组一致
int,short,byte,long-->0
float,double -->0.0
char-->u000
boolean-->false
String-->null
6.访问属性:对象名.属性名;
p1.name;
p1.age;
p1.salary
*/
/* 类和对象的内存分配机制
1.栈:一般存放基本数据类型(局部变量)
2.堆:存放对象(People p1,数组等)
3.方法区:常量池(常量,比如字符串),类加载信息
创建对象流程:
1.先加载People类信息(属性和方法信息,只会加载一次)
2.在堆中分配空间,进行默认初始化
3.把地址赋给p,p就指向对象
4.进行指定初始化,如p1.name = "张三"
*/
// 演示
public class Object{
public static void main(String[] args){
//1.new People()创建一个人
//2.把创建的人赋给p1
People p1 = new People();
p1.name = "黄瑞清";
p1.age = 20;
p1.salary = 18888;
//3.创建第二个人,new People()
//4.p1、p2都是一个对象
People p2 = new People();
p2.name = "张三";
p2.age = 18;
p2.salary = 6666;
//访问对象属性
System.out.println("第一个人的属性:" + p1.name + " " + p1.age + " "
+ p1.salary);
System.out.println("第二个人的属性:" + p2.name + " " + p2.age + " "
+ p2.salary);
}
}
//定义一个人类 People--->自定义数据类型
class People{
//属性
String name;//名字
int age;//年龄
double salary;//工资
}
// 练习:下面代码输出什么?
public class Object{
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); //200
System.out.println(b.age); //出现异常
}
}
class Person{
String name;
int age;
}