Java是面向对象的编程语言。
那么什么是对象呢? 什么又是类呢? 现实案例理解:
人类 与 小范 : 人类就是一个类,而小范就是这个类中的一个对象
狗 与 小白 : 狗就是一个类,而小白 就是这个类中的一个对象
那么,不管是小范 还是 小白 ,都会有一些特定的属性。比如小范的年龄,小白的体重...
为什么使用类与对象?
当基本数据类型不够用的时候,我们就自己声明一些类,来使用。
代码实现
类的声明: class 类名 { }
对象属性访问符: "." , 使用: 对象名.属性名
public class Test{
public static void main(String[] args){
//声明一个Person对象 p
Person p = new Person();
//对象p 的属性赋值
p.name = "小范";
p.age = 20;
//声明一个Dog对象 d
Dog d = new Dog();
//对象d 的属性赋值
d.name = "小白";
d.wide = 10;
}
}
class Person{
String name;
int age;
}
class Dog{
String name;
int wide;
}
属性/成员变量
属性也叫做成员变量 , 而我们上面定义的name、age、wide 都是成员变量。
属性的定义: 访问修饰符 属性类型 属性名;
说明:
-
属性可以是基本数据类型,也可以是引用数据类型。例如 Person 中可以有一个属性是 Dog 类型的对象 d。
-
属性如果不进行赋值,则会有默认值。这里默认值的取值与数组中的默认值取值一样。
-
不同的对象是相互独立的,互相不影响的。一个对象对属性进行更改,对另一个对象不会有影响。例如:有两个人分别是 小黄 和 小范,如果小范体重增加了10kg,对小黄并没有影响。
-
属性有访问修饰符,它们按可访问范围分为:public>protected>默认(default)>private。
public class Test{
public static void main(String[] args){
//对象p1
Person p1 = new Person();
//对象p1 的属性赋值
p1.name = "小范";
p1.age = 20;
//对象p2
Person p2 = new Person();
//对象p2 的属性赋值
p2.name = "小黄";
p2.age = 18;
//改变 p1 的age属性与name属性 , p2不会受到影响
p1.name = "小雨";
p1.age = 19;
}
}
class Person{
String name;
int age;
}
内存图理解
对象是引用类型的,所以对象和数组以及String字符串一样,存在赋值问题。例如
public class Test{
public static void main(String[] args){
//对象p1
Person p1 = new Person();
//对象p1 的属性赋值
p1.name = "小范";
p1.age = 20;
Person p2 = p1;
p2.age = 18; //这时 p1.age 也就等于 18
}
}
class Person{
String name;
int age;
}
内存图理解
内存图说明:
1) 栈: 一般存放基本数据类型(局部变量)
2) 堆: 存放对象(Cat cat , 数组等)
3) 方法区:常量池(常量,比如字符串), 类加载信息
程序流程分析:
1) 先加载Person 类 , 只会加载一次
2) 在堆中,分配空间[地址],并进行默认初始化,比如 name=null age = 0
3) 把堆中地址,返回给 p1
4) 进行指定初始化 name = “小范” age = 20
5) 在栈空间中声明一个p2,将p1在栈空间中保存的堆地址复制给p2