static修饰的方法中不能使用this引用方法
静态成员不能访问非静态成员
当系统开始执行方法时,系统为形参执行初始化,就是把实参变量的值赋值给方法的形参变量,方法里操作的并不是实际的形参变量
Java对于引用类型的参数传递,一样采用的值传递方式,不过传递的不是对象本身,而是对象的引用,因此在被调用的方法内修改参数引用的对象时,由于引用的是同一个对象,所以原栈区变量引用的对象也会同时修改形参个数可变
注意,个数可变的形参只能处于形参列表的最后。一个方法中最多只能包含一个个数可变的形参。个数可变的形参本质就是一个数组类型的形参,因此既可以传入多个参数,也可以传入一个数组方法重载
如果同时包含了类型相同并且 个数可变的形参和一个形参的重载方法,当传入一个参数时会优先调用一个参数的方法。如果需要调用形参个数可变的方法则需要通过传入数组的方式调用,例如overload.test(new String[]{"hello"});成员变量 和 局部变量
java语法中允许通过实例调用静态成员,但是static修饰的成员属于类本身,不属于实例本身。所以尽量不要使用实例对象去调用静态成员。构造器
覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法super限定
引用变量在编译阶段只能调用其编译类型时类型所具有的方法,但运行时则执行它运行时类型所具有的方法
通过引用变量来访问其包含的实例变量时,系统总是试图访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量引用类型的强制转换
isntanceof运算符前面操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系,否则会引起编译错误初始化块
实例初始化块只在创建Java对象时隐式执行,而且在构造器执行之前自动执行。类初始化则在类初始化阶段自动执行
实际上实例初始化块是一个假象,使用javac命令编译Java类后,该Java类中的实例初始化块会消失—实例初始化块种代码会被“还原”到每个构造器中,且位于构造器所有代码的前面与构造器类似,创建一个Java对象时,不仅会执行该类的实例初始化器和构造器,而且系统会一直上溯到java.lang.Object类,先执行java.lang.Object类的实例初始化块,开始执行java.lang.Object的构造器,依次向下执行其父类的实例初始化块,开始执行其弗雷德构造器......最后才执行该类的实例初始化块和构造器
初始化块和声明变量时所指定的初始值都属于初始化代码,执行顺序会按照代码的先后顺序执行
常量池专门用于管理在编译期间被确认并保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口中的常量,还包括字符串常量
String 重写Object的equals()方法,判断两个字符串相等的标准是:只要两个字符串包含的字符序列相同,通过equals比较将返回true,否则返回falseequals()是Object类提供的一个实例方法,所有引用变量均可通过此方法来判断与其他引用变量是否相等。但使用Object提供的equals()方法判断两个对象相等和==没有区别。我们可以采用重写equals方法来实现自定义equals()方法
当通过类对象访问静态成员时,系统会在底层转换为通过该类来访问静态变量
final成员变量在显示初始化之前不能直接访问,但可以通过方法来访问,这是java设计的一个缺陷。按照正常逻辑,final成员变量在显式初始化之前时不应该允许被访问的。final局部变量
当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型不能被改变,但对于引用类型来说,它保存的仅仅是一个引用,final只能保证这个引用类型所引用的地址不能被改变,引用的这个对象完全可以发生改变可执行“宏替换”的final变量
Java会使用常量池来管理曾经用的字符串直接量,例如执行String a = "java";语句后,常量池中就会缓存一个字符串“java”;如果程序在执行String b= "java";,系统将会让b直接指向常量池中的“java”字符串,因此a==b将会返回truefinal方法
对于一个private方法,因为它仅在当前类中可见,其子类无法访问该方法,所以子类无法重写该方法。如果子类定义了一个与父类private方法有相同方法名、相同参数列表、相同返回值的方法,也不是方法重写,只是重新定义了一个方法。因此,即使使用final修饰一个private访问权限的方法,依旧可以在子类定义于该方法具有相同方法名、相同形参列表、相同返回值类型的方法。final类
实现接口方法时,必须使用public访问控制修饰符,因为接口里的方法都是public的,而子类(相当于实现类)重写父类方法是访问权限只能更大或相等,所以实现类实现接口里的方法时只能使用public访问权限接口和抽象类
非静态内部类不能有静态方法、静态成员变量、静态初始化块静态内部类
除此之外,Java允许在接口定义内部类,接口里定义的内部类默认用public static修饰,也就是说,接口内部类只能是静态内部类使用内部类
如果为接口内部类指定访问控制符,则只能是public访问控制符;如果接口定义接口内部类是省略访问控制符,则该内部类默认是public访问控制权限
Java 8 专门为函数式接口提供了@FunctionalInterface注解,该注解通常被放在解耦定义的前面,该注解对程序过程没有任何作用,它用于告诉编译器执行更严格检查(检查该接口必须是函数式接口,否则编译器会报错)
switch的控制表达式可以是任何枚举类型。当switch控制表达式使用枚举类型时,后面case表达式中的值直接使用枚举值的名字,无需添加枚举类作为限定所有枚举类都继承了java.lang.Enum类,所以枚举类可以直接使用java.lang.Enum类中包含的方法。java.lang.Enum类中提供了如下几个方法
上面代码创建MALE和FEMALE枚举值时,并不是直接创建Gender枚举类的实例,而是相当于创建Gender的匿名子类的实例包含抽象方法的枚举类
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |