Java基础第一章---一切都是对象

文章来自《java编程思想》的读后感。


1.用引用操纵对象

说明:每种语言都有操纵内存中的元素的方式。java中采用的是采用引用来操纵对象。

           声明一个引用:  String s;每当我们声明一个引用就希望它能指向一个对象


2.如何创建对象

说明:每当我们创建一个引用就希望,就希望他与一个对象相关联。通常采用“new”关键字来是实现。new关键字的意识是给我一个“新对象”。

创建一个对象,并将它与引用相关联 : String  s=new String(“asd”);

提示:关键字new不是唯一创建对象的方法,反射中可以采用别的方法来创建对象。



3.存储(对象的存储,引用的存储等等)

3.1寄存器:位于处理器内部,存储空间很小,存取速度对快,内存由处理器自动分配,java语言无法直接控制。

3.2栈内存:位于通用的RAM (随机访问存储器)。栈指针可以在处理器哪里获得直接支持.指针向下移动分配新内存,指针想上移动释放内存。这是一种高效的内存分配与回收的方式,效率仅此与寄存器。但是java系统必须知道栈内存中所有的项的确切生命周期,以方便指针上下移动,限制了程序的灵活性。

解析:栈指针可以在处理器哪里获得直接支持:可以直接与处理器进行交互,这是内存对处理器的门户。栈内存中存储的项目包括引用和基本数据类型(一会说为什么基本数据类型也存储在栈内存中)。上面说过java中采用引用来操纵对象,而对象存储在栈内存中,可以直接获得处理的支持,这形成了一个控制链。处理器--引用--对象。既然对象和基本数据类型都存储在栈内存中,那么它们的生命周期是如何明确的?后面会进行解析。


3.3堆内存:一种通用的内存池,位于RAM中。用于存放所有java对象。

堆内存不同与栈内存:编译器不需要知道存储在堆内存中元素的确切的生命周期,这给对象带来了很大的灵活性。当我们通过new一个关键字创建一个对象的时候就会进行堆内存的分配。内存的回收是java的垃圾回收机制,后面会进行了解。这种灵活性会带来效率的降低。

解析:new关键字在创建对象的时候,现在我们知道会进行内存分配,并返回一个指向自己的引用,但是用new关键字来创建对象的,编译器背后执行的工作量远不止这些,在后面的继续了解会继续进行了解。

3.4常量存储:常量通常会直接存储在程序代码内部,这样是安全的,他们永远不会变。有时在嵌入式系统中,常量会与其他部分分开。说以这种情况向可以选择将其放在ROM(只读存储器)中。

解析: 什么是常量?什么样的常量会存储在程序代码内部?存储在程序代码内部是否需要加载到内存中再使用?等等问题在继续学习中会得到解答

3.5非RAM存储:如果数据完全存活在程序之外,那么它们不受程序的任何控制。程序没有运行的时候也可以存在。两种基本类型一种是流对象:将对象转化成字节流送给另一台对象。持久化存储(Android中持久化存储)对象存放与磁盘上。

解析:字节流:这是后面专门一章讲的I/O流。持久化存储:在Android中可以存储在不同位置,也需要不同的权限,当然还有数据库。


4.基本数据类型:

基本数据类型大家都知道,也都在使用,只说一个问题,为什么将基本数据类型直接保存在栈内存,而不是采用引用--对象的方式来进行控制?

答:是因为通过new关键字创建一个对象放在堆里里面,对于特别小的,简单的变量往往不是很有效,而基本数据类型应用特别频繁,所以java采用了与C++相同的方式,不通过new来创建变量,而是直接创建一个非引用的“自动”变量。这个变量直接存储“值”,并置于栈中,因此更加高效。


5.引用,基本数据类型,对象的生命周期:

5.1变量(基本数据类型和引用)的生命周期:

前面说到存储在栈内存中的元素都必须有确切的生命周期,那么基本数据类型和引用是存在栈内存中,它们的生命周周期是如何确定的呢?

作用域:决定其内定义的变量和引用的可见性和生命周期。作用域采用花括号的位置来确定。

所以:变量的生命周期在创建的时候为开始(栈指针向下移动分配内存),在作用域结束的时候变量的生命周期结束(栈指针向上移动释放内存)。也就是说变量只能用于作用域结束之前。

解析:当变量的类型为基本型别(short, byte, int, long, float, double, boolean, char)时,变量的内容是一个值;当变量的类型为 Object 及其子类时,变量的内容是指向一个对象的引用。

5.2对象的生命周期

对象的生命周期与作用域没有直接关系,当对象超出了作用于,对象依然存在。当通过new关键字来创建对象的时候,对象的生命周期开始的时候。

