Java基础课程刷一遍

2020-01-02  本文已影响0人  MikeShine

写在前面

之前一直就用 java,但是并没有系统学习过。现在刷一下 java 的课程课程原视频,这里把一些之前没有注意的知识点记录一下。
主要是有一点理论的东西在里面,还有就是一些细节的知识点可能之前没有注意到。
下面的总结可能是没有什么逻辑和章法,就只是看到在课程中看到什么就总结什么,很零碎。
标题后面的编号,是原视频中对应的小节编号,防止之后看的时候看不懂,需要去原视频中重新理解。


Java 的堆空间和栈空间(2.3.2)

“对象是引用类型的数据”-----对象的初始化,放在堆空间中,变量放在栈空间中。看下面的一个例子:

堆空间和栈空间示例
这个例子中,定义一个整形数组。其中,new 操作符就是要在堆空间中开辟一片内存空间,然后 等号 是把堆空间中这一片内存的首地址赋值给栈空间中的 a 变量。建立起引用关系,如图所示。
之后,根据偏移量和索引就可以访问到数组中的不同元素。
类似的,我们看一下二维数组的内存空间使用情况。
二维数组内存空间的使用情况
二维数组和上面的一维数组其实是一样的。
这里是定义了一个 3*4 的数组,那么很简单,在堆中对应每一行,有一个长度为4的内存空间,然后需要有一个长度为3的数组记录每一行起始的地址;最终栈空间中的变量记录的是长度为3的数组的起始地址。

基本类型的数据存储在“虚拟机栈”中

看一个图就明白了。其中虚拟机栈是一个容量较小,但是运算速度极快的存储空间。


基本类型数据存在虚拟机栈中

命令行参数

就是我们使用的主函数里面的 (String args[]) 这个东西。
一般是来传递命令行的参数的,平时都用不到,简单的来理解一下:如果在主函数内部将这个变量输出,而使用命令行来运行这个类,同时在命令行中输入几个 参数,运行时候就会发现这个命令行中输入的东西被输出了。


可变长参数

在方法的定义中,还涉及了一个可变长参数,之前没有见过。

static double maxArea(Circle c, Rectangle... varRec){
    Rectangle[] rec = varRec;
    // ...
}

/*下面是调用*/
maxArea(c, r1, r2);
maxArea(c, r1, r2, r3);

可以看到,调用的时候,因为可变长参数的原因,实际可以传入任意数量的 Rectangle 对象。


this 在一个构造方法内使用另外一个构造方法(同一类)

public class BankAccount(){
    public BankAccount(String initName, int initNumber, float initMoney){
    name = initName;  //
    number = initNumber;
    money = initMoney;
    }

   public BankAccount(){
       this("", 99999, 0.0f);  // 使用同类另外一个构造方法
   }

   public BankAccount(String initName, int initNumber){
      this(initName, initNumber, 0.0f);  // 使用同类的另外一个构造方法  
  }
}

上面代码中有3个构造函数,其中后面两个构造函数都是通过 this 关键字来适用第一个构造函数来完成自身的实现的。
类似的, super 使用父类的一个构造方法。


枚举类

这个课程里面只是简单介绍了一下枚举类。
有一个 values() 方法可以遍历枚举类中所有的对象。


Object类(4.4.1)

这一节中,主要讲了一下作为根类的 Object 类中的一些方法。

boolean equals(Object x){
    return this == x;
}

如果需要像我们平时理解的那种 == (也就是说判断值是否相等)来比较的话,就要重写equals 方法。

pulbic boolean equals (Object x){
    if (this.getClass()!=x.getClass())
        return false;
    ClassName b = (ClassName) x;   // 先做类转换才能使用被比较类中的方法
    return (this.getName).equals(b.getName);   // 假如只有一个 name 变量属性
}

实际上在,String ,Integer,Date类中,equals() 方法被覆盖成为判断 相等性。
这个老哥具体讲了一下 String 类中的 equals 方法

class MyObject implements Cloneable
{  // ...
}

泛型(4.7.1)

之前也理解过这个概念,这里重新认识一下。之前都是在容器中认识泛型的。
所谓泛型就是不指定的类型,从形式上来说就是一个尖括号扩住。

class GeneralType<Type>{
// 泛型类
  Type object;
  pulic GeneralType(Type object){
      this.object = object;
  }
  public Type getObj(){
    return object; // 向上转型
  }
}

class ShowType{
    public void show(GeneralType<?> obj){    // 通配符
      System.out.println(obj.getObj().getClass().getName());
    }
}

5.2.1 接口

接口就是一个纯抽象类,即其中所有的方法都是没有方法体的抽象方法。


5.4.1 类型转换和方法查找

所谓的类型转换,分为自动转换和强制转换,自动转换是从“小的”--> 大的(不管是精度小的数到精度大的数、子类到父类)。
所谓的方法查找,是指在发生了类型转换之后,再进行方法调用时候,虚拟机查找调用哪个方法。

class Circle extends Math{
    Circle circle = new Circle();
    Math math = (Math) circle;
}

// 这个时候调用两个类共有的 area() 方法
math.area()
// 会发现其实 是 调用了 Circle 类中的方法,因为对象是 circle,属于 Circle类。

5.7.1 构造方法和多态性

这一节之前在 Thinking in Java 中我们学习过。


6. 关于Collection 体系(集合体系)

先来看一下总图


Java Collection 全家福

对于java中的集合Collection体系,
Collection中文意思是“集合”,是一个存储同类型对象的数据结构抽象接口。其中主要包含Set、List、Queue三种接口。

上一篇 下一篇

猜你喜欢

热点阅读