首页 > 编程语言 >Java编程思想1

Java编程思想1

时间:2022-12-22 13:34:23浏览次数:40  
标签:存储 Java 思想 对象 编程 println 操作符 堆栈

第一章:对象导论
  这一章主要是帮助我们了解面向对象程序设计的全貌,更多是介绍的背景性和补充性的材料。其实萌新应该跳过这一章,因为这章并不会去讲语法相关的知识,当然可以在看完这本书后续章节后,再来回看这一章,这样有助于我们了解到对象的重要性,以及怎样使用对象进行程序设计。

​ Alan Kay曾经总结了第一个成功的面向对象语言、同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了一种纯粹的面向对象的程序设计方式:

万物皆为对象。理论上讲,你可以抽取待求解问题的任何概念化构件(狗、建筑物、服务等),将其表示为程序中的对象。
程序是对象的集合,它们通过发送消息来告知彼此所要做的。要想请求一个对象,就必须对该对象发送一条消息。更具体的说,可以把消息想象为对某个特定对象的方法的调用请求。
每个对象都有自己的由其它对象所构成的存储。换句话说,可以通过创建包含现有对象的方式来创建新类型的对象。
每个对象都拥有其类型。按照通用的说法,“每个对象都是某个类(class)的一个实例(instance)”,每个类最重要的区别与其他类的特性就是“可以发送什么样的消息给它”。
某一特定类型的所有对象都可以接受同样的消息。
第二章:一切都都是对象
用引用操纵对象
  每种编程语言都有自己操作内存中元素的方式。有时候,程序员必须注意将要处理的数据是什么类型,你是直接操纵元素,还是用某种特殊语法的间接表示(例如C/C++里得指针)来操作对象?

  所有这一切在Java里都得到了简化。一切都被视为对象,因此可采用单一固定的语法。尽管一切都看作对象,但操纵的标识符实际上是对象的一个"引用"(reference)。可以将这情形想像成用遥控器(引用)来操纵电视机(对象)。只要握住这个遥控器,就能保持与电视机的连接。当有人想改变频道或者减小音量时,实际操控的是遥控器(引用),再由遥控器来调控电视机(对象)。如果想在房间里四处走走,同时仍能调控电视机,那么只需携带遥控器(引用)而不是电视机(对象)。
此外,即使没有电视机,遥控器亦可独立存在。也就是说,你拥有一个引用,并不一定需要有一个对象与它关联。

存储到什么地方
  程序运行时,对象是怎么进行放置安排的呢?特别是内存是怎样分配的呢?对这些方面的了解会对你有很大的帮助。有五个不同的地方可以存储数据∶
1)寄存器。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象(另一方面,C和C++允许您向编译器建议寄存器的分配方式)。
2)堆栈。位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动、则释放那些内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些Java 数据存储于堆栈中–特别是对象引用,但是Java对象并不存储于其中。
3)堆。一种通用的内存池(也位于RAM区),用于存放所有的Java对象。堆不同于堆栈的好处是∶编译器不需要知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当需要一个对象时,只需用new写一行简单的代码,当执行这行代码时、会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代价∶用堆进行存储分配和清理可能比用堆栈进行存储分配需要更多的时间(如果确实可以在Java中像在C++中一样在栈中创建对象)。
4)常量存储。常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分隔离开,所以在这种情况下,可以选择将其存放在ROM(只读存储器)中。
5)非RAM存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是流对象和持久化对象。在流对象中,对象转化成字节流,通常被发送给另一台机器。在"持久化对象"中,对象被存放于磁盘上,因此,即使程序终止,它们仍可以保持自己的状态。这种存储方式的技巧在于∶把对象转化成可以存放在其它媒介上的事物,在需要时,可恢复成常规的、基于RAM的对象。java提供了对轻量级持久化的支持,而诸如JDBC和Hibernate这样的机制提供了更加复杂的对在数据库中存储和读取对象信息的支持。

第三章:操作符
本章的内容比较基础,主要讲了赋值、算数操作符、关系操作符、逻辑操作符、按位操作符、移位操作符、三元操作符等基础知识。本章只是记录下递增和递减的相关知识。

自动递增和递减
递增和递减操作符不仅改变了变量,并且以变量的值作为生成的结果。这两个操作符各有两种使用方式,通常称为前缀式和后缀式,对于前缀递增和前缀递减(假设a是一个int值,如++a或–a),会先执行运算,再生成值,而对于后缀递增和后缀递减(如a++或a–),会先生成值,在执行运算,下面是一个例子:

public class AutoInc {

public static void main(String[] args) {
int i = 1;
System.out.println("i: " + i); // 1
System.out.println("++i: " + ++i); // 执行完运算后才得到值,故输出2
System.out.println("i++: " + i++); // 运算执行之前就得到值,故输出2
System.out.println("i: " + i); // 3
System.out.println("--i: " + --i); // 执行完运算后才得到值,故输出2
System.out.println("i--: " + i--); // 运算执行之前就得到值,故输出2
System.out.println("i: " + i); // 1
}
}

总结:对于前缀形式,我们在执行完运算后才得到值。但对于后缀形式,则是在运算执行之前就得到值。

标签:存储,Java,思想,对象,编程,println,操作符,堆栈
From: https://www.cnblogs.com/LvJinshuai/p/16998350.html

相关文章

  • Java编程思想2
    第四章:控制执行流程  本章介绍了大多数编程语言都具有的基本特性:运算、操作符优先级、类型以及选择和循环等。例如布尔表达式、循环如while、do-While、for、分支判断如i......
  • Java编程思想3
    第六章:访问权限控制  本章讨论了类是如何被构建成类库的:首先,介绍了一组类是如何被打包到一个类库中的;其次,类是如何控制对其成员访问的。在Java中,关键字package、包的命名......
  • JavaScript原生代码处理JSON的一些高频次方法合集
    letjson={/**判断JSON格式*/isJSON:function(str){if(typeofstr=="string"){try{varobj=JSON.parse(str);......
  • Java重点 | Collection集合
    Collection集合概述什么是集合?有什么用?数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。集合为什么说在开发中使用较多?集合是一个容器,......
  • 订阅本专栏将获得全部50道编程题
      自即日起,面向对象程序设计入门编程题将作为订阅付费项目,对应文件内有全部50道题的PDF文件一份,以及对应的参考程序,题目完整。  如果博友们对前29道题产生疑问,请至对应......
  • JAVA垃圾回收器与垃圾回收算法
    查看当前垃圾回收器类型命令java-XX:+PrintCommandLineFlags-versionjps+jinfo:先使用jps查看java进程号,在使用jinfo查看该进程的配置评估垃圾回收器性能时,重点关注......
  • java中的多态
    多态中,编译看左边,运行看右边不多逼逼,直接上代码。代码:(我觉得我们老师给的代码好归好,但不太容易理解,我就私自改了点,顺眼多了)classParent{publicintmyValue=100;//Par......
  • JavaScript Date 对象知识点复习
    复制单个代码控制台运行看结果从Date对象返回一个月中的某一天(1~31)。console.log("newDate().getDate()"-----------,newDate().getDate())从Date对象返......
  • Java学习笔记6
    1.类和对象1.1类和对象​ 客观存在的事物皆为对象,所以我们也常常说万物皆对象。类:类的理解类是对现实生活中一类具有共同属性和行为的事物的抽象类是对象的数据......
  • 如何通过Java提取PDF中的图片
    PDF文档格式具有固定的文档布局,可以避免他人对其进行随意更改。但这也在一定程度上影响了我们对PDF的操作,例如,当我们需要将PDF文档中的图片用于其他地方时。​​FreeSpire.......