我们在谈JAVA的时候,常常说到JAVA是一门面向对象的编程语言,那什么是面向对象呐?
面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
我们完成一件事情可以逐过程,比如我们洗衣服,就会经历下面的每一步:拿个盆子——放水——放衣服——放洗衣粉——手戳——换水——放洗衣粉——手搓——拧干——晾衣服。当然我们也可以逐对象,上面洗衣服的过程就可以简化为:人——衣服——洗衣粉——洗衣机。我们对比一下上面两种洗衣服的步骤就可以发现,面向过程和面向对象都可以帮我们解决问题,但是面向过程解决问题比较繁琐,中间缺失那一步都不行,并且换一个对象比如洗鞋子就要另一种方式,显然在解决实际问题中很不方便。而面向过程就大大解决了问题的解题步骤,他依靠对象之间的相互交互实现,在后面过程的维护和增删都容易实现,上面就是面向对象的好处。
类
类是什么呐?举个例子,我们将书本、笔、直尺、橡皮檫归类为学习工具,它们就是一个类,类就相当于一系列具有类似特征的相同事物的统称,再比如人、猫、狗...。而在计算机当中,我们将类说为数据类型,比如整型、字符串型、浮点型。只不过这里的数据类型是我们自己定义的,这有点像C语言当中的结构体。就像上面讲的,我们在定义一个类(自定义数据类型)的时候,我们要用到它的属性和行为,比如,定义一个人,我们就需要知道这个人的姓名、年龄、性别、身高、体重...这些我们称为属性,我们还需要知道这个人所具有的的行为:吃饭、睡觉、学习...
创建类:类可以表示成下面的形式(以定义人为列):
class People{
//属性(或者叫做成员变量)
String name; //名字
int age; //年龄
double weight; //体重
...
//行为(或者叫做方法)
eat(); //吃饭
sleep(); //睡觉
study(); //学习
...
}
class为定义类的关键字, Peopel为类的名字.{}称为类的主体,里面用来存放成员变量,成员方法等
对象
我们既然能用面向对象的思想解决问题时,那么我们就需要对象。那什么是对象呐?对象就是我们在解决问题当中一个个的实例,比如上面洗衣服当中的人、洗衣机、洗衣粉,在JAVA的世界中一切皆为对象。当我们根据人的特征定义好一个人时,我们需要将这个把这个人的信息放在一个具体的人身上,比如张三,那么张三就是我们要的对象。简单来说对象就是类对应的一个具体实例,放在代码上来说,对象就是一个类对应的变量。
类和对象的区别与联系
1.类是抽象的,概念的,代表一类事物,比如人类、动物、工具等
2.对象是具体的,实际的,代表一个具体的事物,比如张三、李思、钱、锤子
3.类是对象的模板,是对象的设计图纸,对象是设计图纸设计出来的一个个具体物件,比如房子
知道了类和对象,那怎么创建对象啦
创建对象(又叫做对象的实例化)
创建方式有两种:
1.先申明再创建:
People people;//声明对象People
people = new People();//创建
2.直接创建:
People people = new People();
上面的people就是对象(严格说是对象名或者对象引用,new People()创建的对象空间(数据)才是真正的对象)
上面了解了什么是对象和类,我们用一个列子来实现一下对象的访问
public class Class_and_Object {
public static void main(String[] args) {
/**
* 一个老太婆养了两只猫:一只叫做小白,3岁,白色;
* 另一只叫做小花,100岁,花色。
* 请编写一个程序,当用户输入小猫名字时就显示该猫的名字、年龄、颜色。如果用户名字输入错误,则显示老太婆没有这只猫
*/
/**new Cat()意为创建一只猫(猫对象)
Cat cat1 = new Cat()意为把创建的猫赋给cat1
cat1就是一个对象(严格的说是一个对象引用或者对象名,new Cat()创建的对象空间(数据)才是真正的对象)
*/
Cat cat1 = new Cat();
cat1.name = "小白";
cat1.age = 3;
cat1.color = "白色";
cat1.weight = 10;
Cat cat2 = new Cat();
cat2.name = "小花";
cat2.age = 100;
cat2.color = "花色";
cat2.weight = 20;
//访问对象的属性/行为
System.out.println("第一只猫的信息:"+cat1.name+" "+cat1.age+" "+cat1.color+" "+cat1.weight);
System.out.println("第二只猫的信息:"+cat2.name+" "+cat2.age+" "+cat2.color+" "+cat2.weight);
}
}
//创建一个猫类(创建一个自定义数据类型)
class Cat{
//属性(成员)变量
String name; //名字
int age; //年龄
String color; //颜色
double weight; //体重
//...
//行为
//...
}
结果展示:
总结实例化对象:
- new关键字用于创建一个对象的实例
- 使用.访问对象中的属性和方法
- 同一个类可以创建多个对象
类和对象在内存中的布局
JVM的内存主要由以下几部分组成
- 栈区:存储函数当前运行的一些临时变量,比如在int x、double f等
- 堆区:存放对象比如people、cat、dog等
- 方法区:主要用常量池来存储常量、比如字符串,类加载信息等
- 程序计数器
- 本地方法栈
比如定义一个Person类并实例化,看看类和对象在内存中的布局情况。
public class Test{
public static void main(String[] args){
Person people = new Person();
}
}
class Person{
String name = "李华";
int age = 20;
}