《THINKING IN JAVA》随笔

来源:互联网 发布:火眼金睛答题软件使用 编辑:程序博客网 时间:2024/06/05 03:01


关于程序设计语言的思考


1.程序设计是干嘛的?

程序设计是对复杂性的管理:待解决问题的复杂性,以及用来解决该问题的工具的复杂性。这个管理又包括什么呢??看完这本书再来回答这个问题吧。

2.JAVA的作用

JAVA是为程序员减少复杂性的编程语言,提升程序员的生产率,如跨平台编程,动态代码修改,安全,网络编程等问题。JAVA提升了人们互相通讯的宽带,让编程,teamwork,交互界面,跨平台,网络编程变得容易了。

3.现在的学习编程语言就是在在脑海中创建一个模型,以后再遇到问题,就将这个问题带入模型中去推断。

4.编程语言是对机器的模仿。是头脑延伸的工具。人们能够解决的问题的复杂性直接取决于抽象的类型和质量,实际解决问题的时候要基于计算机结构而不是待解决问题的结构来考虑。因此,要对这种机构和处理机制有一定的了解。


第一章  对象导论


对象的五个基本特征:

1.万物皆为对象

2.程序时对象的集合

3.每个对象都有自己的由其他对象所构成的存储

4.每个对象都拥有其类型

5.某一特定类型的所有对象都可以接收同样的消息


简洁一点就是对象具有状态(内部数据),行为(方法)和标识(唯一的)。


第二章  一切都是对象


一切都视为对象,操纵的对象只是对象的一个引用。

成员变量会有初始化的默认值,局部变量初始化时需要赋值。

GC回收的时候会回收内存中那些没有被引用的对象。


Java会给基本数据类型的成员变量分配默认值,例如  private int x; x默认值为0, 在局部变量中并不一定能狗初始化为0,因此,局部变量要手动初始化。

C或者C++中,会用函数来命名子程序,Java 中习惯用方法类命名,通过对象来调用方法(方法实现在该对象类的内部),方法听起来更像是做某种事情的方式,更贴近于自然语言。


static关键字意味着该事物不会与包含他的那个类的任何对象关联在一起,即不用创建这个对象也能直接调用这个事物。

例如,System.out.println()。System是一个类,out是这个类里面一个静态成员变量PrintStream的成员变量名称,println是这个成员变量所属的类里面的方法。


问题:方法中参数传的是值还是地址??基本数据类型传的是值(字符的共享池,避免重复),对象参数传的是引用地址。还有一种特殊情况,String。

String 有两种创建方式,双引号的和new的。双引号创建时,无论String的字面值(双引号)被用了多少次,始终只有一个地址被分配,这叫做“字符串驻留(String interning)”。所有的字符串在编译之后都会驻留,双引号创建方式会查看这个引号内的东西在字符串池中有无驻留,有的话直接返回PermGen中的该String对象,否则就创建个String对象,然后再加入字符串池中。JVM里,考虑到垃圾回收机制(GC)的方便,将heap分为三部分,新生代(young generation),旧生代(old generation),永久代(permanent generation )字符串池是为了解决字符串重复的问题,生命周期长,它存在于permanent中。编译java源代码是,源文件中出现的双引号内的字符串都被收纳到常量池中,用 CONSTANT_utf8_info项存储着。

JVM中,相应的类被加载运行后,常量池对应的映射到JVM的运行时常量池中。其中CONSTANT_utf8_info(也就是试记录那些字符串的)都会在常量引用解析时,自动生成

internal string,记录在字符串池中。

用new创建的String对象,会在heap中为其分配新的内存,字符串常驻机制仍然在运行,但是没有调用,如下:

String a = "abc";

String b = new String(abc).intern();

这样就调用了字符串驻留机制里面的abc  a == b为true。尽量在平时使用双引号来初始化String  而不是new。

比较两个变量, ==是比较变量的值(如果变量是地址引用,则比较地址),equals可以比较引用的具体内容(地址所指向的具体值),但不适用于基本类型的比较。基本类型使用==   !=即可。equals的默认行为仅仅是比较地址,而不是里面的值,所以一些没有覆盖equals方法的类,比较的仍然是地址而不是地址所指向的值。


生成注释文档javadoc命令:使用方式主要有两种,嵌入html(插入html标签代码)或使用文档标签(注释中@开头的命令)。javadoc只会为public和protected的类型注释,private会自动忽略掉。

0 0