Math
public static double random() { return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble(); } // 取值范围[0,1)
若要取值[1,10]: (int)(Math.random() * 10 )+ 1
代码块
使用{}括起来的代码,可分为 局部代码块,构造代码块,静态代码块,同步代码块
局部代码块: 在方法中;限定变量生命周期,及早释放,提高内存利用率
构造代码块: 在类中方法外;多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
静态代码块: 在类中方法外,加static修饰;给类进行初始化,在加载的时候就执行,并且只执行一次
面试题? 静态代码块 构造代码块 构造方法的执行顺序?
静态代码块>构造代码块>构造方法
继承
继承是类与类之间的关系,让子类自动具备定义在父类中的属性和行为,从而达到代码复用的目的
格式: 通过extends关键字可以实现类与类的继承,class 子类名 extends 父类名
extends: 单继承有且只有一个父类; 不写extends,也会有一个默认的父类(Object, java中的根类)
这个类被称为父类,基类或者超类;这多个类可以称为子类或者派生类
类与类的关系: is a 继承; has a 组合
继承的内存实现: 首先调用父类的构造方法,然后再调用子类的构造方法,构成一个完整的对象
特点: 1 来自父类的属性和行为,都会无条件的继承,但是,能否访问到,是看父类中定义的修饰符
2 父类的构造方法不会被子类继承
原因: 2.1 语法上,构造方法要求与类名保持一致,所以一个子类不可能有一个构造方法的名字是父类的类名
2.2 逻辑上,构造方法是用来产生对象的,子类不可能拥有产生父类对象的方法
3 只能单继承,但是支持多层继承
继承的优点: 结构清晰;缺点: 子类的丰富度不够,灵活性不够,所以Java中可以使用接口类,进行弥补
继承中成员方法的关系
子类拥有父类相同的行为,被称为方法覆盖,方法重写
特点: 1 方法名不能变 2 参数列表相同 3 返回类型相同 4 访问修饰符不能比父类的低
5 重写后的方法不能抛出比重写前更多的异常