JavaSe之面向对象初识

一、面向对象概述

1.1 面向对象和面向过程

面向过程:面向过程其实就是面向具体的每一个步骤和过程,也就是面对具体的每一个功能函数这些功能函数相互调用,完成需求。即就是朝着要实现的功能,一步步的去操作。

​ 面向过程:面向对象是基于面向过程,对象是将功能进行了封装。只要找到了具体的类,创建出对象,就可以调用其中的具体功能。面向对象也是用来解决问题的一种思维模式。即就是朝着要实现功能的目标,有该功能就调用类。没有的话,就自己设计类。

1.2 面向对象和面向过程差异(面向对象的好处)

  1. 面向对象是一种更符合人们思考习惯的思想
  2. 面向过程更多的体现的是执行者,面向对象更多的体现是指挥者。指挥对象做事情
  3. 面向对象复杂的问题简单

1.3 面向对象程序设计

案例:把大象装进冰箱

针对具体的需求,可以使用名词提炼法进行分析,寻找具体的对象。

  • 要求:把大象装冰箱里
  • 对象:大象、冰箱

实施的步骤

  1. 打开冰箱门。
  2. 将大象装进去。
  3. 关闭冰箱门。

以上步骤有个问题就是:这些行为的发起者是谁???谁来完成???

分析发现打开、装、关闭都是冰箱的功能。即冰箱对象具备如下功能

  • 冰箱打开。
  • 冰箱存储。
  • 冰箱关闭。

用伪代码描述,上述需求中有两个具体的事物 大象 和 冰箱 。

public class 大象{}// 大象类
public class 冰箱{// 冰箱类
    打开(){};
    存储(大象){};
   	关闭(){};
}

当把具体的事物描述清楚之后,需要使用这些具体的事物Java使用具体的事物,需要通过new关键字来创建这个事物的具体实例

// 创建冰箱对象
冰箱 bx = new 冰箱(); 
// 调用冰箱的功能
对象.功能();
bx.打开();
bx.存储(new 大象());
bx.关闭();

总结:

  1. 先按照名词提炼问题领域中的对象
  2. 对象进行描述,其实就是在明确对象中应该具备的属性功能
  3. 通过 new关键字 就可以创建该事物的具体对象
  4. 通过该对象调用它以后的功能。使用 . 访问属性和调用方法() 如: 大象.鼻子

二.类的定义

2.1什么是类

类是对现实生活中一类具有共同属性和行为的事务抽象

类的特点:

  1. 类是对象的数据类型
  2. 类是具有相同属性和行为的一组对象的集合;

2.2类的重要性

类是java程序的基本组成单位

2.3类的组成(属性和行为):

  • 属性 在类中通过成员变量来体现(类中方法外的变量)
  • 行为 在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)

2.4类的定义步骤:

  1. 定义类---手机 小米 华为 等
  2. 定义成员变量 手机属于什么品牌、价格... 参数
  3. 定义成员方法 手机发送短信、手机拨打电话 行为

三.对象的使用

3.1.创建对象

  • 格式:类名 对象名 = new 类名();
  • 范例:Phone phone1 =new Phone();

3.2.使用对象

3.2.1使用成员变量

  • 格式: 对象名称.变量
  • 范例:    phone1 .brand="xiaomi";

3.2.2使用成员方法

  • 格式: 对象名称.方法名
  • 范例:phone1.call();

四.对象内存图

4.1.一个对象的内存图


当在创建一个对象的时候,内存里面就会做至少7件事情

Student s = new Student();

  1. 加载class文件
  2. 申明局部变量(对s进行申明)
  3. 在堆区开辟一块空间(new关键字)
  4. 默认初始化
  5. 显示初始化(就地初始化)
  6. 构造方法初始化
  7. 将堆区中的地址值赋值给左边的局部变量(s)
public class Student {
    String name;
    int age;
    public void study(){
        System.out.println("好好学习");
    }
}
public class TestStudent {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s);
        System.out.println(s.name + "..." + s.age);
        s.name = "小黄";
        s.age = 18;
        System.out.println(s.name + "..." + s.age);
        s.study(); 
    }
}


1.

