面向对象(总结的点):
如何描述类:类成员四个(属性,块,构造函数,方法)
如何创建对象:对象是执行类的成员
类之间的关系:类继承(接口实现),包含,依赖(属性是对象),
类中的特性:权限修饰符,特征修饰符
类之间的设计问题:设计模式(单例,策略,适配器)
类中的一些细节:内部类,枚举类
内存机制问题:类创建在哪,对象创建在哪,继承关系,静态成员,方法执行都在内存中的哪一块
栈内存 ----> 创建开始,用完回收
堆内存 ----> new创建的对象
方法区 ----> 类,常量,静态元素,内存中只有一份,回收不了
面向过程的编程思想
类 —人类 抽象笼统的概念 描述 — 类事务 具有相同的特征行为
人类 — 有姓名 有性别 — 静态描述特征(特征) — 属性
能吃饭 能说话 — 动态动作行为(做事) — 方法
对象 — 具体的人 人类中一个具体的人—>小明
小明有名字,有性别,能吃饭 能说话
属性:[权限修饰符] 数据类型 变量名;
方法:权限修饰符 返回值类型 方法名字(参数列表) [抛出异常]{
//方法体
}
1.无参数无返回值
2.无参数有返回值
3.有参数无返回值
4.有参数有返回值
public class Demo{
public void changeNum(int x){
System.out.println("初始x="+x);
x = 10;
System.out.println("改变之后的x="+x);
}
}
public class Main {
public static void main(String[] args){
int a = 1;
Demo t = new Demo();
t.changeNum(a);
System.out.println("main里面a的值为"+a);
}
}
/*输出
初始x=1
改变之后的x=10
main里面a的值为1
*/
0.加载类模板到内存的方法区,
1.方法存在堆内存的对象空间里
2.方法的执行是在栈内存中开辟一块临时的方法执行空间(图中红色区域,执行完就被回收)
public class Demo{
public void changeArray(int[] x){
System.out.println("初始x[0]="+x[0]);
x[0] = 10;
System.out.println("改变之后的x[0]="+x[0]);
}
}
public class Main {
public static void main(String[] args){
int[] a = {1,2,3,4};
Demo t = new Demo();
t.changeArray(a);
System.out.println("main里面a[0]的值为"+a[0]);
}
}
/*输出
初始x[0]=1
改变之后的x[0]=10
main里面a[0]的值为10
*/
形参与实参
形参:是方法执行时的临时变量空间
实参:是方法调用时传递进去的参数
方法调用时,会将实参的内容传递给形参,如果内容是基本类型,传递的是值,形参改变,实参不变;如果内容是引用类型,传递的是地址,形参改变,实参也跟着改变
堆内存里的东西是GC来回收的:
Runtime类中提供了几个管理内存的方法
Object类中有一个finalize方法,如果重写也能看见对象回收
GC系统提供的一个线程,回收算法
package gc;
public class Person {
//默认继承Object
public Person() {
System.out.println("对象被创建了");
}
public void finalize() {
System.out.println("对象被回收了");
}
}
=====================================================
package gc;
import gc.Person;
public class Test {
public static void main(String[] args) {
Person p = new Person();
p = null;
System.gc();
}
}
/*
对象被创建了
对象被回收了
*/
Runtime 是一个单例对象,所以要用类名.
Runtime runtime = Runtime.getRuntime();
long max = runtime.maxMemory(); //保留空间+可用空间+空闲空间
long total = runtime.totalMemory();//可用空间+空闲空间
long free = runtime.freeMemory();//空闲空间
System.out.println(max);
System.out.println(total);
System.out.println(free);
/*
1877475328
126877696
124864368
*/