基础
- 变量名以字母、下划线或者美元符开头,不能以数字开头,后面跟字母、下划线、美元符、数字,变量名对大小写敏感,无长度限制
- 类变量为类中的静态变量,实例变量为通过对象来访问的变量
- 在当前类构造时先执行属性赋值,类中实例属性赋值和构造代码块之间按顺序执行,构造函数中的语句最后执行
- 在语句块中定义的语句在语句块之外不可以访问,(包括静态代码块和实例代码块)
- 当类中存在final类型的变量时,需要在有参和无参的构造函数中添加对该变量的初始化,或者直接声明时初始化
- 全局变量会自动初始化,存在初值,局部变量不会自动初始化,使用前需要赋值。
- 深克隆可以通过重载clone方法并手动添加对象的复制和使用序列化来实现
- 构造方法可以用private,protected,default,private修饰
- Private,当前类访问,默认default,同上增加同包访问,protected,同上增加子类可访问,public,公开
- 添加@Inherited,子类可以继承父类类级别的注解,但对方法级别无效;
- 子类方法实现父类抽象方法,或者覆盖父类方法时,都无法继承父类该方法上的注解,但继承到的父类方法,注解会保留
- 接口中的所有注解无法保留到其实现类中;
结构
- 重载:
- 重载的时候,方法名要一样,但是参数类型和个数不一样;
- 返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
- 不能通过访问权限、返回类型、抛出的异常进行重载;
- 重载为编译时多态的体现
- 重写:
- 为运行时多态的体现
- 参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载
- 返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载
- 访问修饰符的限制一定要不小于被重写方法的访问修饰符
- 声明为final的方法不能被重写。
- 声明为static的方法不能被重写,但是能够被再次声明。
- (public>protected>default>private)
- 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
- 静态方法不可以被重写,但可以在子类中重新声明
- 更加详细的介绍,上描述中不全
- 子类继承父类的所有属性,包括私有属性,但是无法直接使用私有属性;可以在子类中调用相应的get/set方法来访问父类的私有属性
- 内部类:
- 成员位置:在成员位置定义的类,被称为成员内部类。局部位置:在局部位置定义(方法中)的类,被称为局部内部类。
- 内部类不添加范围时,应该时默认的default
- 局部内部类要访问的局部变量必须用final修饰,因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。
- 在创建内部类的引用时
- 若内部类公开,且非静态,需要使用
neia.bb v=new neia().new bb();
,或者先创建外部类a,然后通过a.new bb()的形式来创建,其中,new在外部类对象之后 - 若为静态,则neia.bb v=new a.b()即可
- 若内部类为私有,则不可以在外部引用
- 若内部类公开,且非静态,需要使用
- 在内部类中指定使用外部类的方法时,使用外部类.this.方法名(如果内部类和外部类存在同名参数);
- 在内部类中,访问外部类的域的时候,就要必须使用 外部类.this.成员域,单独this表示内部类成员
- 内部类在本类中(包含内部类的类)可以直接创建,在外部,需要通过外部类的对象类创建,当内部类为静态时,可以通过new a.b()来创建
- 内部类可任意为公开或私有,类中可以由多个公开的接口
- 接口和抽象类:
- 接口可以继承多个接口,类不可以多继承源于多个类中可能存在相同的方法,无法确定子类应该继承哪一个方法
枚举
- Java枚举用于类的对象为固定数量的类型,在第一行声明这些实例逗号分隔,分号结束,实例默认为public static final
- 当未添加自定义的初始化函数时,会默认调用父类的私有初始化函数 protected Enum(String name, int ordinal)
- Java 枚举类使用enum声明,为ENUM类的子类,不能再继承其他类,且默认被声明为final,构造方法只能时私有的,其中可以定义属性,属性可以非final或静态
- 枚举类中可以声明多个抽象方法,或者继承抽象类或者接口,在第一行的实例中添加实现
- Swith中可以使用枚举值
- 枚举类中的属性仅在第一次访问时被加载初始化(静态变量加载),因为类加载机制为线程安全,所以枚举类的使用是线程安全的
- 枚举对序列化进行规定,保证其每一个枚举变量在jvm中唯
接口和抽象类
- 将类声明为final,其中的方法自动被转换为final,而其中的属性不发生改变,且类不可被继承
- 抽象类不能实例化,但抽象类可以作为声明
- 接口中的方法前默认添加public abstract;
instanceof 使用
- 使用方式 具体对象 instanceof 类;左边使用对象,右边为类型,其仅指明类,不可以是对象,类对象也不可以;