面向对象:
属性存在于堆内存的对象中;
局部变量存在于栈内存的方法中。
属性都有默认初始化值;
局部变量没有默认初始化值。
声明对象是在栈内存中开辟了一个空间,例如
Person s;
实例化一个对象是在堆内存中开辟了空间,例如
Person s = new Person();
没有实体的对象称作空对象,空对象不能使用。
构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用普通成员方法去调用。如果一个构造方法想调用另一个构造方法,需要使用“this(参数列表)”的形式来调用(注意:如果使用this调用构造方法,此语句必须是第一句)。例子见here
浅拷贝与深拷贝:
浅复制:仅仅复制所考虑的对象,而不复制它所引用的对象;
深复制:需要把所复制的对象所引用的对象都复制一遍。
其中clone方法如果不重写的话,默认的就是浅复制。
类变量(静态变量):
static只能用于修饰成员变量,而不能用于修饰局部变量;
静态变量存储在静态存储区,普通变量存储在堆内存中。
静态变量可以通过:ClassName.VariableName的方式访问。类变量被声明为public static final类型时,类变量名称必须使用大写字母。(from w3school)
static修饰的方法称为类方法或者静态方法,static方法不能访问非static变量和方法,也不能使用this、super等关键字(原因-->);
类方法可以通过类名调用,而实例方法必须通过对象调用。
简单例子:
import java.util.Scanner;
class Per{
static int Add(int n){
return n+1;
}
int Sub(int n){
return n-1;
}
}
public class Main {
public static void main(String [] args){
int p = Per.Add(5);
Per s = new Per();
int q = s.Sub(5);
System.out.println(p + " " + q);
}
}