一.首先来了解一下Java面向对象的五个程序设计方式:

1.万物皆对象

Java以类为基本模块来将问题抽象化,在计算机中解决实际生活中的问题

2.程序为对象的集合,程序中的类通过互发消息来告知彼此要做的

消息即为对一个类的方法的调用

3.每个对象都有其他对象构成的存储

在新建的类中可以包含一个以存在的类的对象,即组和实现代码复用

4.每个对象都有其类型

对象时某个类的实例,而类就是对象的类型

5.某一特定类型的对象可以接收同样的消息

通过继承来实现代码复用时,子类也继承了父类的成员变量和方法则子类也可以实现父类的方法

二.使用应用来操作对象

既然Java是面向对象的语言,那么Java通过什么来操作对象呢?

——Java通过引用来操作对象

打一个比方,如下:

 Car car1=new Car();

那么在这里通过new这个关键字创造了一个Car类型的实例对象,那么car1就是引用。

通俗来讲就是你给你创造的对象起了个名字叫car1,你也可以叫它car2,这都无所谓,但是起名字必须要符合Java的命名标准:

1)、名称只能由字母、数字、下划线、$符号组成

2)、不能以数字开头

3)、名称不能使用JAVA中的关键字。

4)、在正规的大型项目中不能出现中文及拼音命名。(自己写小程序意淫当然没关系啦!)

同样的你也可以仅仅创造一个引用如下:

Car car1;

那么此时 你仅仅创建了一个引用没有创建对象,你对其采取任何一个方法调用都不会通过编译,(博主以为会通过编译,然后在运行时报出空指针异常,然而连编译期都通不过)

 三.引用与对象存储到什么地方?

这部分需要深入Java虚拟机,在这里仅仅简单介绍,当博主深入学习JVM后在做详细介绍。

在这里仅仅理解两个JVM的部分:堆和栈

可以简单粗暴的理解为:栈是用来存储对象的引用的,而堆是来存储对象本身的

看图理解:

当你使用new关键字时就会在堆上开辟一个类的实例对象,而你取的“名字”也就是引用将在栈上指向对应的实例对象

那么执行方法本体的是堆里的对象,而不是栈里的对象引用,所以刚才的仅仅是创建了引用的car1调用方法,而无法通过编译就很好理解了。

在这里可能会有一个疑问Java的虚拟机为什么要将引用放在栈里将对象放在堆里呢?

首先对象本生大小是不可以估计的,而且其大小也是可以改变的所以对于 栈这种分配效率高但是灵活性低的存储区当然不适合,而堆灵活性较高,分配效率较低,并且编译器不需要知道存储的数据在堆里存活的时间。所以这样的存储模式也是十分合理的。

对于基本类型,如double、int等都是存放在栈中的。

因为基本类型的打内存大小是确定的,所以放在栈中可以使其效率更快。

上面说到编译器不需要知道栈中对象的存在时间,而需要知道栈中对象存活的时间,下面可以看一个例子:

第一次发表文章,如有错误请斧正。

Java中的面向对象I的更多相关文章

  1. Java中的面向对象

    Java中的面向对象 在软件开发的学习中, 我最先接触的开发语言就是java,但都是简单的函数和循环数组的应用.说道面向对象,第一次看到这个词的时候还是在C#的学习过程中,我记得当时PPT上霸气的解释 ...

  2. java中的面向对象的三大基本特征

    转载,原文来自http://blog.sina.com.cn/s/blog_5f79a56a0100c6ig.html 众所周知,java中的面向对象的三大基本特征是:[封装].[继承].[多态] 一 ...

  3. Java中的面向对象II

    既然要创建一个对象那么就需要有一个类,下面介绍类的构建. 一.类的两个元素: 1.字段 字段也就是类变量,每一个类变量都是类的成员. <1.>类变量访问指定通常是私有的(private)或 ...

  4. JAVA中的面向对象与内存解析_2

    构造方法(构造函数)   • 使用new +构造方法创建一个新的对象. • 构造函数是定义在Java类中的一个用来初始化对象的函数. • 构造函数与类同名且没有返回值. • 例如:Person类的构造 ...

  5. JAVA中的面向对象与内存解析_1

    对象的创建和引用   必须使用new关键字创建对象. 使用对象(引用成员变量或来引用对象的成员变量. 使用对象(引用)方法(参数列表)来调用对象的方法. 同一类的每个对象有不同的成员变量存储空间. 同 ...

  6. 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)

    ---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...

  7. 浅谈Java中的AOP面向切面的变成和控制反转IOC

    https://blog.csdn.net/hi_kevin/article/details/7325554 https://www.cnblogs.com/zedosu/p/6632260.html ...

  8. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  9. java中一个重要思想:面向对象

    面向对象: 1, 面向过程的思想(合适的方法出现在合适的类里面) 准备去一个地方: 先买车, 挂牌, 开导航, 踩油门, 过黄河, 穿越珠穆朗玛峰... 2, 面向对象的思想 我开着车去, 车怎么去随 ...

随机推荐

  1. 包--json 与 pickle 模块

    一. 包 一个含有__init__.py 文件的文件夹(将py 文件中的内容划分成不同的部分放在不同的py 文件中,在将这些py 文件放在一个文件夹中) 是模块,不做执行文件,仅做调用 m1.py 和 ...

  2. az nginx install and other

    Nginx     1◆ nginx install 源码:https://trac.nginx.org/nginx/browser   官网:http://www.nginx.org/       ...

  3. linux下free命令详解

    free 命令显示系统内存的使用情况,包括物理内存.交换内存(swap)和内核缓冲区内存. 如果加上 -h 选项,输出的结果会友好很多: 有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指 ...

  4. global 全局变量 nonlocal 局部变量

    # x= # def func(): # x= # # func() # print(x) # x=[] # def func(): # x.append() # x.append() # x.app ...

  5. Animation和Animator 的区别

    此文章转载于极视学堂!!!! ①Animation和Animator 虽然都是控制动画的播放,但是它们的用法和相关语法都是大有不同的. Animation 控制一个动画的播放,而Animator是多个 ...

  6. 软件测试职业规划的思考(转)(作者Findyou

    前言 入软件测试行至今已经8年多,承领导们的信任与重用,同事的支持与信任,我的职业发展算是相对较好,从入行到各类测试技术岗位,再到测试总监,每一步都刚刚好.最近在自身职业发展瓶颈,人生十字路口,静坐反 ...

  7. bzoj4310

    题解: 后缀数组求出本质不同的串 然后二分答案 贪心判断是否可行 代码: #include<bits/stdc++.h> ; using namespace std; typedef lo ...

  8. redis:集群配置

    一.redis集群相关 1.概念:redis集群是通过数据分区提供可用性的,这样即使一部分节点失效也可以继续处理请求. 2.原理:集群使用数据分片实现,一个redis集群包括16384个哈希槽,数据库 ...

  9. Integer与int的区别(转)

    如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1; ...

  10. 【转载】JVM系列一:JVM内存组成及分配

    java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时 ...