JAVA编程思想(1)

 -“假设我们说还有一种不用的语言,那么我们就会发觉一个有些不同的世界”


1. 用引用操纵对象

       每种编程语言都有自己的数据处理方式。

有些时候,程序猿必须时刻留意准备处理的是什么类型。

您曾利用一些特殊语法直接操作过对象。或处理过一些间接表示的对象吗(C或C++里的指针)?

全部的这一切在JAVA里都得到了简化。在JAVA里一切都被视为对象,虽然是一切都被看成对象。但操纵的标识符实际上是一个“引用”而已。简单来说是:对象好比”电视“。我们拥有的引用是"遥控器",因此我们即使没有对象的真实存在,我们也能够拥有引用,也就说你能够拥有一个引用。而它并不须要和一个对象关联

如: String s;   

我们这里创建的仅仅是引用,并非对象,假设此时向s发送一个消息。就会返回一个执行错误。由于没有真正的对象与它关联。因此一个安全的做法是:创建一个引用同一时候进行初始化。

如: String s = "haha";

这里用到了Java语言的一个特性:字符串能够用带引號的文本初始化,通常,必须对“对象”採用一种更通用的初始化方法。


2. 必须由你创建全部的对象

(1) 一旦创建一个引用,就希望它能与一个新的对象相关联。通经常使用new操作符来实现这一目的。

如: String s = new String("haha");

----------------------------------------------------------------------------------------------------------------------------------------------------

(2) 程序执行时,有五个不同的地方能够储存数据

-寄存器:这是最快的存储区。由于它位于不同于其它储存区的地方——处理器内部。可是数量有限,所以须要进行分配。无法直接控制(还有一方面,C和C++同意你向编译器建议寄存器的分配方式)

-堆栈:位于通用RAM(随机訪问存储器)中。但通过堆栈指针能够从处理器那里获得直接的支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。分配储存方式效率仅次于寄存器

-堆:一种通用的内存池(也位于RAM),用于存放全部的对象。堆不同于堆栈的优点是:编译器不须要知道存储的数据在堆里存活多长时间。因此有很多其它的灵活性。能够方便创建对象。

可是因此付出的代价是:用堆进行存储分配和清理能够比用堆栈分配更须要时间(假设确实能够在Java中像在C++一样在栈中创建对象)

-常量存储:常量值通常直接存放在程序代码内部。这样做非常安全,由于它永远不会被改变

-非RAM存储:假设数据全然存活在程序之外。那么它能够不受程序的不论什么控制,在程序没有执行时也能够存在。

当中两个主要的样例是流对象和持久对象。在流对象中。对象转化成字节流。通常被发送到还有一台机器。在持久化对象中,对象被存放在磁盘上。因此即使程序终止了,它们仍然保持自己的状态。正如Java提供的对轻量级持久化的支持

----------------------------------------------------------------------------------------------------------------------------------------------------

(3) 特例:基本类型

-在程序设计中经经常使用到一系列类型,它们须要特殊对待,能够把他们想象成“基本”类型。

之所以特殊对待,是由于new将对象存储在“堆”里,故用new创建一个对象——特别是小的。简单的变量。往往不是非常有效。因此,对于这些类型。Java採用和C和C++同样的方法,也就是不用new来创建变量。而是创建一个并非是引用的“自己主动”变量。

这个变量直接存储“值”并置于堆栈中,因此更加有效

-Java要确定每种基本类型所占存储空间的大小。它们的大小并不像其它大多数语言那样随机器硬件架构的变化而变化这样的所占空间大小的不变性是Java程序比其它大多数语言编写的程序更具可移植性的原因之中的一个。

----------------------------------------------------------------------------------------------------------------------------------------------------

(3) Java中的数组

-差点儿全部的程序设计语言都支持数组,在C和C++中使用数组是危急的。由于C和C++中数组就是内存快。假设一个程序要訪问其内存块之外的数组,或在数组初始化前使用内存。都会产生难以预料的后果。

-Java的主要目标之中的一个是安全,所以Java确保数组会被初始化。并且不能在它的范围之外被訪问。这样的范围检查,是以每一个数组上少量的内存开销及执行时的下标检查为代价换来安全性和效率的提高。

-当创建一个数组对象时,实际上就是创建一个引用数组。并且每一个引用都会自己主动被初始化为一个特定值。该值拥有自己的keywordnull。一旦Java看到null,就知道这个引用还没有指向某个对象,试图使用一个null引用是会造成执行错误的。对于基本类型的数组,Java会为这样的数组所占的内存全部置0


3. 永远不须要销毁对象

-大多数的程序设计语言中,变量的生命周期的概念,占领了程序设计工作中非常重要的部分。

(1) 作用域

作用域决定了在其内定义的变量名的可见性和生命周期。

在C和C++以及Java中,作用域由花括号决定的。

{
    int x = 12;
    // only x available
    {
         int q = 36;
         //both x & q available
    }
    //only x available
    // q is "out of scope"
}
还有在Java中不同意重命名

{
    int x = 12;
    {
         int x = 96;   //  Illegal
     }
}
(2) 对象的作用域
Java对象不具备和基本类型一样的生命周期。当用new创建一个对象时,它能够存活于作用域之外

{
    String s = new String("a string");
} // End of scope
引用s在作用域终点就消失了。然后,s指向的String对象仍继续占用内存空间。

我们无法在作用域之后訪问消失的对象引用。

-事实证明,由new创建的对象,仅仅要你须要,就会一直保留下去。这样,很多C++编程问题在Java就全然消失了。

我们不必在像在C++一样:实时关注我们的对象。

在Java中有一个“垃圾回收器”来监视用new创建的对象。一旦不再须要了,它们就会被回收。这样做就消除了这类编程问题(即:内存泄露)。


【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/ldxsuanfa/p/10884552.html