Java学习笔记(四) —— 基础知识篇


一些关键字

1.static

成员变量:多个对象共享同一个数据

成员方法:静态方法不属于对象,属于类,推荐通过类名称调用静态方法和静态变量。

对于本类当中的静态方法,可以直接调用,不用写类名称。

静态只能直接访问静态,不能直接访问非静态,因为内存中先有静态内容,后有非静态内容,静态方法中不能使用this关键字。

类对象中的静态成员变量只是存了静态区(堆中)静态变量的地址。

//静态代码块:当第一次用到本类时,静态代码块执行唯一的一次
public class Demo{
    static {
        //....
    }
}
//静态内容总是优先于非静态,所以静态代码块比构造方法先执行
//用途是:用来一次性的对静态成员变量进行赋值

2.super

  1. 在子类的成员方法中,访问父类的成员变量;
  2. 在子类的成员方法中,访问父类的成员方法;
  3. 在子类的构造方法中,访问父类的构造方法。

3.this

  1. 在本类的成员方法中,访问本类的成员变量。
  2. 在本类的成员方法中,访问本类的另一个成员方法。
  3. 在本类的构造方法中,访问本类的另一个构造方法,this(...)调用必须是构造方法中的第一个语句,且是唯一一个,super和this两种构造调用不能同时使用。

API

1.Arrays

package: java.util

是一个与数组相关的工具类,里面提供了大量的静态方法。

int[] int Array = {1,2,3};
String intstr = Arrays.toString(intArray);//将参数数组变成字符串,格式为[元素1,元素2,···]

int[] array1={2,1,3,4,5};
Arrays.sort(array1);//按照升序对数组的元素进行排序
//如果是数值,sort默认按照升序
//如果是字符串,sort按照字母升序
//如果是自定义类型,那么自定义的类需要Comparable或者Comparator接口的支持

2.Math

package: java.util

是一个数学相关的工具类,里面提供了大量的静态方法

Math.abs(-423);//绝对值,423
Math.ceil(3.9);//向上取整,4.0
Math.floor(3.6);//向下取整,3.0
Math.round(3.4);//四舍五入,3,不带小数点
Math.PI;//圆周率近似常量

面向对象

1.继承

继承是多态的前提,没有继承就没有多态。

继承解决的主要问题就是:共性抽取

继承关系当中的特点:

  1. 子类可以拥有父类的内容
  2. 子类还可以拥有自己专有的内容
public class Father{
    int a;
}
public class Son extends Father{
    int b;
}

如果父子中有同名变量,优先使用子类中的成员变量,没有就向上找。成员方法类似。

局部变量:直接访问

成员变量:this.num

父类成员变量:super.num

Java语言是单继承的,一个类只能有一个直接父类。

Java语言可以多级继承。java.lang.Object是最高级别的类。

一个父类可以有很多个子类。

2.重写(Override)

重写:方法名称一样,参数列表也一样,也叫覆盖、覆写。

重载:方法名称一样,参数列表不一样。

@Override//写在重写之前,用来检测重写是否有效(注解annotation)

子类方法的返回值必须小于等于父类方法返回值的范围。

子类方法的权限必须大于等于父类方法的权限修饰符。

public>protected>(default)>private

PS: default不是关键字,而是留空默认

3.构造方法

  1. 子类构造方法中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。
  2. 子类构造可以通过super关键字来调用父类重载构造。
  3. super的父类构造调用,必须是子类构造方法的第一个语句,一个子类构造不能多次调用super构造。

4.抽象类和抽象方法

如果父类中某方法不知道如何实现,那么就是抽象方法。

public abstract class Demo{
    public abstract void demo();
}

抽象方法:加上abstract关键字,不需要实现,直接分号结束。

抽象类:抽象方法所在的类必须是抽象类,定义类时要加上abstract关键字。

不能直接创建抽象类对象,必须用一个子类来继承抽象父类,且子类必须重写父类的所有抽象方法,除非子类也是抽象类(重写时去掉abstract关键字实现即可)

抽象类中不一定包含抽象方法,但抽象方法的类一定是抽象类。