向上继承
定义一个Shape类
class Shape {
void draw() {
System.out.println("draw a shape");
}
}
再定义Shape类的子类Circle,它继承Shape类
class Circle extends Shape {
void draw() {
System.out.println("draw a circle");
}
}
此时可以定义一个Shape类型的Circle实例
public static void doSomething(Shape shape) {
shape.draw();
}
public static void main(String[] args) {
Shape circle = new Circle();
doSomething(circle);
}
doSomething方法的作用是调用Shape类型参数的draw方法,doSomething这个方法不用考虑shape的具体实例是什么
标签
Java语言中通过标签可以实现一部分goto语句的作用,同时借助break和continue语句
outer:
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 2; j++) {
System.out.println("usual" + ", i = " + i + ", j = " + j);
if (i == 0) {
System.out.println("**break inner" + ", i = " + i + ", j = " + j);
break;
}
if (i == 1) {
System.out.println("**continue inner" + ", i = " + i + ", j = " + j);
continue;
}
if (i == 2) {
System.out.println("**continue inner" + ", i = " + i + ", j = " + j);
continue outer;
}
if (i == 3) {
System.out.println("**break outer" + ", i = " + i + ", j = " + j);
break outer;
}
}
}
运行结果如下所示:
usual, i = 0, j = 0
**break inner, i = 0, j = 0
usual, i = 1, j = 0
**continue inner, i = 1, j = 0
usual, i = 1, j = 1
**continue inner, i = 1, j = 1
usual, i = 2, j = 0
**continue inner, i = 2, j = 0
usual, i = 3, j = 0
**break outer, i = 3, j = 0
配合this来理解static的含义
在一个类里面,this可以调用自身的方法,而static修饰的静态方法就是没有this的方法,所以不能调用非静态方法,但非静态方法内部可以调用静态方法
finalize()方法和C++的析构函数比较
Java和C++对对象的清理工作大不相同,在C++中,对象可以在栈上分配对象,也可以在堆上分配对象,在栈上的对象是函数的局部变量,超出}范围后生命周期就结束了,而堆上的对象在执行完delete后生命周期也结束了,所以C++中对象的内存在哪个时刻被回收是可以确定的。
而Java中对象在堆中分配,只能通过new创建,当对象无用(没有引用指向它)时,这个对象将等待垃圾回收器来回收占用的内存,回收时间取决于垃圾回收器的工作时间,这时间无法预知。
C++中的对象被回收前,析构函数会被调用;Java中的垃圾回收器运行销毁对象时,会先调用finalize函数,在下一次运行垃圾回收器时才会真正回收对象占用的内存。
访问权限控制
Java中有四种访问权限,分别是public、protected、默认权限(包访问权限)和private
包访问权限
包访问权限是没有使用任何访问权限修饰词的默认权限,只能被当前包下的其他类访问
public:接口访问权限
对于每个人都是可用的
protected:继承访问权限
允许不同包下的子类访问,同时protected也具有包访问权限
private:私有权限
仅允许自身类访问
默认包
当java文件中未指定package时,该文件会被自动归入默认包下,所以所有未指定package的类都能互相访问
Java解释器运行过程
1.寻找环境变量CLASSPATH
2.获取包名,将包名的.转换为/(或者\,视不同系统而定)
3.将得到的路径与CLASSPATH连接,解释器在这目录下查找类名的.class文件