目录
一、变量及其传递
1. 基本类型与引用类型
① 基本类型:其值直接存储于变量中(在这里)
② 引用类型:变量占一定内存空间,引用的对象实体也占一定空间(在那里)
【说明】引用型变量用 new 来创建
【举例】MyDate 类演示基本类型与引用类型
class MyDate {
private int day;
private int month;
private int year;
public MyDate(int y, int m, int d) {
year = y;
month = m;
day = d;
}
void addYear() {
++year;
}
public void display() {
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
MyDate m = new MyDate(2003, 9, 22);
MyDate n = m; // 引用到同一个对象,复制的是引用,不是对象实体
n.addYear();
m.display();
n.display();
}
}
2. 字段变量与局部变量
① 字段变量与局部变量的概念
→ 字段变量:在类中定义的变量
→ 局部变量:在方法中定义的变量或方法的参变量
② 从内存角度来看
→ 存储位置:字段变量为对象的一部分,存储于堆中;局部变量存储于栈中
→ 生命周期:字段变量随对象的存在而存在,局部变量随方法的调用而存在
→ 初始值:字段变量可以自动赋初值(new 对象的时候初始化),局部变量必须显式赋值
③ 从语法角度来看
→ 字段变量属于类,可以用 public,private,static,final 来修饰
→ 局部变量不能够被访问控制符以及 static 修饰
→ 都可以被 final 修饰
3. 变量的传递
→ 有调用对象方法时,要传递参数
① 在传递参数时,Java 是值传递,将表达式的值赋值给形式参数
② 对于引用型变量,传递的值是引用值,而不是复制对象实体,可以改变对象的属性
class TransByValue {
final int c = 7;
public static void modify(int a) {
++a;
}
public static void modify(int[] b) {
++b[0];
System.out.println(b[0]);
b = new int[5];
++b[0];
System.out.println(b[0]);
}
public static void main(String[] args) {
int a = 0;
modify(a);
System.out.println(a);
int[] b = new int[1];
modify(b); // 复制了一份引用过去过去
System.out.println(b[0]);
TransByValue transByValue = getNewObject();
System.out.println(transByValue.c);
}
public static TransByValue getNewObject() {
return new TransByValue();
}
4. 方法的返回
① 返回基本类型
② 返回引用类型:可以存取对象实体
二、多态
→ 多态(polymorphism):一个程序中相同的名字表示不同的含义的情况
→ 多态的特点:大大提高了程序的抽象程度和简洁性(面向对象的重要特性)
1. 多态的两种情况
① 编译时多态
→ 重载(overload)多个同名的不同方法,在编译时决定
② 运行时多态
→ 覆盖(override)子类对父类方法进行覆盖
→ 动态绑定(dynamic binding)虚方法调用,在运行时决定
→ 在调用方法时,程序会自动地确定调用子类对象的方法
2. 上溯造型与虚方法的调用
① 上溯造型(upcasting):把派生类当作基本类来处理
Person p = new Student();
void fun(Pe