java编程思想(2)--一切都是对象

1创建对象

String s ;创建引用,并未初始化,即引用未关联任何东西

String s2="asda"; 初始化
System.out.println(s2);
System.out.println(s);//报错

用new 来初始化

String s = new String("sgjadfjaf");

1.1如何存储

程序运行时,对象时怎么放置安排的呢?内存怎么分配的呢?

 (1)寄存器

  --处理器内部,外部程序感觉不到其存在

(2)堆栈

  --位于RAM(随机访问存储器中),通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。java系统必须知道存放在堆栈上所有对象的确切生命周期,以便上下移动堆栈指针,但这一约束限制了程序的灵活性,所以最燃某些java数据存储在堆栈中--特别是对象引用,但是java对象并不存在其中。

(3)堆

  一种通用的内存池(也位于RAM中),用于存放所有的java对象。堆不同与堆栈的好处是:编译器不需要知道存储的数据在堆栈里存活多长时间。因此在堆里分配时有很大的灵活性。当需要一个对象时,只要new一下,当执行到new时,会自动在堆里进行存储分配。当然,这种灵活性也要付出相应的代价;用堆进行存储分配和清理可能比用堆栈进行存储分配需要更多的时间。

(4)常量对象

  常量值通常直接存放在程序代码内部,这样做是安全的,因为他们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分割离开,这种情况下可以存放在只读存储器ROM中。

(5)非RAM存储

  如果数据完全存活在程序之外,那么它可以完全不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是 流对象和持久化对象。在流对象中,对象转化成字节流,通常被发送给另一台机器。在“持久化对象”中,对象被存放于磁盘上,因此即使程序被终止,他们仍能保持自己的状态。这种存储的技巧在于:把对象转化成可以存放在其他媒介上的事物,在需要时,可以恢复成常规的、基于RAM的对象。java提供了对轻量级持久化的支持,而存储JDBC和hibernate这样的机制提供了更加复杂的对在数据数据库中存储和读取对象信息的支持。

1.2 特例:基本类型

  在程序设计时经常使用到一系列基本类型,他们需要特殊对待,因为new将对象存储在“堆”里,故用new创建一个对象--特别是小的、简单的变量,往往不是很有效。java对于这种类型不用new 来创建变量,而是创建一个并非是引用的“自动”变量、这个变量是直接存储“值”,并置于堆栈中,因此更加高效。

序号

数据类型

位数

默认值

取值范围

包装器类型

1 byte(位) 8 0  -2^7 - 2^7-1 Byte
2 short(短整数) 16 0 -2^15 - 2^15-1 Short 
3 int(整数) 32 0 -2^31 - 2^31-1 Integer
4 long(长整数) 64 0 -2^63 - 2^63-1 Long
5 float(单精度) 32 0.0 -2^31 - 2^31-1 Float
6 double(双精度) 64 0.0 -2^63 - 2^63-1 Double 
7 char(字符) 16 0 - 2^16-1 Character
8 boolean(布尔值) 8 false true、false
Boolean

9          void                                                                             Void

  JAVA提供 了自动拆装箱的功能

高精度数字

java提供了两个高精度计算的类:BigInteger 和 BigDecimal,它们大体属于包装器的范畴,但是却没对应的基本类型。

这两个类以方法调用的方式取代运算符方式来实现运算,所以速度会比较慢,但是以速度换取了精度

BigInteger 支持任意精度的整数,可以表示任意大小的整数值,而不损失精度。

BigDecimal 支持任意精度的定点数,可以进行精确地货币计算

1.3java中的数组

java会确保数组被初始化,而且不能被他的范围之外访问。这种范围检查是以每个数组上少量的内存开销及运行时的下标检查为代价的,因此换来了安全性和效率的提升。

当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化一个特定值,该值拥有自己的关键字null.一旦java看见null,就知道这个引用还未指向某个对象,运行时就会报错。

2.永远不需要销毁对象

2.1 作用域

{

}

2.2对象的作用域

java对象的作用域不具备和基本类型一样的生命周期。new一个java对象时,它可以存活作用域之外。

{

  String  s = new String(" a String");

}//end of Scope

引用s在作用域终点就消失了。然而s指向的String对象继续占用着内存空间。java通过垃圾回收器完成对不在引用的对象的回收,释放内存空间。

2.3创建类

class

字段和方法

方法、参数和返回值、参数列表

2.4 static关键字

  static关键字解决了,一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至不需要创建对象。另一种情形是,希望某个方法不与包含它的类的任何对象关联在一起,即使没有创建对象,也能够调用这个方法。

当声明一个事务是static时,就意味着这个域或者方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类对象,也可以调用它。

尽管当static作用于某个字段时,肯定会改变数据创建的方式(因为一个static字段对每个类来说都只有一份存储空间,而非static字段则是对每个对象有一个存储空间),但是如果static作用域某个方法,差别却没有那么大。static方法的一个重要用法就是在不创建任何对象的前提下就可以调用它,正如我们所看到的那样,这一点对main()方法很重要,这个方法是运行一个应用的入口点。

和其他任何方法一样,static方法可以创建或使用与其类型相同的被命名对象,因此,static方法常常拿来做“牧羊人”的角色,负责看护与其隶属同一类型的实例群。

原文地址:https://www.cnblogs.com/flgb/p/10633064.html

时间: 2024-10-03 10:52:11

java编程思想(2)--一切都是对象的相关文章

JAVA编程思想(1) - 一切都是对象

