[Java基础]面向对象

这篇具有很好参考价值的文章主要介绍了[Java基础]面向对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

      

目录

1、对象和类

2、类之间的关系

3、引用

4、对象的创建和使用

5、构造函数/构造方法

6、内存解析


       在这篇文章中,我们将学习面向对象的思想,并学习如何使用面向对象思想编程。在学习面向对象编程之前,我们先了解一下编程语言的发展:机器语言,汇编语言,高级语言,面向对象的语言。

        机器语言:直接由计算机指令组成,指令,数据,地址,都用0或1的符号串组成,可以由计算机直接执行;

        汇编语言:用容易理解和记忆的符号表示指令,数据,寄存器,抽象层次低,程序员不易理解。

        高级语言:屏蔽了机器细节,提高了语言的抽象层次,更接近于人类语言。60年代出现的结构化编程语言,提出了结构化数据和语句,数据和过程抽象等概念。

        面向对象语言:与以往的语言的不同点是,它的出发点是能更加客观的描述问题域中客观存在的事物。

        编程语言朝着人类更能理解的方向发展。

        提到面向对象,大家都会想到面向过程开发,那么这两者的区别是什么呢?主要区别在于:

        面向过程关注怎么做,做多少事。

        面向对象关注谁去做,多少人去做。

        面向对象编程,以下概念必须要掌握:

1、对象和类

1)对象用于计算机语言中对问题域中事物的描述。对象通过“属性”和“方法”来分别对应事务的静态和动态属性。

2)类是对同一类型事物的抽象,类中定义了这类对象具备的动态和静态属性。

3)类可以看做是一类对象的模板,对象是一个类具体的实现,Instance。

2、类之间的关系

关系
关联 最弱的关系,所有的关系都是关联关系
聚合

整体到部分。又分为聚集,组合。

聚集:雁群和大雁的关系;组合:身体和头的关系

继承 从一般到特殊。XX is a XX 
多态
实现

了解完上述内容后,用面向对象的思想如何分析问题呢?

  1. 这个问题应该有哪些类,哪些对象;
  2. 每个类和对象应该具备哪些属性和方法;
  3. 类和类之间的关系是怎样的。

3、引用

Java语言中,除基本类型之外的类型都称之为引用类型。Java中的对象通过引用对其操作。

String s; // 1.声明String类型变量s
s = new String("hello world!"); // 2.给s赋值"hello world!"

如以上代码:

执行第1句时,声明String类型的引用变量s;

执行第2句时,通过new语句创建一个String类型的对象,用s指向它,以后通过s完成对这个对象的操作。

从内存的角度看这两步:

执行第1句时,在栈中分配一块空间,保存对象的地址,此时存的地址是null。

执行第2句时,在堆中分配一块空间,保存对象,此时s存的地址是堆内存的地址。

[Java基础]面向对象

 那如何在内存中区分类和对象呢?

类是静态的的概念,每个类只有一份,保存在代码区;

对象是运行过程中new出来的,保存在堆中,类中的成员变量在不同对象中有不同的值(除静态变量),对象在没有引用时会被回收掉。

4、对象的创建和使用

1)必须使用new创建对象;

2)执行对象.成员变量来引用成员变量;

3)执行对象.方法(实参列表)来引用方法;

4)同一个类的每个对象的成员变量有不同的存储空间;

5)同一个类的每个对象共享该类的方法。

非静态的方法,是针对每个对象调用。

5、构造函数/构造方法

说到对象的创建,必须要说一下对象的构造函数。

1)使用new() + 构造函数的方法创建一个对象;

2)构造函数是定义在Java类的,一个用来初始化对象的成员变量函数;

3)构造函数名和类名相同,没有返回值;

4)没有指定构造函数时,编译器为每个类自动添加一个无参构造函数,如:

类名(){};

6、内存解析

Java在函数调用中传递参数时,遵循值传递的原则:基本类型传递数据值本身。引用类型,传递对象的引用,而不是对象本身。

public class MemoryAnalysis {
    public static void main(String[] args) {
        Point p1 = new Point(1, 1, 1);  // 1
        Point p2 = new Point(2, 2, 2);  // 2
        double distance = p2.getDistance(p1);  // 3
        System.out.println(distance);  // 4
        p1.setX(5);   // 5
        System.out.println(p1.getDistance(new Point(3, 3, 3)));   // 6
    }

}

class Point {
    double x, y, z;

    Point(double _x, double _y, double _z) {
        x = _x;
        y = _y;
        z = _z;
    }

    public void setX(double x) {
        this.x = x;
    }

    double getDistance(Point p) {
        return (x - p.x) * (x - p.x) + (y - p.y) * (y - p.y) + (z - p.z) * (z - p.z);
    }
}

Point p1 = new Point(1, 1, 1);  // 1
Point p2 = new Point(2, 2, 2);  // 2
double distance = p2.getDistance(p1);  // 3

[Java基础]面向对象

 

 第4步执行结束后,栈中变量的空间被释放

System.out.println(distance);  // 4

[Java基础]面向对象

p1.setX(5);   // 5
System.out.println(p1.getDistance(new Point(3, 3, 3)));   // 6

[Java基础]面向对象

 从图中我们可以看出,在方法传参,参数是引用类型时,在栈中创建一个变量指向参数的引用地址,而不是生成一个新的对象。

