static静态关键字
如果一个成员变量使用了static关键字,那么这个变量将不再属于对象自己,而是属于所在的类,多个对象共用一份数据
一旦static修饰成员方法,那么就成为了静态方法,静态方法不属于对象,而是属于类的
如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它
对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称调用
如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它
如果有了static关键字,那么不需要创建对象,直接就能通过类名称来使用
无论成员变量还是成员方法,如果有了static,都推荐使用类名称来调用
静态变量:类名称.静态变量
静态方法:类名称.静态方法(参数)
【注意】:
1 静态不能直接访问非静态
原因:因为在内存中【先】有静态内容,【后】有非静态内容
2 静态方法中不能用this
原因:this代表当前对象,通过谁调用的方法,谁就是当前对象
静态代码块的格式是
public class 类名称{
static{
静态代码块的内容
}
}
特点:当第一次用到本类时,静态代码块执行唯一的一次
静态内容总是优于非静态,所以静态代码块比构造方法先执行
Java.util.Arrays是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见的操作
public static String toString(数组):将参数数组变成字符串(按照默认格式[元素1,元素2,元素3,......])
public static void sort(数组):按照默认升序(从小到大)对数组元素进行排序
备注:
1 如果是数值,sort默认升序从小到大
2 如果是字符串,sort默认按照字母升序
3 如果是自定义类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持
java.util.Math类是数学相关的工具类,里面提供了大量静态方法,完成与数学运算相关的操作
public static double abs(double num):获取绝对值
public static double ceil(double num):向上取整
public static double floor(double num):向下取整
public static long round(double num):四舍五入
面向对象的三大特征:封装性,继承性,多态性
继承是多态的前提,如果没有继承,就没有多态
在继承的关系中,“子类就是父类”
定义父类的格式(一个普通的类定义)
public class 父类名称{
//.....
}
定义子类的格式
public class 子类名称 extends 父类名称{
//...
}
在父子类继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式
直接通过子类对象访问成员变量:
等号左边是谁,就优先用谁,没有则向上找
间接通过成员方法访问成员变量:
该方法属于谁,就优先用谁,没有则向上找
【注意事项】:无论是成员方法还是成员变量,如果没有都是【向上找】,绝对不会向下找子类的
重写(Override)
概念:在继承关系当中,方法的名称一样,参数列表也一样
重载(Overload):方法的名称一样,参数列表不一样
方法覆盖重写的注意事项:
1 必须保证父子类之间的方法名称相同,参数列表也相同
@Override:写在方法前面,用来检测是不是有效的正确覆盖描写
2 子类方法的返回值必须【小于等于】父类方法的返回值
Object类是所有类的公共最高父类
3 子类方法的权限必须【大于等于】父类方法的权限修饰符
public>protected>留空>private
继承关系中父子类构造方法的访问特点
1 子类构造方法中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造
2 子类构造可以通过super关键字来调用父类重载构造
3 super的父类构造调用,必须是子类构造方法的第一个语句
【总结】子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,而且必须是第一个