作为java编程的圣经,有必要看看,总结一下,不只是应付面试,对自己的成长也有必要。
第一章:对象导论
1、访问控制存在的原因:让客户端程序员无法触及他们不该触及的部分;允许设计者可以改变内部的工作方式
2、继承,可以覆盖基类已有的方法,增添新的方法。
继承的关键字:向上转型,多态
3、异常处理:java内置了异常处理,而且强制你必须使用它
第二章一切都是对象
重点1:类的名字必须与文件名相同,如果创建一个独立运行的程序,那么文件中必须存在某个类与该文件同名(否则、编译器会报错),且那个类必须包含一个名为main()的方法。
单独运行:javac Hello.java 不报错的话:java Hello
重点2:Java代码风格:类名的首字母要大写;如果类名由几个单词构成,那么把它们并在一起(即,不要用下划线来分隔名字),其中每个内部单词的首字母都采用大写形式。也有第一个字母采取小写的。
1、java内存如何分配
1)寄存器:位于处理器内部最快的存储器
2)堆栈:位于RAM中,堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存。在创建程序时,Java编译器必须知道存储在对站内的所有数据的确切大小和生命周期。
3)堆:位于RAM,用于存放所有的Java对象。
4)静态存储:也在RAM里,但是存在“固定位置”
5)常量存储: 可以存在ROM中(只读寄存器)
6)非RAM存储:
2、8bit(位)=1byte(字节)=0.5个字
char 16bit,short 16bit,int 32 bit,float 32 bit,double 64 bit,long 64 bit,long long
3、static关键字
1)可以把类的某个成员设定为static
class StaticTest{
static inti=47;
}
即使创建了n个对象,Static.i也是只有一份,同时你可以StaticTest.i++调用
2)可以把类的方法设定为static
class StaticFun{
static void incr() {StaticTest.i++;}
}
可以直接调用:StaticFun.incr()
4、java编码风格
代码风格:类名耳朵首字母要大写,如果类由几个单词构成,那么把它们并在一起,即不要用下划线来分割名字,其中每个内部单词的首字母都采用大写形式给。几乎所有的内容,方法、字段(成员变量)以及对象引用等,编码风格都与类的风格一致,只是标识符的第一个字母采用小写。
第三章:控制程序流程
1、前缀递增会先执行运算,再生成值;后缀递增是先生成值再执行运算
2、基本类型判断是否相等的时候,可以用==和!=,如果是比较对象是否相等,则应该用 lei1.equals(lei2),返回boolean变量
3、逻辑操作符: 与(&&),或(||),非(!)
4、java没有sizeof()
3.2执行流程控制
1、java不允许我们将一个数字作为布尔值使用,但是在C或者C++里是可以的,例如C中可以if(a),但是在java里要写成if(a!=0)
2、多个判断条件的话,如果是用return返回结果,怎可以不用else,因为return之后就不执行了
3、for循环: for(initiallization;Boolean-expression;step)
statement;
eg:for(int i=0,j=1;i<10&&j!=11;i++;j++)
在这里有个知识点:逗号操作符 不是逗号分隔符,逗号作分隔符时用来分隔函数的不同参数,java里唯一用到逗号操作符的地方就是for循环的控制表达式。
4、break和continue
break用于强行退出,不执行循环中剩余的语句,而continue则停止执行当前的迭代,然后退回循环起始处,开始下一次迭代。
5、将一个float或double值转型成整数后,总是将小数部分砍掉(而不是四舍五入),Math.random()会产生[0,1)。
第四章 初始化与清理
1、如果没有定义构造函数,创新新对象的时候回调用其缺省构造器,但是如果你已经定义了构造器,编译器就不会帮你自动创建缺省构造器。
2、this可以调用构造函数,但是却不能够调用两个,而且构造函数的调用必须放在最起始处。除了构造器之外,编译器禁止在其他任何方法中调用构造器。
3、在java中,对象可能不被垃圾回收,垃圾回收并不等于“析构“;因此在类定义中有名为finalize()方法,这个不是析构函数,但是可以在垃圾回收时调用finalize().
无论是”垃圾回收”还是“终结“,都不能保证一定会发生。如果Java虚拟机并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收的。
4、垃圾回收(GC)采用”引用记数“回收技术,但是如果对象之间存在循环引用,就会出现该回收,但是计数却不为零。
5、JAVA尽力保证,所有变量在使用前都能得到恰当的初始化。初始化也是有先后顺序的,在需要调用之前先定义、初始化
6、静态代码块和静态对象只会在最开始的时候初始化一次,且静态初始化只会在必要时刻进行
第五章 隐藏具体实现
1、package和import用于解决名称冲突问题
2、取得对某成员的访问权的唯一途径是:
1)使该成员成为public
2)通过不加访问权限修饰词并将其他类放置于同一个包内的方式给成员赋予包访问权
3)提供访问器(accessor)和变异器(mutator)(也称为get/set方法)
3、Protected访问权限,是为了使继承他的类可以使用该函数
4、如果没能为类访问权限指定一个访问修饰符,他就会缺省得到包访问权限,意味着该类的对象可以由包内任何其他类来创建,但是包外则不行。然而,如果该类的某个static成员是public的话,则客户端程序员仍旧可以调用该static成员。
为了继承,一般的规则是将所有的数据成员都指定为private,将所有的方法指定为public
第六章 复用类
1、final通常是指:无法改变的,使用final的三种情况:数据、方法和类
1.1final数据
用于:1)一个永不改变的“编译时常量” 2)一个在运行时被初始化的值,而你不希望它被改变
这类常量必须是基本数据类型,并且以关键字final表示,在对这个常量进行定义时,必须对其进行赋值
一个既是static又是final的字段只占据一段不能改变的存储空间
对于基本类型,final使数值恒定不变,而用于对象引用,final使引用恒定不变,即不能改为指向另一个对象,但是对象其本身却可以修改
带有恒定初始值(即,编译时常量)的final static基本类型全用大写字母命名,并且字与字之间用下划线隔开。
1.1.1 空白final
可以根据对象而有所不同,却又保持其恒定不变的特性
1.1.2 final参数
Java允许在参数列表中以声明的方式将参数指明为final,意味着你无法在方法中更改参数引用所指向的对象:
int g(final int i) {return i+1} 可以读参数,但是无法修改参数
1.2final方法
当一个方法指明为final,即同意编译器将针对该方法的所有调用都转为内嵌调用
final方法也是防止任何继承类修改它的含义
1.3final类
当某个类的整体定义为final时,就表明你不打算继承该类,而且也不运用别人这么做
所有的Static对象和static代码都会在加载时依程序中的顺序依次初始化,当然,只会被初始化一次