方法执行结束后,栈空间的变量全部被释放,堆空间的对象等垃圾回收时被释放

[Java基础]面向对象

我们在分析的时候,可能会遇到复杂表达式,这时候有个原则:从里到外分析

形参,实参在栈中都会占用一块空间,方法的返回值也会存在一块临时区域(栈)中,方法执行结束后,临时区域(栈)的空间自动释放;

 

7.方法重载

是指一个类中可以定义方法名相同,参数列表不同的多个方法。在实际使用时根据不同的参数列表选择方法。

普通方式的重载已经老生常谈了,这里我们重点看下构造函数的重载 

class Point {
    private double x;
    private double y;

    Point() {}

    Point(int x1, int y1) {
       this.x = x1;
       this.y = y1;
    }

    public double getX() {return x;}

    public double getY() {return y;}

    public void setX(double x) {this.x = x;}

    public void setY(double y) {this.y = y;}
}

接下来我们举个例子,从内存的角度解析程序执行过程

因为内存解析篇幅较长,我们单独拿出来讲解。请亲爱的读者朋友移步:

[Java基础]面向对象-内存解析_小王师傅66的博客-CSDN博客

 所以上面就是面向对象中,关于对象和类,类之间的关系,引用,对象的创建和使用,构造函数,内存解析的全部内容。文章来源地址https://www.toymoban.com/news/detail-477545.html

到了这里,关于[Java基础]面向对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java面试题】Java基础——面向对象

    重载和重写的区别★★★ 重载(Overloading)和重写(Overriding)都是Java中面向对象编程的特性,它们都可以让子类继承父类的方法。但是它们之间有一些重要的区别: 定义方式: 重载(Overloading): 在同一个类中 ,可以有 多个方法名相同但参数列表不同的方法 。当调用一个方法时,

    2024年02月11日
    浏览(29)
  • 【java】面向对象的编程基础

    true false 这里输入set和get可以自动将函数补全,传参初始化在构造属性之后 cc ccccc coleak 这里说明先构造属性,再执行代码块,再初始化 静态代码块 4 4 我是静态变量初始化 我是静态代码块 我是成员变量初始化 我是普通代码块 我是构造方法 快速构造,点击生成,构造函数,

    2023年04月16日
    浏览(32)
  • Java基础练习十(面向对象)

    以下名词中哪些是对象? 猫 狗 Tom Jerry 人 帅哥 美女 迪丽热巴 胡歌 Phone iPhone 14 Pro Max 《Java面向对象》 1. 编写一个Student类,包含name、gender、age、id、score属性,分别为String、String、int、int、double类型。类中声明一个say方法,返回String类型,方法返回信息中包含所有属性值。

    2024年02月12日
    浏览(25)
  • Java基础 --- 面向对象综合训练

    格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。 补充: 正题: 定义数组存储3个商品对象。 商品的属性:商品的id,名字,价格,库存。 常见三个商品对象,并把商品对象存入到数组当中。 定义数组循

    2024年03月19日
    浏览(32)
  • 〔005〕Java 基础之面向对象

    对象: 是一种特殊的数据结构 对象: 使用类 new 出来的,有了类就可以创建对象,例 Random r = new Random() ,其中 r 就是一个对象 格式: public class 类名 { 变量和一些类方法 } 面向对象编程,更加符合人类的思维习惯,编程也会更直观 其实万物皆对象,如果想操作学生数据,就

    2024年02月05日
    浏览(29)
  • Java基础(七)面向对象编程(高级)

    回顾类中的实例变量(即非static的成员变量) 创建两个Circle对象: Circle类中的变量radius是一个实例变量(instance variable),它属于类的每一个对象,c1中的radius变化不会影响c2的radius,反之亦然。 如果想让一个成员变量被类的所有实例所共享,就用static修饰即可,称为类变量(

    2023年04月16日
    浏览(30)
  • 【Java基础篇 | 面向对象】—— 封装详解

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习Java的一点学习心得,欢迎大家在评论区讨论💌 封装概念 : 将数据和对数据的操作封装在一个类中,对外部的访问只通过类提供的

    2024年02月09日
    浏览(28)
  • 【java 基础二 】- 面向对象、类、接口等

    Java面向对象编程(OOP)是一种编程范式,其旨在通过将程序逻辑封装在对象中来使代码更易于理解和维护。Java是一种面向对象的编程语言,它支持封装、继承和多态等概念。以下是Java面向对象编程的核心概念: 对象(Object):对象是具有属性和行为的实体。在Java中,对象是通过

    2024年02月08日
    浏览(32)
  • Java学习路线(8)——面向对象基础(2)

    一、static 概念: static是静态的意思,可以修饰成员变量和成员方法。当修饰成员变量时,在内存中 只存储一份 ,可以被 共享访问、修改 。当修饰成员方法时,可以被 共享访问 ,也被称为 公共方法 。 静态成员变量 访问格式: 【类名.静态成员变量】或【对象名.静

    2024年02月05日
    浏览(39)
  • 【狂神说Java】Java零基础学习笔记-面向对象

    面向过程思想 步骤清晰简单,第一步做什么,第二步做什么.... 面对过程适合处理一些较为简单的问题 面向对象思想 物以类聚, 分类 的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包