Java类和对象[①初步认识类和对象概念]

一:面向过程和面向对象

(1)面向过程

1.概念

面向过程就是注重过程,每一步以及每一种方式不一样,维护比较麻烦

2.理解

我们学过的C语言就属于面向过程的编程语言,注重于每个过程是如何实现

我们可以用传统的洗衣服过程来描述一下面向过程!

传统的方式:注重的是洗衣服的过程,少了一个环节可能都不行!

(2)面向对象

1.概念

面向对象就是不关注过程不关心如何实现(你完成就行),主要是靠对象之间的交互完成的

2.理解

现如今我们学的Java就属于面向过程的编程语言,靠对象去完成一系列工作

我们可以用现代的洗衣服过程来描述一下面向对象!

现代的方式:人将衣服放进洗衣机、倒入洗衣服、启动洗衣机,洗衣机就会自己完成整个过程

整个过程:人、衣服、洗衣粉、洗衣机这四个对象之间交互完成的,人不需要关心洗衣机是如何洗衣服的,只用把衣服放洗衣机,靠洗衣机这个对象去完成一系列功能和任务!

二:类的定义和使用

(1)类的定义

1.类是什么

类是用来对一个实体对象的描述(描述一个对象的属性、外观、功能)

比如:

洗衣机在Java中可以将其看成是一个类

属性:产品品牌,型号,产品重量,外观尺寸,颜色...

功能:洗衣,烘干、定时....

2.类和对象的联系与区别

①联系

类是对象的抽象,对象是类的具体实例

类是用于创建对象的蓝图

②区别

类是抽象的,不占用内存

对象是具体的,占用内存

3.类的定义格式

定义类需要用到关键字class

class 类名{
   成员变量;   
   成员方法;   //成员方法包括普通方法和构造方法
}

(2)类的使用

例1:洗衣机类

我们可以定义一个洗衣机类!

class WashMachine{
 //这些都属于洗衣机的属性
 public String brand;  // 品牌
 public String type;   // 型号
 public double weight; // 重量
 public double length; // 长
 public double width;  // 宽
 public double height; // 高
 public String color;  // 颜色

 //这些都属于洗衣机的方法功能
 public void washClothes() {           // 洗衣服功能
   System.out.println("洗衣功能");
 }

 public void dryClothes()  {           // 脱水功能
   System.out.println("脱水功能");
 }

 public void setTime() {               // 定时功能
   System.out.println("定时功能");
 }

}
例2:狗类

我们可以定义一个狗类!

class PetDog {
 //狗的属性
 public String name;//名字
 public String color;//颜色
 
 //狗的叫声(方法1)
 public void barks() {
   System.out.println(name + ": 旺旺旺~~~");
 }

 // 狗的行为(方法2)
 public void wag() {
   System.out.println(name + ": 摇尾巴~~~");
 } 
}

(3)类的定义和使用注意事项

①类名最好采用大驼峰

定义成员变量统一先用public

成员变量和成员方法必须在类中

一般一个java文件只定义一个类

public修饰的类名要和文件名相同

main方法所在的类一般用public修饰

每一个类都对应一个字节码文件

三:类的实例化

(1)什么是实例化

用类这个类型去创建对象的过程,就称为类的实例化

(2)实例化格式

实例化需要用到关键字new

类 引用变量名 = new 对象();

例1:洗衣机类的实例化

WashMachine wm = new WashMachine();

①WashMachine就是类

②vm就是引用变量,也可以称为对象名

③new一个WashMachine类的对象

例2:狗类的实例化

PetDog dogs = new PetDog();

①PetDog就是类

②dogs就是引用变量,也可以称为对象名

③new一个PetDog类的对象

(3)实例化细节

①实例化使用new创建对象

②同一个类可以创建多个实例,也就是可以创建多个对象

③引用变量通过“.”可访问对象的变量属性和方法

(如下面代码所示,我创建了两个对象dog1和dog2,分别用这两个对象去访问变量和方法)

class PetDog {
    //狗的属性
    public String name;//名字
    public String color;//颜色

    //狗的叫声(方法1)
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
    }

    // 狗的行为(方法2)
    public void wag() {
        System.out.println(name + ": 摇尾巴~~~");
    }
}

public class Tmp {
    public static void main(String[] args) {
        //同一个类可以创建多个对象
        PetDog dog1= new PetDog();     //通过new实例化对象dog1
        dog1.name = "狗1";             //通过引用变量dog1去访问对象PetDogd的name变量
        dog1.color = "黄";             //通过引用变量dog1去访问对象PetDogd的color变量
        dog1.barks();                  //通过引用变量dog1去访问对象PetDogd的barks方法
        dog1.wag();                    //通过引用变量dog1去访问对象PetDogd的wag方法


        PetDog dog2 = new PetDog();    //通过new实例化对象dog2
        dog2.name = "狗2";             //同上,只不过引用变量变成了dog2
        dog2.color = "黑";
        dog2.barks();
        dog2.wag()
    }
}

注:每new一个对象,就会在栈上为其分配一块内存,注意实例化多个对象的时候,每个引用指向的对象都是不一样的(下面内存的分布通过详细画图理解)

四:观察内存中的分布

(1)成员变量

①概念

定义在类的内部且在方法外部的变量

②初始值

成员变量在未初始化时,都有初始值/默认值

①引用类型的值:null

②基本数据类型的值:0

③布尔类型的值:false

④char类型的值:'\u0000'

(2)内存分布

1.存储在哪

局部变量、引用变量储存在栈

对象储存在堆上

成员变量储存在对象里

引用变量存的是对象的地址(并非存的是对象本身),通过地址去操作对象

2.示意图

如下图所示,引用变量dog1和dog2都存储在栈上,PetDog对象存储在堆上,而成员变量name、color都存储在PetDog对象里面

上面提到过,引用变量存的是对象的地址,而dog1和dog2这两个引用变量存储的是不同地址,那么它们就能够通过地址去访问对象变量和方法

3.内存分布图理解

①每new一个对象,就会在栈上为其分配一块内存空间

当实例化多个对象时,每个引用变量指向的对象都是不一样的,每个内存地址空间也不一样

PetDog dog1= new PetDog();      //对应地址0x111

PetDog dog2= new PetDog();      //对应地址0x555

PetDog dog3= new PetDog();      //对应地址0x777

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值