Java学习笔记(四) —— 基础知识篇
一些关键字
1.static
成员变量:多个对象共享同一个数据
成员方法:静态方法不属于对象,属于类,推荐通过类名称调用静态方法和静态变量。
对于本类当中的静态方法,可以直接调用,不用写类名称。
静态只能直接访问静态,不能直接访问非静态,因为内存中先有静态内容,后有非静态内容,静态方法中不能使用this关键字。
类对象中的静态成员变量只是存了静态区(堆中)静态变量的地址。
//静态代码块:当第一次用到本类时,静态代码块执行唯一的一次
public class Demo{
static {
//....
}
}
//静态内容总是优先于非静态,所以静态代码块比构造方法先执行
//用途是:用来一次性的对静态成员变量进行赋值
2.super
- 在子类的成员方法中,访问父类的成员变量;
- 在子类的成员方法中,访问父类的成员方法;
- 在子类的构造方法中,访问父类的构造方法。
3.this
- 在本类的成员方法中,访问本类的成员变量。
- 在本类的成员方法中,访问本类的另一个成员方法。
- 在本类的构造方法中,访问本类的另一个构造方法,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.继承
继承是多态的前提,没有继承就没有多态。
继承解决的主要问题就是:共性抽取
继承关系当中的特点:
- 子类可以拥有父类的内容
- 子类还可以拥有自己专有的内容
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.构造方法
- 子类构造方法中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。
- 子类构造可以通过super关键字来调用父类重载构造。
- super的父类构造调用,必须是子类构造方法的第一个语句,一个子类构造不能多次调用super构造。
4.抽象类和抽象方法
如果父类中某方法不知道如何实现,那么就是抽象方法。
public abstract class Demo{
public abstract void demo();
}
抽象方法:加上abstract关键字,不需要实现,直接分号结束。
抽象类:抽象方法所在的类必须是抽象类,定义类时要加上abstract关键字。
不能直接创建抽象类对象,必须用一个子类来继承抽象父类,且子类必须重写父类的所有抽象方法,除非子类也是抽象类(重写时去掉abstract关键字实现即可)
抽象类中不一定包含抽象方法,但抽象方法的类一定是抽象类。