方法重载(overload):
1.必须是同一个类
2方法名(也可以叫函数)一样
3参数类型不一样或参数数量不一样
4.与返回类型无关
方法的重写(override)两同两小一大原则:
子类重写父类中方法
方法名相同,参数类型相同
子类返回类型小于等于父类返回类型
子类抛出异常小于等于父类抛出异常
子类访问权限大于等于父类访问权限
子类重写方法的返回值类型必须为父类方法的返回值类型 或父类方法返回值类型的子类类型
子类重写方法抛出的异常类型 只能是父类方法抛出的类型 或父类方法抛出的异常类型的子类类型
子类重写方法的可见性 必须大于或等于父类方法的 可见性 比如 父类方法是用 protected 修饰的 子类就只能用 public 修饰 而不能用private 修饰
子类重写方法抛出的异常类型 只能是父类方法抛出的类型 或父类方法抛出的异常类型的子类类型
子类重写方法的可见性 必须大于或等于父类方法的 可见性 比如 父类方法是用 protected 修饰的 子类就只能用 public 修饰 而不能用private 修饰
Java中String不是基本类型,但是有些时候和基本类型差不多,如String b = "tao" ; 可以对变量直接赋值,而不用 new 一个对象(当然也可以用 new)。所以String这个类型值得好好研究下。
Java中的变量和基本类型的值存放于栈内存,而new出来的对象本身存放于堆内存,指向对象的引用还是存放在栈内存。例如如下的代码:
int i=1;
String s = new String( "Hello World" );
变量i和s以及1存放在栈内存,而s指向的对象”Hello World”存放于堆内存。
如下代码:
public
class
StringDemo{
private
static
final
String MESSAGE=
"taobao"
;
public
static
void
main(String [] args) {
String a =
"tao"
+
"bao"
;
String b=
"tao"
;
String c=
"bao"
;
System.out.println(a==MESSAGE);
System.out.println((b+c)==MESSAGE);
}
}
2,==判断的是对象引用是否是同一个引用,判断字符串相等要用equals方法
首先判断a==MESSAGE 同一份字符串常量在内存中只有一份,因此是同一地址,返回true
再次比较(b+c)==MESSAGE 这相当于 new String(b+c)==MESSAGE 这里new了一个String对象,所以返回false
初始化过程顺序:
1.
初始化父类中的静态成员变量和静态代码块
; //类中的static变量和代码块最先被加载
2.
初始化子类中的静态成员变量和静态代码块
;
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.初始化子类的普通成员变量和代码块,再执行子类的构造方法;
java关键字的一些误区:
java中
true ,false , null
在java中不是关键字,也不是保留字,它们只是显式常量值,但是你在程序中不能使用它们作为标识符。
其中const和goto是java的保留字。java中所有的关键字都是小写的,还有要注意true,false,null不是java的关键字,但是你不能把它们作为java标识符用。
sizeof和friendly在java中什么都不是,可以作为标识符。