数组定义
动态初始化
元素类型[] 数组名=new 元素类型[数组长度];
静态初始化
元素类型[] 数组名={元素1,元素2,元素3};
元素类型[] 数组名=new 元素类型[]{元素1,元素2,元素3};
static修饰的成员变量和成员方法
特点:
被所有的对象所共享
静态的加载优先于对象
随着类的加载而加载
注意事项:
静态方法可以调用静态变量
静态方法可以调用静态方法
静态方法不可以调用非静态的成员变量
静态方法不可以调用非静态的成员方法
非静态方法可以调用静态成员变量
非静态方法可以调用静态成员方法
非静态方法可以调用非静态的成员变量
非静态方法可以调用非静态的成员方法
静态方法中没有this而非静态方法中有this
Math中的方法(java.lang下的类无须导包,Math类中的静态方法和静态变量直接调用)
Math.PI//3.141592653589793
Math.abs(double/float/int/long a);//取绝对值
Math.ceil(double a);//向上取整
Math.floor(double a);//向下取整
Math.round(double a);//四舍五入
Math.pow(double a, double b);//a的b次方
Math.random();//返回一个大于0且小于1的double类型的随机数
自定义工具类
将构造方法私有化(private)
将成员方法、成员变量静态化(static)
代码块
局部代码块(在方法中,控制变量的生命周期,减少内存开销)
{
语句...
}
构造代码块(方法之外,提取构造方法中的共性,每次创造对象都要先执行代码块再执行构造方法)
{
语句...
}
静态代码块(随着类的加载而加载,且只加载一次,加载类的需要做的一些初始化,比如加载驱动)
static{
语句...
}
优先顺序:静态代码块(只执行一次)>构造代码块>构造函数
继承类(关键字extends,提高代码的复用性,减少代码的冗余,提高代码的可维护性,耦合性变高了)
多个子类可以继承同一个父类
父类中的私有变量和私有方法子类不可使用
当子类和父类有相同的变量和方法时采用就近原则
开发原则:高内聚低耦合
this和super区别
this(当前对象的引用) super(子类对象的父类引用)
this访问本类中的变量、方法,如果本类没有此变量、方法则从父类中继续查找。super访问父类中的变量、方法。
(也采用就近原则)
方法的重写和重载
重载指一个类中方法的名字相同而参数不同(参数的个数、顺序、类型不同)
重写(覆盖)指发生在继承类中,子类对父类的方法的重写(@Override)返回值 方法名 参数完全相同 修饰符权限子类大于等于父类
不能重写父类私有方法
子类构造函数如果没有super()或this()默认第一行是super()(调用父类无参构造函数)
抽象类(abstract修饰方法和类)
抽象方法:不同类的方法是相似的而具体内容不一样,只声明,没有具体的方法体
有抽象方法的类一定是抽象类,而抽象类不一定有抽象方法
子类必须重写父类中所有的抽象方法,否则这个类就是抽象类
abstract和final、private不能共存
抽象类有构造函数
final修饰的类不能被继承、修饰的成员变量(常量)不能被修改、修饰的方法不能被重写
接口(interface implements)
所有的方法默认都是abstract抽象方法,所有的成员变量都是final修饰的常量
方法只能是public abstract修饰,public static final修饰变量
类与类:继承关系(extends),单一继承,多层继承
类与接口:实现关系(implements),多实现
接口与接口:继承关系(extends)
接口降低了程序的耦合性,以实现模块化开发,提高开发的效率
多态
子父类继承关系
方法重写
父类引用指向子类对象
Person a=new student();//向上转型(执行方法看父类)
student d=(student)a;//向下转型(执行方法看子类)