那么问题来了,对象是什么时候被释放的呢?在下一章对象的初始化于清理中会说到,也会说到几种垃圾回收方法:计数法,标记-清除等垃圾回收模式。


6.创建新的数据类型:类

类使用来描述对象的外形和行为的。类的创建Class关键字。

成员变量,方法。成员变量会涉及到默认初始化,以及其他初始化方法。方法涉及到构造器,方法的重载。等都会在下一章初始化与清理中说到。

方法的签名:方法名和参数列表合起来的名称是方法的签名,也是方法的为唯一标识。

这与方法的重载有一定联系,在下一章会说到。

6.1类名的唯一性:

在创建类的时候,我们需要保证类名的唯一性,为什么要保证类名的唯一性?

这与类的加载机制有关,编译器会根据类名去寻找与之同名的.class文件,进行加载。如果类名相同,那么编译器将不会知道需要将在那个.class文件了。

在创建类的时候,我们经常会应用第三方框架,我们不知道框架中的类名,如何保证自己的类名与第三方的控件的类名不重复呢?

java采用反转域名+类名(包名+类名)  构成完整类名。在java2中将包名限制为全部为小写,android中包名也全是小写。这样我们只要保证包名的唯一,就能保证类名与其他框架的类名不冲突。

当我们具有了完整的类名,那么当我们声明类的引用的时候就需要执行完整的类名,java中具有两种方式进行指定完整域名的问题:

1.是同过import关键字进行导包,然后再声明的时候直接使用类名,然后编译器就会在导入的包中寻找对应的.class文件。(当一个包中有多个类,并且我们要用其中的几个,并不想一一声明可以使用通配符“*”,这是一次导入一个类群的方式,更常用)

2.采用完整类名进行进行声明,这种法发折用起来麻烦,且不美观。

那么问题来了,加入在我import ne.com*包中有一个LaunchID类,同时her.it包中也有一个LaunchID类,并且我两个类都想使用的时候怎么办?

那么就需要一个采用import方式声明,一个采用全类名来生命。或则都是用全类名类声明。(不能都是用import来导入,这样会有问题)


6.2 static关键字:

当我们创建类的时候,就是在描述那个类的对象的外观(成员变量)与行为(方法)。除非用new创建那个类的对象,否则实际并未获得任何对象。只有执行了new来创建对象时,数据存储空间才被分配,其方法才供外界调用。

有两种情况上述方法无法解决:一种情形是,只想为某特定域分配单一存储空间,而不考虑究竟要创建多少个对象。甚至根本就不创建对象。另一种是希望某个方法,不予包含它的类的任何对象关联在一起。也就是说没有创建对象,也能够调用这个方法。

static可以满足这两方面的需求。当一个域声明为static,就意味着则会域不会与包含她的那个类的任何对象关联在一起。

static修饰方法或则变量,表示这个方法或则变量是属于类的,而不是对象。或则说是这个类产生对象所共有的。

解析:Static是以关键字可以修方法也可以修饰域也可以是内部类(后面会说到)。Static修饰的元素,是属于类,并且只加载一次(单利模式会用到这个属性)。

那么问题来了,既然说没有创建对象,也能够调用这个方法,那么static修饰的方法或则域是什么时候加载的呢?又是如何加载的呢?它的加载与对象的加载又有什么关系呢?

它又是什么时候被销毁的呢?


7.注释

注释一定要写


java中两种注释风格,一种是传统的C语言风格注释

说明:这种注释风格是以“/*”开头,随后是注释内容,并可以跨越多行,最后一“*/”结束。

提示:很多程序员在连续注释内容的每一行都以一个"*"开头,这种可以看以来格式更整齐,但是进行编译的时候"/*"与"*/"之间的说有东西都会被忽略,所以每行以"*"开头的*也会被忽略。

第二种是以//开头的单行注释

7.1注释文档:javadoc是用于提取注释的工具,是jdk的一部分(AndroidStudio也可以自动生成注释文档),它采用了Java编译器的某些技术,查找程序内的特殊注释标签。解析生成文档。

使用注释文档的语法说明:

所有javadoc命令都只能在“/**”注释中出现并以“*/”结尾。使用javadoc的方式主要有两种:嵌入式HTML,文档标签。

共有三种类型的注释文档:类,域,方法。类的注释正好位于定义类之前。域注释正好位于域之前。而方法注释也这个好位于方法定义的钱前面。


大概第一章作者就理解了这些,都是文字,很少有代码和图片,看起来可能会很枯燥。有错误请给予提示,必当改正。谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容