美文网首页
第二章 一切都是对象(Java对象)

第二章 一切都是对象(Java对象)

作者: WandaGao | 来源:发表于2018-07-03 15:21 被阅读0次

如果我们说另一种不同的语言,我们会发现另一个不同的世界

2.1 用引用来操作对象

每个语言都有自己操纵内存元素的方式 

在c c++中程序猿使用指针来来操作内存中的对象  

而java中使用引用来操作对象  但是引用并不是对象 而是指向对象 

对象是电视 那么 引用就是遥控器  我们可以通过遥控器来控制电视 同样java中我们可以通过引用来控制对象

电视 和 遥控器 都可以独立存在  所以你拥有一个引用并不代表 要有一个对象与之管理

例如 String  A ; 我们只创建了一个引用  由于他没有对象无法通过 向A发送消息执任何行为 如果我们这么做就会收到错误提示

2.2 必须由你来创建对象

java 中使用 new 字来创建新对象

String a = new String(“sdfsdf”);  //这种状态下引用和对象进行了关联  事实上 java 创建了引用就应该让引用于对象关联,即初始化引用

对象在内存中的存储

1.寄存器:最快的存储区域 位于CPU内部,空间有限,按照需求进行存储,我们无法控制,在程序运行时无法感知到它的存在。

2.堆栈:位于RAM(随机访问存储器)中,通过堆栈指针可以从处理器那里获得直接支持。堆栈指针向下移动则分配新的内存,向上移动则释放这些内存。这是一种快速有效的分配存储,效率仅次于寄存器。但是在程序执行时,必须严格的知堆栈站内所有对象的生命周期,以来控制堆栈指针的移动,以便维护堆栈控制对象资源的释放(c c++ 使用该策略执行进行资源的控制).... java为了程序的灵活性,放弃了该做法,在java中堆栈用来存储对象的引用 并不存放对象

3.堆:位于RAM中,一种通用的内存池,用于存放所有的java对象。堆的好处在于:编译器不需要知道存储的数据在堆里的生命周期,因此,在堆分配存储具有很强的灵活性。需要创建对象只需要new 关键字就能在堆里面进行存储分配  缺点:存储和分配,清理的速度较慢相对于堆栈存储(GC负责清理对象资源)

4.常量存储:常量值直接放在程序代码内部。 因为他永远不会改变...有时在嵌入式系统中,常量本身会与其他部分分离,所以在这种情况下,可以选择存放在ROM中(比如常量池)

5.非RAM存储: 流对象 持久化  数据库啥的

2.2.2 基本类型

bit 位   byte 字节(B)  1请记住好吗 java中的基本标量的 位数

对于基本类型 java使用的不是new出对象放在堆里 而是 学习c c++相同的方法 创建一个非引用的"自动常量",这个常量直接存储“值”,并置于堆栈中,因此更加高效

基本类型具有包装类  使得可以在堆中创建一个非基本对象 ,来表示基本类型 

char c = “x”;

Character ch = new  Character(“x”);

ch = “x”   //自动装箱

c = ch //自动拆箱

高精度数字

Java提过两个用于计算高精度的了: BigInteger 和 BigDecimal  类似包装类 但没有对应的基本类型

BigInteger : 支持任意精度的整数

BigDecimal:支持任意精度的定点数

2.2.3 Java中的数组

java中创建一个数组就相当于创建了一个引用数组,并且每个引用都指向了null

2.3永远不需要销毁对象

2.3.1 作用域

在作用域里定义的对象只可作用于作用域结束之前  {    <-----scope----->       }

2.3.2对象的作用域

对象的作用域与基本类型不同   

{

           String s = new String(“123”);

}//End of scope

引用s在作用域终点就消失了,然而 对象 String(“123”)任然在堆中占据空间,我们无法在作用域之后访问该对象,因为它已经超出了作用域的范围。

2.4 创建新的数据类型:类

关键字 class + 类名 {   }

2.4.1字段和方法

这里注意 在类中 定义的 字段中如果是 基本类型 java会默认为基本类型赋值

基本类型赋值