-"如果我们说另一种不用的语言,那么我们就会发觉一个有些不同的世界" 1. 用引用操纵对象 每种编程语言都有自己的数据处理方式.有些时候,程序员必须时刻留意准备处理的是什么类型.您曾利用一些特殊语法直接操作过对象,或处理过一些间接表示的对象吗(C或C++里的指针)? 所有的这一切在JAVA里都得到了简化.在JAVA里一切都被视为对象,尽管是一切都被看成对象,但操纵的标识符实际上是一个"引用"而已,简单来说是:对象好比"电视",我们拥有的引用是&q

Java编程思想 2-1 一切都是对象

尽管 Java 是基于 C++ 的,但是相比之下,Java 是一种更纯粹的面向对象程序设计语言. 在本章,将看到 Java 程序的基本组成部分,并体会到在 Java 中几乎一切都是对象. 2.1 用引用操纵对象 Java 中通过引用(遥控器)操纵对象(电视机). 引用可以独立存在,并不一定需要有一个对象与之关联.比如:String s; 这里创建的只是引用,而不是对象.如果此时向 s 发送消息,就会返回一个运行时错误.因为此时 s 实际上没有和任何事物关联. 因此,一种安全的做法是:创建引用的同

Java编程思想总结(一)对象导论

Java编程思想总结(一)对象导论 1.1 抽象过程 万物皆对象. 程序是对象的集合(即:类),他们通过发送消息(调用方法)来告知彼此要做的. 每个对象都有自己的由其他对象所构成的存储(引用其他对象或基本类型,即组合). 每个对象都拥有其类型.每个类最重要的区别于其他类的特征就是“可以发送什么样的消息给它”(即调用方法). 某一特定类型的所有对象都可以接受同样的消息. 对象具有状态(成员属性).行为(成员方法)和标识(引用的名称).每个对象在内存中都有唯一的一个地址. 1.2 每个对象都有一个接

JAVA编程思想学习笔记——第一章 对象导论

搞了一年多java,野路子出身,发现java基础这块还是相当的薄弱!故决定学习<Java编程思想>这本书.在此把学习的知识点记录下! 面向对象的五大特性 1.万物皆为对象 2.程序是对象的集合,它们通过发送消息来告诉彼此所要做的 3.每个对象都由自己的由其它对象所构成的存储 4.每个对象都拥有其类型 5.某一特定类型的所有对象都可以接收同样的信息  单根继承结构 所有的类都继承自单一的基类,Object.在单根集成结构中的所有对象都具有一个公用接口,所以他们归根到底都是相同的基本类型.单根集成

java 编程思想 一 第二章(对象)

上班之余发现有很多空闲时间,享受生活 又觉得有点空虚,而且对自己的基础知识总觉得掌握的不是很牢固,有点似懂非懂的感觉,近来刚好有时间,所以就考虑继续学习,然后再经过考虑和各大博主推荐选择了<java编程思想>这本书,在此分享学习心得跟大家共勉,也算是对自己的监督吧.(本内容需要有一定的基础才能看,类似于基础回顾,强化理解,新手可能有些地方不太能听懂) 一.什么是对象? 这并不是我们男女朋友那种对象哈哈. 简言之:万事万物皆对象. 个人理解:我们所要处理的事务或者建立的某种模型的抽象总结.具体就

Java编程思想(第十一章持有对象)

1. 第11章 持有对象 java通过使用容器类来储存对象,与普通数组不同的是,普通数组的长度不可变. 1.1. 泛型与类型安全的容器 使用预定义的泛型,它指定了这个容器实例可以保存的类型,通过使用泛型,就可以在编译器防止将错误类型的对象放置到容器中. public class gerbil { private int gerbilNumber; public gerbil(int gerbilNumber){ this.gerbilNumber = gerbilNumber; } public

Java编程思想 - 第11章 持有对象

· 容器类: 1. Collection: List, Set, Queue 2. Map · List<Apple> apples = new ArrayList<Apple>(); 这种方式并非总能奏效,因为某些类具有额外的功能,例如,LinkList具有在List接口中未包含的额外方法,而TreeMap也具有在Map接口中未包含的方法.如果你需要使用这些方法,就不能将它们向上转型为更通用的接口. · Collection.addAll()成员方法只能接受另一个Collecti

Java编程思想(十六) —— 联系JVM再谈Class

编程思想这个专栏停了好久了,主要是把精力放在了其他知识上,现在继续补上. 前面两篇写到RTTI和简单的反射介绍,先回顾一下: RTTI,运行时类型信息,多态的应用,类型转换其实是发生在运行期间. Class对象: 编程思想讲到的定义,Java使用Class对象来执行其RTTI,类是程序的一部分,每个类都有一个Class对象,其实每编写和编译一个新类,就会产生一个Class对象,其实这个对象时被保存在同名的.class文件中的.生成这个类对象,其实是JVM(Java虚拟机)使用了"类加载器&quo

Java编程思想 4th 第2章 一切都是对象

Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情在类对象中完成. 在Java中,使用引用来操纵对象,在Java编程思想的第四版中,使用的术语是"引用(reference)",之前有读过Java编程思想第三版,在第三版中,使用的术语是"句柄(handle)",事实上,我觉得第三版的术语"句柄"更加形象传神,就像你用一个

Java编程思想(一)——一切都是对象

<Java编程思想> 作者:Bruce Eckel 虽然这本书是经典,但是对于一个入门java,又没有其他编程经验的人来讲,实在难以看懂,前前后后看了三遍. 第一次什么都不懂的时候硬着头皮看,没看完,看了前面忘了后面,中间很多看不懂.第二次的时候,看懂了很多,但是不知道经典在何处. 第三次,是自己用了这门语言一年后,知道所谓的经典是什么,java的特性都在这里,这书不是从基础的JDK怎么装开始讲起.,大部头的一本书,现代人的话很少去翻了,其实可以当参考书,看哪一部分忘了,直接温故即可.一次在学