thinking in java 第二章笔记及思考:初识 对象

  做这个笔记考虑了好几次,一直犹豫是否应该分享一下自己的学习心得,还是决定分享一下。
  当然思考最重要,也是用问题引出见解,与书差不多相同的模式,本笔记只挑新奇晦涩难懂的知识,比较简单的忽略。更是加入了自己的一些见解。
  如果你有幸看到这个系列博客,如果你能认真看我的思考,是我的幸运。如果你能有相关的疑惑,那可真是同道中人。

1.java 是一种更纯粹的面向对象的语言的悖论?(或者说java是完全面向对象的语言的悖论)
反方:java不是一种纯面向对象的语言。
  类中的静态变量和静态方法不依赖对象而存在。只需要存在类,不需要生成任何对象,就可以直接用类名调用静态方法和静态成员变量。因此说java是纯面向对象的语言不妥。
正方:java是纯面向对象的语言。
  JVM在创建对象的时候会创建两个对象,一个是.class对象,一个是实例对象。.class对象只会装载一次,他的静态成员也会一同装载。可以看出静态成员依赖.class对象。生成实例对象的时候是用.class来生成(这是“源”对象【只在第一次调用的时候生成】,调用“源”对象中的静态成员。以后每次需要生成对象的时候都会用这个.class来生成新的对象。)

2.引用的重要性:在堆中创建了一个实例对象,怎么使用它?
  引用指向对象,对对象的操作体现在引用上。对象存在堆内存中,引用存在于栈内存中。引用只有指向了对象才有意义。所以一般需要赋初值。
  成员变量可以不需要赋初值,这是因为在生成一个类的时候他会初始化内存,初始化成员变量(如:int a; a默认值为0)。而局部变量却不会被自动初始化,需要手动赋初值,不然没法编译通过。

3.存储数据的地方有哪些?
  寄存器、栈、堆、常量存储、非RAM存储。
  寄存器
  优点:存取速度最快(因为其存在于处理器内部)
  缺点:数量有限,按需分配
  
  优点:存取只比寄存器慢(位于RAM中,一般的引用存在于栈)
  缺点:缺少灵活性(存储的数据需要知道其具体的生命周期)
  
  位于RAM中,一般称为对象池,用于存放所有的java对象,
  优点:灵活性好(编译器不需要知道存储数据的生命周期)
  缺点:清理内存的时候比栈需要花费更多的时间
  常量存储
  常量存放在程序代码内部
  非RAM存储
  流对象、持久化对象

4.基本数据类型存在于堆栈中,但是他们的值为什么也在堆栈中?
  栈用来存储基本数据类型。
  基本数据类型类似于引用,引用指向对象,引用存在于栈内存中,实例对象存在于堆内存中,照理说基本数据类型也应该存在于栈中,它的值应该存在于堆中。
  一个实例对象带有很多的信息(一般情况下),而基本数据类型呢?他的类型简单,信息量少,很多时候可以根据其作用域确定他的生存周。栈的存取效率要高于堆,且这样做减少了在堆中再开辟内存存储基本数据变量的值。

5.java 在这一章与C++的区别?
安全性:例如数据使用之前要初始化(不然会编译报错),越界会报错(运行时异常)
增加垃圾回收机制:使用对象之后不需要清理对象
内存超过一个阈值,JVM就会启动垃圾回收机制来清理内存(不再使用的对象)。如果想手动清理,可以用finalize()方法,finalize()只是标记这个对象将会被清理,并不意味着立刻会被清理,只有垃圾回收机制运行的时候才会清理。
类的成员变量会自动赋初值。

6.方法两个新奇概念
  方法名跟参数列表合称为方法签名。
  调用方法的行为通常称之为发送消息给对象。
  引入静态方法的时候: import static 包名.类命.方法名

7.static 关键字
  为某一特定域分配单一纯初空间,而不去考虑究竟要创建多少对象,甚至根不能不需要创建对象。那么这个域是依赖于类的,而不是依赖于对象,用static,这个域称之为类数据或类方法。

8.java 关键字53个(包含goto、const两个保留字),另有一个说话说java关键字有50个,true、false、null不是关键字。不过说有53个关键字的居多,我也很疑惑,希望了解确切根源的能解一下惑(当然要有理有据,不能空对空开射)。

                                                2018.8.20
                                                于 上海 静安

猜你喜欢

转载自blog.csdn.net/u010986518/article/details/81870783