但是在方法中 int x  是不会被默认赋值的

2.5 方法 参数和返回值

java的方法决定了一个对象可以接收什么样的信息  

方法基本包括 名称 参数 返回值 方法体

void  main(String[ ]  arg){     修饰符 + 返回值 + 名字 + ()+参数 +{ }

            A   a = new A();

            a.f();  // 调用方法的行为我们一般称为 发消失给对象

}

2.5.1 参数列表

int getLength (String s ){

       return s.length() ;

}

事实上在传递对象参数时 我们传递的是 对象的引用 因为 引用指向对象 所以可以控制对象

在java中对象的传递其实 就是对象引用的传递

这里 我想强调的是 基本类型(除String外) 传递的不是引用 而是指

2.6 构建一个java程序

2.6.1 名字空间 又名 命名空间  

标识类的位置 同时也起到区分的作用  所以即使是同类名在java中只要包名不同 就无所谓了

使用import 来准确的表示导入那个包,即类库

如果我们在 在 import 后面加*  则表示我们导入改包下的所有类资源

2.6.2 static

当创建类时 就是在描述这个类的外观与行为 java中使用 new 来创建对象,数据空间才会被分配

这样有两个问题需要解决:1. 我只想在的定区域分配一个存储空间,而不想要创建多少对象

2.我不想使用对象就调用某些类的行为,我希望这个行为和对象没有关系

static 出现就是解决这类问题 

static 方法或域  不予对象关联 而是与包含他的类相关联

使用 : 直接将static放在 类前面做修饰即可

例如   class Test {

static  int   k =0;

}

这个情况下 及时你创建了 连个 Test 对象 

Test.i 也独享一份存储空间

两个对象共享一个 i

同样的静态方法也适用 :

class Incrementable{

          static  void  increment (){

                           xxxx;

             } 

}

Incrementable.increment()  类名.方法名

当使用static 修饰某个字段时 , 那么这个字段的创建方式就发生了改变,

static字段对于每个对象都是只有一份存储空间,而非static字段 每个对象都有各自不同的存储空间

但是 static 修饰的方法 差异性却没有那么大

2.7 你的第一个java程序

java.lang 是默认导入在每个类中的

暂时结束

相关文章

  • Java编程思想(第二章)

    第二章 一切都是对象 尽管Java是基于C++的,但是相比之下,Java更加的面向对象。 2.1 用引用操纵对象 ...

  • 第二章 2020-11-04

    Java 编程思想笔记 第二章 一切都是对象 Java 是基于 C++ 的一门面向对象的程序设计语言。 Java ...

  • 2019-01-30 java编程思想前几章阅读笔记总结

    md文档使用2个空格就是换行 java编程思想阅读笔记 第二章 Java中一切都是对象 使用应用操作对象 首先 j...

  • Java Overview 入门了解

    java Object oriented 面向对象在java中,一切都是面向对象,java可以基于对象模型做很多扩...

  • 面向对象

    一、面向对象基础 1、java中一切都是对象 java程序是由对象构成的 不同对象之间相互调...

  • 【自学Java】语言入门(二)幼儿班 面向对象

    第二章 面向对象 2.1 基础概念 2.1.1 面向对象 面向对象:考虑我该找“谁”(对象)去做 ,例 java...

  • 05 类和对象

    面向对象是Java最重要的特性。Java是彻底的、纯粹的面向对象语言,在Java中“一切都是对象”。本章将介绍面向...

  • JAVA反射_笔记

    在JAVA中,一切都是对象,那么你新建的一个class也是对象吗? 是的,新建的class也是对象,它是java....

  • 第二章笔记《Thinkinng in JAVA》

    第二章 一切都是对象 2.1用引用操纵对象 String s;创建的是引用,并不是对象 String s = "a...

  • 【Java核心知识点】一、基础知识

    相比C++,Java是一种更纯粹的面向对象语言,在Java中,(几乎)一切都是对象。 1.1 创建对象 通过标识符...

网友评论

      本文标题:第二章 一切都是对象(Java对象)

      本文链接:https://www.haomeiwen.com/subject/hsjluftx.html