一:面向过程和面向对象
(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