软件存在的意义就是为了解决现实世界当中的问题,它必然模拟现实世界,也就是说现实世界中有什么,软件中就对应有什么。面向对象编程思想中关注点是“对象”或者“事物”,那么在编程语言当中要想创建对象则必须先有类,在Java中,必须先设计类,才能获得对象。那么类和对象分别是什么,它们的区别和联系是什么呢?
一切皆对象:现实世界中实实在在存在的东西,投射到代码中就是对象
程序中的『类』,对应到生活中就是对同一类事物的一个统一的『分类名称』。
类和对象的关系
从抽象和具体的角度来说:
类:抽象的描述
对象:具体存在的实体,所以对象也被称作:类的实例
从设计图和产品的角度来说:
类:生产产品的设计图
对象:按照设计图生产出来的一个具体的产品
使用汽车设计图可以生产汽车产品。使用汽车类可以创建汽车对象。
现实中,描述一类事物:
类的定义格式:
定义类:就是定义类的成员,主要包括成员变量和成员方法。
初识类中的成员:Java中的类可以包含下面几个部分,我们先看一下是什么,之后在慢慢学习
/*
计算机程序中的类,类的设计:
5大成员(5大组成部分):
1、属性:数据特征
2、方法:行为特征,功能特征
3、构造器:创建对象时用
4、代码块:在类初始化和对象初始化时用的
5、内部类:在某个大的事物中,包含了一个独立的小的事物类别,而且一般这个小的事物只为大的事物服务时
*/
//Body类
class Body{
//类的成员之一:属性
double weight;
char gender;
//类的成员之二:方法
void eat(){
System.out.println("吃饭");
}
void sleep(){
System.out.println("睡觉");
}
//类的成员之三:构造器
Body(){
}
Body(double weight, char gender){
this.weight = weight;
this.gender = gender;
}
//类的成员之四:代码块
{
System.out.println("非静态代码块");
}
static{
System.out.println("静态代码块");
}
//类的成员之五:内部类
class Heart{
public void beat(){
System.out.println("砰砰跳");
}
}
}
对象是一类事物的具体体现,是能够看得到摸的着的真实存在的实体。对象是类的一个实例,必然具备该类事物的属性和行为。例如:每个人类都有名字,身高,体重,而对象就是一个个具体的人,比如说张三丶李四..
类与对象的关系
我们可以把手机的设计图纸看成类,你手中实实在在的手机看成对象
现实世界的一类事物。
Java中用class描述事物也是如此:
当我们设计好一个类的时候,就可以根据这个类来创建对象了。创建的对象的语法格式如下所示:
类其实就是对象的数据类型,类是引用数据类型 。对象名其实也是变量名或者叫对象的引用。那么,对象名中存储的是什么呢?答:对象地址。定义类:就是定义类的成员,类中的成员很多。我们可以根据需求来定义对应的成员。
我们来定义一个简单的类
//声明类
class Person{
//成员变量(声明属性)
String name;
int age;
char gender;
}
下面我们给上面声明的类来创建对象
/*
创建对象的格式:
类名 对象名 = new 类名();
调用成员变量的格式:
对象名.变量名
调用成员方法的格式:
对象名.方法名();
*/
public class Demo{
public static void main(String[] args){
//(1)创建对象
Person p = new Person();
//(2)为p对象的name属性赋值
p.name = "张三";
//为p对象的age属性赋值
p.age = 23;
//为p对象的gender属性赋值
p.gender = '男';
//(3)访问/显示对象的属性的值
System.out.println("姓名:" + p.name);
System.out.println("年龄:" + p.age);
System.out.println("性别:" + p.gender);
}
}
单个对象内存图
查看下面案例,分析内存中的变化情况
package com.wrg.demo04;
public class Student {
// 成员变量: 属性
String name;
int age;
// 成员方法: 行为
public void study(){
System.out.println("学生正在学习Java...");
}
public void doHomeWork(){
System.out.println("学生正在做作业敲代码...");
}
}
class Test {
public static void main(String[] args) {
// 创建Student对象
Student stu = new Student();
//直接打印对象名,就是输出他的内存地址值
System.out.println(stu);// com.wrg.demo04.Student@4554617c
// 访问成员变量
stu.name = "冰冰";
stu.age = 18;
System.out.println(stu.name+","+stu.age);
// 访问成员方法
stu.study();
stu.doHomeWork();
}
}
图解分析
结论:
创建多个对象时,对象在内存中的变化情况
多个变量指向相同对象时,内存中的变化情况
就是指"没有名字"的对象。也就是没有引用去指向内存中的对象。特点:匿名对象只能使用一次
// 创建对象
Student stu1 = new Student("热巴",18);// 有名字的对象
stu1.show();
stu1.show();
System.out.println("==================================");
//匿名对象
new Student("热巴",18).show();// 没有名字的对象
new Student("热巴",18).show();// 没有名字的对象
使用场景:
匿名对象可以作为方法的参数
// 调用method1方法
Student stu2 = new Student("热巴",18);// 0x11901
method1(stu2);// 有名字的对象传参
method1(new Student("热巴",18));// 匿名对象的方式传参数
匿名对象也可以作为方法的返回值
//匿名对象做为:方法的返回值
public Student test(){
//Student stu = new Student("丽颖",18);// 0x11908
//return stu;// 0x11908
return new Student("丽颖",18);
}