UML图:
1.类名
2.静态属性
3.动态方法
面向对象的方法分析(栈、堆、方法区)下图:
public class SxtStu{
//属性fields
int id;
String sname;
int age;
Computer comp;
//方法
void study(){
System.out.println("我在认真学习! 使用电脑:" + comp.brand);
}
void play(){
System.out.println("我在玩游戏!王者农药!");
}
//构造方法。用于创建这个类的对象。无参的构造方法可由系统自动创建
SxtStu(){
}
public static void main(String[] args){
SxtStu stu = new SxtStu();
stu.id = 1001;
stu.sname = "小马哥";
stu.age = 18;
Computer c1 = new Computer();
c1.brand = "戴尔";
stu.comp = c1;
stu.play();
stu.study();
}
}
class Computer{
String brand;
}
构造器(构造方法)
1.构造方法名称和类名保持一致
2.通过new关键字调用
3.构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值
4.如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加
构造方法的第一句总是super();
垃圾回收
1.发现无用的对象
2.回收无用对象占用的内存空间
相关算法:
1.引用计数法
优点:算法简单。缺点:“循环引用的无用对象”
2.引用可达法(根搜索算法)
分代垃圾回收机制:
年轻代:Eden、Survivor 年老代Tenured/Old 持久代
Eden (Minor GC) ----> Survivor1、Survivor2 (Major GC) ----> Tenured(Full GC)
this关键字
this的本质就是“创建好的对象的地址”!由于在构造方法调用前,对象已经创建。
因此,在构造方法中也可以使用this代表“当前对象”。
this不能用于static方法中。
创建一个对象分为如下四步:
1.分配对象空间,并将对象成员变量初始化为0或空
2.执行属性值的显式初始化
3.执行构造方法
4.返回对象的地址给相关的变量
static关键字:
静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效
static修饰的成员变量和方法,从属于类。普通的变量和方法从属于对象的。
非静态方法可以调用静态属性和静态方法,而静态方法不能调用非静态属性和非静态方法(内存图)
故this不能用于静态方法中
静态初始化块:
上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止。
参数传值机制:
JAVA中,方法中所有参数都是“值传递”
基本数据类型参数的传值:传递的是值的副本,基本不会影响原件
引用类型参数的传值:传递的是值的副本。但是引用类型指的是“对象的地址”。因此副本和原参数都指向同一个”地址“。
JAVA包机制:
包对于类,相当于文件夹对于文件的作用。
package使用的两个要点:
1.通常是类的第一句非注释语句。
2.包名:域名倒着写即可,再加上模块名,便于内部管理类。