1、重载
方法重载就是方法名称重复,加载参数不同。
在一个Java类中,定义多个同名的方法,如果方法名相同,方法参数不同,包括参数的类型和个数都不同,叫做方法的重载。调用重载方法时,Java 编译器通过检查调用的方法的参数类型和个数选择一个恰当的方法。方法重载常用于创建完成一组任务相似但参数的类型或参数的个数或参数的顺序不同的方法。
方法的重载,既可以发生在普通方法上,也可以发生在构造方法上。方法的重载,既可以发生在同类中,也可以发生在父子类中。
Java方法的重载:返回类型、修饰符可以相同,也可不同。要求同名的方法必须有不同的参数表,仅有返回类型不同是不足以区分两个重载的方法。
在该题中,如果将C改为publlic int aMethod(float a,floatb)也是不合法的,仅返回类型不同,不足以构成方法重载。
2、类和接口
抽象类和接口
含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
构造方法是一种特殊的方法,它是一个与类同名的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
接口中为什么不能有普通成员变量,只能有静态成员变量:
- public是因为接口是标准,必须对外完全开放,自己藏着掖着没意义;
- static是因为要确保该变量只有一份,避免重名;(谓static,顾名思义,它代表着静态,静止不动的,都知道JVM内存中除了程序计数器,堆内存,栈内存,还有一块不大的内存区,叫做静态存储区。这块区域就是用来存储所有静态的方法和变量的。如果有普通成员变量的话,接口中的成员变量是非静态的,那么每一个实现了该接口的类都会有这么一个变量。那么,因为接口是多继承的,那么如果另一个接口也是有同样这样一个变量呢,那你用哪一个?所以,因为是标准,所以我规定从一开始,这个东西只能有一份,只能放在静态存储区,如果第二个接口也想同命名这么一个变量,那么存储时候就会报错,因为我静态存储区已经有一份了。)
- final是因为接口的东西是大家共用的,不能随便修改,因此干脆不然你有修改的权限!
3、关键字
final
用法:
修饰类:
Java中的String类就是一个final类,不能被继承。
当用final修饰一个类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
修饰方法:
不可以被子类重写,但是可以被重载
“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“
注:类的private方法会隐式地被指定为final方法。
修饰变量:
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
能不能被一个包访问是和访问控制符有关系
static
4、数据类型
查看源码可以知道数组的equals方法是object的equals,比较的是内存地址
5、JVM
在java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:
1.给对象赋值为null,以下没有调用过。
2.给对象赋了新的值,重新分配了内存空间。