成员变量:多个对象共享同一个数据
成员方法:静态方法不属于对象,属于类,推荐通过类名称调用静态方法和静态变量。
对于本类当中的静态方法,可以直接调用,不用写类名称。
静态只能直接访问静态,不能直接访问非静态,因为内存中先有静态内容,后有非静态内容,静态方法中不能使用this关键字。
类对象中的静态成员变量只是存了静态区(堆中)静态变量的地址。
//静态代码块:当第一次用到本类时,静态代码块执行唯一的一次 public class Demo{ static { //.... } } //静态内容总是优先于非静态,所以静态代码块比构造方法先执行 //用途是:用来一次性的对静态成员变量进行赋值
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接口的支持
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;//圆周率近似常量
继承是多态的前提,没有继承就没有多态。
继承解决的主要问题就是:共性抽取
继承关系当中的特点:
public class Father{ int a; } public class Son extends Father{ int b; }
如果父子中有同名变量,优先使用子类中的成员变量,没有就向上找。成员方法类似。
局部变量:直接访问
成员变量:this.num
父类成员变量:super.num
Java语言是单继承的,一个类只能有一个直接父类。
Java语言可以多级继承。java.lang.Object是最高级别的类。
一个父类可以有很多个子类。
重写:方法名称一样,参数列表也一样,也叫覆盖、覆写。
重载:方法名称一样,参数列表不一样。
@Override//写在重写之前,用来检测重写是否有效(注解annotation)
子类方法的返回值必须小于等于父类方法返回值的范围。
子类方法的权限必须大于等于父类方法的权限修饰符。
public>protected>(default)>private
PS: default不是关键字,而是留空默认
如果父类中某方法不知道如何实现,那么就是抽象方法。
public abstract class Demo{ public abstract void demo(); }
抽象方法:加上abstract关键字,不需要实现,直接分号结束。
抽象类:抽象方法所在的类必须是抽象类,定义类时要加上abstract关键字。
不能直接创建抽象类对象,必须用一个子类来继承抽象父类,且子类必须重写父类的所有抽象方法,除非子类也是抽象类(重写时去掉abstract关键字实现即可)
抽象类中不一定包含抽象方法,但抽象方法的类一定是抽象类。