文章目录
- 面向过程与面向对象
- 认识类和对象
- 创建类
- 类的实例化
- 内存分布
- 注意事项
- 总结
面向过程与面向对象
我们说C语言是面向过程的编程语言,而Java是面向对象的编程语言,那究竟什么才是面向过程与面向对象呢?我们举一个例子来帮助大家理解:我们现在的需求是洗衣服,如何完成我们这个需求呢?
面向过程:
准备一个盆 - > 加水 - > 加洗衣粉 - > 洗衣服 - > 倒水 - > 加水 - >洗衣服 - > 拧干 - > 晾衣服
面向对象:
把衣服放进洗衣机,洗衣机洗完甩干。
通过这个例子我们可以看出面向过程和面向对象的区别,面向过程在实现一个洗衣服的需求时更注重如何完成洗衣服,而面向对象则注重于让洗衣机完成这个需求,怎么完成不需要关心。都可以完成我们的需求。只不过一个关注的是过程,而一个关注的是对象之间的合作。二者没有好坏之分。
认识类和对象
在上面我们比较了面向过程和面向对象两个思想的区别,那么在Java中究竟什么是对象呢?女朋友嘛?显然不是,要想讲明白对象我们不得不提类的概念,因为对象都是类实例化出来了的。那什么是类呢?类就是对一个实际事物的描述,例如人,我们可以用人类来描述,类描述的既然是一个实际事物肯定会有自己的属性,例如:男人,女人,年龄等,我们在类里面可以通过成员变量来定义类的属性,当然一个人类也会有自己的行为,在类里我们可以通过成员方法来描述行为。
创建类
大致了解类是什么之后我们如何创建一个类呢?基本语法是这样的:
class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}
我们来为大家演示创建一个人类。
public class Person {
public String name;
public int age;
public String sex;
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
public void show() {
System.out.println("name " + name + " age " + age + " sex " + sex);
}
}
上面的代码就实现了一个人类的创建,人都有名字、性别、和年龄所以我们创建人类时,用于描述人类的成员变量也创建为姓名、性别、和年龄,因为人每天都要吃饭睡觉,所以他的成员方法可以是吃饭和睡觉。
注意事项
1、在定义类时需要注意,类名必须采用大驼峰来书写。
2、一般一个文件当中只写一个类。
3、main方法所在的类中一般要用public修饰
4、public修饰的类必须要和文件名相同
5、不要轻易修改public类的名称
类的实例化
定义了一个类,就相当于在计算机中定义了一种新的类型,那么当我们创建好了一个类之后如何使用呢?当我们有了一个类的时候,就好像我们建房子时有了图纸,如果我们要使用房子必须按照图纸造出房子后使用,类也是一样,类并不能直接使用,需要使用类实例化出一个对象后进行使用。
基本语法
1、通过new关键字可以创建一个对象
2、使用.
来访问对象中的方法和属性
下面我们来看代码:
public class Person {
public String name;
public int age;
public String sex;
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
public void show() {
System.out.println("name " + name + " age " + age + " sex " + sex);
}
}
还是上面我们已经创建好的人类,当我们需要使用时
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.name ="qwq";
p.age = 18;
p.sex = "nan";
p.eat();
p.sleep();
p.show();
}
}
首先我们Person p = new Person();
实例化一个Person类的对象,通过这个对象去访问成员变量,并且给成员变量赋值,我们看这个p叫做qwq,18岁,性别为nan,还可以通过它调用成员方法。我们觉得一个对象不够,我们还可以在new一个对象:
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.name ="qwq";
p.age = 18;
p.sex = "nan";
p.eat();
p.sleep();
p.show();
Person p2 = new Person();
p.name = "123";
p.age = 20;
p.sex = "nv";
p.show();
}
}
我们执行以下看一下结果:
内存分布
在上面我们new了两个Person类的对象,那么他们的空间分配是怎样的呢?我们通过画图来给大家讲解。
定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,所以 Person p = new Person();
我们可以理解为创建了一个Person类型的变量,引用变量名为p,因为是在方法内实例化的,所以是局部变量所以在栈上开辟一块空间,储存的是对象的地址,Java中new的东西都会在堆上开辟空间,所以会在堆上开辟一块空间存储成员变量,简单来说就是引用指向了对象。一个类可以实例化多个对象,每实例化一个对象都会开辟一块新的空间,所以每个对象都有属于自己的成员。
注意事项
1、当引用为null时,代表这个引用不指向任何对象
2、引用能不能指向引用?
public static void main(String[] args) {
Person p = new Person();
Person p2 = new Person();
p = p2;
}
不可以,这样写代表了,p这个引用指向了p2这个引用指向的对象。
3、一个引用可不可以指向多个对象?
public static void main(String[] args) {
Person p =new Person();
p = new Person();
p = new Person();
}
不可以,这样写最后p之指向了一个对象。只有最后一个语句有效,其他的都被覆盖了。
总结
进行一下总结:
1、类其实就是一个模板,用来描述一个实体。
2、类其实就是类型,是一种自定义的类型,可以用来定义变量。
3、 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
4、做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间