java基础知识整理(java编程思想1-6章)

来源:互联网 发布:淘宝网信鸽保健砂 编辑:程序博客网 时间:2024/05/22 18:23

// 注释:源于现在已经快是大四了,到现在为止,学习编程也没多久,课堂在上自学,知识点实在是碎片化。加之自己   //又没有实际项目经验,现在都不知道自己学了些什么东西。于是开始整理所学知识碎片,也当作是笔记,方便自己查   //阅。最近在读《java编程思想》巩固,就以这个开始,逐步把自己学过的知识加以整理。主要记录可能会忘记的或者是比   //较重要的。已经掌握不会忘记的类容忽略

《java编程思想》第二章:一切都是对象

main()方法的参数是一个String对象的数组。在这个程序中并未用到args,但是java编译器要求必须这样做,因为args要用来存储命令行参数。

《java编程思想》第三章:操作符

一元加减操作符:一元减号用于转变数据的符号,而一元加号知识为了与一元减号相对应。但是它唯一的作用仅仅是将叫较小的类型的操作数提升为int。

//: operators/Equivalence.javapublic class Equivalence {  public static void main(String[] args) {    Integer n1 = new Integer(47);    Integer n2 = new Integer(47);    System.out.println(n1 == n2);   //比较的是对象的引用,而不是数值    System.out.println(n1 != n2);  }} /* Output:false   //n1,n2不是指向同一个对象,所以错true*///:~

注意:equals()的默认行为比较的是引用,所以除非在自己的新类中覆盖equals()方法,否则不可能表现出我们希望的行为。

大多数java类库都实现了equals()方法,以便用来比较对象的内容,而非比较对象的引用。


短路:当我们使用逻辑操作符时,我们会遇到一种“短路”现象。即一旦能够明确无误的确定整个表达式的值,就不再计算表达式余下的部分了。


java允许我们把任何基本数据类型转换成别的基本数据类型,但布尔型除外,后者根本不允许进行任何类型的转换处理。(与C++不一样)


在将floating或double转型为整型值时,总是对该数字执行截尾。如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。


如果对基本数据类型执行算术运算或按位运算,只要类型比int小(即char,byte,short),那么在运算之前,这些值会自动转换成int,运算的结果自然也是int。


《java编程思想》第四章:控制执行流程

switch要求使用的一个选择因子,并且必须是int或char那样的整数值。例如,假若将一个字符串或者浮点数作为选择因子使用,那么它们在switch语句里是不会工作的。
  
switch(x){      case:     case}

其中x必须是int或char那样的整数值。


《java编程思想》第五章:初始化与清理

在java中,“初始化”与“创建”捆绑在一起,两者不能分离。

方法重载中,甚至参数顺序的不同也足以区分两个方法。(当然,尽量不要这样,不好读)

涉及基本类型的重载

如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升。char型略有不同,如果无法找到接收char参数的方法,就会把char直接提升至int型。


在static 方法内部,不能调用非静态方法。


java垃圾回收机制中方法finalize()方法,工作原理:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用finalize()方法,并且下一次垃圾回收动作发生时,才会真正收回对象占用的内存。所以要是你打算用finalize(),就能在垃圾回收时刻做一些重要的清理工作。


如果java虚拟机(JVM)并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以恢复内存的。


当它工作时,将一面回收空间,一面是使堆中的对象紧凑排列。

通过对对象重新排列,实现了一种高速的,有无限空间可供分配的堆模型。


java尽力保证:所有变量在使用前都能得到恰当的初始化。


无法阻止初始化的自动进行。


在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。


static关键字不能作用于局部变量,因此它只能作用于域。


显示的静态初始化

静态子句(静态块):(static关键字后面花括号中的代码)

//: initialization/Spoon.javapublic class Spoon {  static int i;  static {    i = 47;   //静态代码块  }} ///:~

与其他的静态初始化动作一样,这段代码仅执行一次:当首次生成的这个类的一个对象时,或者首次访问属于那个类的静态数据成员时,(即便从未生成过那个类的对象)。


非静态示例初始化

在类中,仅用花括号包裹的代码:相比静态代码块少了static关键字。

这种语法对于支持“匿名内部类”的初始化是必须的。在构造器之前执行


可变参数列表

//: initialization/NewVarArgs.java// Using array syntax to create variable argument lists.public class NewVarArgs {  static void printArray(Object... args)  //参数为可变参数列表,即参数为Object类型的数组args,其数组长度根据具体传入的实际参数为准
{    for(Object obj : args)      System.out.print(obj + " ");    System.out.println();  }  public static void main(String[] args) {    // Can take individual elements:    printArray(new Integer(47), new Float(3.14),      new Double(11.11));    printArray(47, 3.14F, 11.11);    printArray("one", "two", "three");    printArray(new A(), new A(), new A());    // Or an array:    printArray((Object[])new Integer[]{ 1, 2, 3, 4 });    printArray(); // Empty list is OK  }} /* Output: (75% match)47 3.14 11.1147 3.14 11.11one two threeA@1bab50a A@c3c749 A@150bd4d1 2 3 4*///:~


《java编程思想》第六章:访问权限控制


1. protected也提供包访问权限,也就是说相同的包内的其他类可以访问protected元素;同一个类中,相当于public。

2.每个编译单元(文件)都只能有一个public类(该类的名字要跟文件名一样)。当然也可以一个public的类也没有,那样对 类的命名就没有规定。

3. 最好的设计是一个文件一个public类。

4. 构造器也可以指定访问类型。如果是private,则可以组织任何人或类去创建该类的任何对象。