对于static修饰的方法而言,则可以使用类来直接调用该方法,如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象。所以,static修饰的方法中不能使用this引用,因此static修饰的方法不能访问不使用static修饰的普通成员(与this调用等价),与静态成员不能直接访问非静态成员的结论一致。
Java里方法的参数传递只有值传递。即将实际参数值的副本传入方法内,而参数本身不会受到影响。
对于基本类型的参数传递,由于这些变量被放在方法的栈内存区,因此其实相互不影响的;
当传递的参数是对象的引用时,两个函数在各自的栈内存区存放对象的引用,而对象的真实数据在共享的堆内存中,因此两个引用对于对象的操作是相互影响的,不过当对某一个引用变量赋值为null时,只是表示其断开了对对象的引用而已,对象并不会销毁,要等到没有引用变量引用该对象时,由系统回收机制回收。
形参长度可变的方法:
从JDK1.5之后,java允许定义形参长度可变的参数,从而允许为方法指定数量不确定的形参。如果在定义方法时,在最后一个形参的类型后增加...,则表明该形参可以接受多个参数值,多个参数值被当成数组传入。
方法重载:
Java允许同一个类里定义多个同名方法,只要形参列表不同即可。
java不以返回值类型区分重载,是因为调用方法可以忽略返回值,如void f()和int f(),f()是不能识别是哪个函数的。
成员变量与局部变量:
栈内存与堆内存;对象与引用;基本数据类型与对象
局部变量必须初始化以后才能使用,系统不会为局部变量初始化。定义局部变量后,系统直到该局部变量被初始化以后才为该变量分配内存并将初始值保存在相应内存中。
如果是基本类型的变量,初值就在其变量对应的内存中;如果是引用,则引用变量的内存中是地址,指向具体内容的地址。
通常局部变量的内存区比较小,因为只保存基本类型的变量或者引用的地址。
修饰符:
public:所有可见
protected:子类及同一个包,一般表示要被子类重写的类
private:只能在同一个类中可见
如果需要在子类中调用被覆盖的父类的方法时,可以使用super作为调用者。
super是直接父类对象的默认引用。super也不能在static方法中使用,同this
子类不会获得父类的构造器,使用super
多态:java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。如果编译时类型与运行时类型不一致,就会出现多态(Polymorhpism)。
引用变量在编译阶段只能调用其编译时类型所具有的方法,而在执行时则执行其运行时类型所具有的方法。如Object p=new Person();则p只能调用Object类中定义的方法,但运行时则运行Person类中的方法。
与方法不同的是,对象的属性不具有多态行为,它只代表声明时的类对应的成员变量的值。通过引用变量来访问其包含的实例属性时,系统总是试图访问它编译时类所定义的属性,而不是它运行时类所定义的属性。
instanceof运算符:
组合与继承
初始化块:在构造器之前执行