TestStudent这个类的字节码文件加载到方法区,方法区临时存储main方法

然后虚拟机会自动调用main方法(程序的主入口),此时main方法会被加载到栈里

4.2.创建对象:(7件事)Student s = new Student() ;

(1)加载class文件

 

(2)申明局部变量

 

栈区上开辟一块叫s(局部变量)的空间,用来存放Student这个类的对象的地址值

(3)在堆区开辟空间(new关键字)

 

把Student这个类里面所有的成员变量都拷贝一份放到堆区,包括所有成员方法的地址(方便以后调用的时候能找到对应方法),目前还没有初始化

(4)默认初始化

 

将引用类型赋值为null,其他类型的赋值给0/0.0

(5)显示初始化(就地初始化)

如果在定义成员变量的时候就进行了初始化(就地初始化),此时默认初始化的值就会被就地初始化的值所覆盖。没有就地初始化则忽略。

(6)构造方法初始化

 

创建对象的同时进行构造方法初始化,如果()里为空,则代表调用空参构造

若是有参构造,则就把就地初始化的值继续覆盖。

(7)把堆内存中的地址赋值给局部变量(s)

    

 

将堆区上所开辟空间的地址值赋值给s(局部变量),此时s就通过地址值指向了堆区上开辟的空间。

如果直接通过sout打印s,显示的就是s通过哈希变换的地址值

当整个main方法执行完毕的时候,main方法就从栈区上被销毁,main方法里的变量就被销毁了,此时堆区上的对象不再被任何变量所引用,java中不被任何变量所引用(指向)的对象就会自动销毁

4.2.多个对象的内存图

 创建第二个对象的时候.class字节码文件不需要再加载一次,且两个对象之间是互相独立的,不会相互影响

4.3.两个变量指向同一个对象的内存图 

 

五.成员变量与局部变量的区别

5.1.什么是成员变量与局部变量

  • 成员变量:类中的方法外的变量 就是为成员变量
  • 局部变量:方法中的变量 局部变量

区别

成员变量

局部变量

类中位置不同

类中方法外

类中方法里(方法声明传递参数)

内存中位值

堆内存

栈内存

生命周期不同

随对象存在而存在,随对象消失而消失

随方法调用存在而存在,随方法结束消失而消失

初始化值不同

有默认的初始化值

没有默认的初始化值,必须先定义赋值后使用

5.2访问修饰符之private

1.是一个权限修饰符;

2.可以修饰成员变量和成员方法;

3.被其修饰的成员只能在本类中被访问,可以保护成员不被其他类使用。

1.提供“ get变量名() ”方法,用于获得成员变量的值, 方法用public修饰

2.提供“ set变量名(参数) ”方法, 用于设置成员变量的值, 方法用public修饰

六.this关键字与构造方法

6.1this关键字

6.1.1this修饰的变量用于指代成员变量

  • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参
  • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

6.1.2什么时候用this?

  • 解决局部变量隐藏成员变量
  • this:代表所在的类对象的引用
  • 方法被哪个对象调用,this就代表哪个对象

6.1.3this使用细节

  1. this关键字可以用来访问本类的属性、方法、构造器
  2. this用于区分当前类的属性和局部变量
  3. 访问成员方法的语法:this.方法名(参数列表)
  4. 访问构造器语法:this(参数列表);注意只能在构造器使用(即只能在构造器中访问另外一个构造器) 必须放在第一条语句
  5. this不能在类定义的外部使用,只能在类定义的方法中使用

6.2构造方法

        构造方法是一种特殊的方法 作用创建对象

public class Student {
     修饰符 类的名称(参数) {

    }
}

        功能:主要是完成对象数据的初始化 

6.2.1构造方法-注意事项     

构造方法的创建

  1. 如果没有定义构造方法,系统将给出一个默认的无参构造方法
  2. 如果定义了构造方法,系统将不再提供默认的构造方法
  3. 方法重载:构造方法名称相同但是参数列表不同 这就是重载。
  4. 注意:如果自定义了带参数的构造方法,还要使用无参数构造方法,就必须要写一个无参构造方法 主要给我们对象中的 成员变量 赋值的操作  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值