美文网首页
Java基础课程刷一遍

Java基础课程刷一遍

作者: MikeShine | 来源:发表于2020-01-02 09:40 被阅读0次

写在前面

之前一直就用 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 类中的一些方法。

  • equals() 方法
    如果是比较基本数据类型,那么只有比较运算符 "=="。如果是比较类的对象,才会有 equals() 方法。
    这里有一个概念,相等(equal) 和同一 (identical)
    如果比较两个对象,那么 "==" 运算符 和 equals() 方法都是用来判断两个对象是否“同一”,即两个引用变量是否指向同一个对象。
    实际上 equals() 方法的实现,就是用了 “==” 运算符(如下),所以如果在比较两个对象时候,该方法和“==”是一样的,也是在判断同一性。
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 方法

  • clone() 方法
    这个方法是用来复制对象的。一个类的对象如果想要被克隆的话,需要实现Cloneable接口,才可以使用 clone() 方法
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类。
  • 类方法查找(static 方法)
    只看类。对于上面的情况,调用的是 Math 中的 statci circle().

5.7.1 构造方法和多态性

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

  • 构造子类对象时候,构造方法的调用顺序:
    先调用父类构造方法,直到子类构造方法,然后是其他语句。(很好理解,先要有父类才可以有子类,所以是要先父类的构造方法。)
  • 不要在构造方法中调用多态方法
    会产生不可知的错误。因为调用多态方法一般都会指向子类中的方法,而在构造时候,子类对象还没有初始化(构造),所以此时调用的方法会产生不可知的错误。
    不建议在构造方法中调用其他方法,如果非要调用,可以调用那些 final 和 private 不可以被覆盖的方法。

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

先来看一下总图


Java Collection 全家福

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

  • Set不允许元素重复,HashSet 和 HashTable 是其两个主要的实现类。
  • List 允许重复。ArrayList、LinkedList 和 Vector 是其三个主要的实现类。
  • Queue 是遵循先入先出(FIFO)的数据结构。
    除此之外,Map也属于集合系统,但是从图上就可以看出来,实际上Map接口跟Collection 接口是并列的。 Map 是基于 key,value 的数据结构。HashMap、TreeMap 和 HashTable 是其三个主要的实现类。
    这一块可能的面试问题

相关文章

  • Java基础课程刷一遍

    写在前面 之前一直就用 java,但是并没有系统学习过。现在刷一下 java 的课程课程原视频,这里把一些之前没有...

  • 最近的事

    技术 0.Java 基础:(16上) 1.数据结构:看一遍《算法》,过一遍《剑指》,《刷ing》(晚15,16上,...

  • 开课吧大数据高级开发工程师 百度网盘分享

    课程大纲: java的基础课程(额外提供)阶段2:linux基础阶段3:java基础阶段4.5:mysql阶段6:...

  • Java基础学习需要掌握哪些内容?

    对于零基础或者打算开始学习Java编程的同学,首先要去学习Java基础课程的内容,那么Java基础课程有哪些...

  • 2020版本Java300集资料免费分享福利

    2020年,Java零基础到精通资料教材,零基础入门Java,包含Java快速入门课程,干货分享,新基础Java教...

  • 编程福利,Java,Python基础课程免费领取

    大家需要领取Java Python基础课程,跟实战课程的可以私聊我哦,免费领取 Java的基础课程有:Javaee...

  • 假期计划

    一,Java基础部分(自学Java) 学习路径 视频学习 推荐课程 极客学院java课程(需要会员)百度云下载链接...

  • Java第一天

    今天主要学习java基础,预计明天结束java基础课程。 然后总结一下今天java学习的知识点: 1.java拥有...

  • 集合的一些源码分析

    java基础 hashmap原理 Java集合说一说吧set ,list,map都问了一遍 java中util包下...

  • Java 技术栈

    1、Java基础 Leetcode 刷题、Java 编程思想、JVM 原理、设计模式、Java 8 新特性 2、项目经验

网友评论

      本文标题:Java基础课程刷一遍

      本文链接:https://www.haomeiwen.com/subject/tyunoctx.html