java 执行过程中的内存管理:
code segment : 存放代码
data segment : 存放静态变量、字符串常量
stack (栈): 存放局部变量
heap (堆): 存放new 出来的东西
基础类型变量占一块内存(栈内),引用类型占两块内存,即堆&栈各一部分(heap&stack)
面向对象的设计思想:
分三点:
1)在这个问题中有哪些类,那些对象
2)这些类、对象每一个应该具有什么属性、方法
3)类与类之间具有什么关系(关系分为关联、继承、聚合(聚集,组合)、实现、多态)
关于申明变量的作用范围:
申明变量在大括号内的变量只能在他所在的大括号内有效,出了大括号没人“认识”。
在java中对象赋值时的出现的错误:
赋值语句的标准格式都是:
var=expr
也就是把表达式(expr)的值赋给var(变量)
class Point {
double x;
double y;
double z;
Point(double _x,double _y,double _z){
x=_x; // _x = x 不能将_x值赋于x;
y=_y;
z=_z;
}
}
访问控制
Java权限修饰符置于类的成员定义前,用来限定其对象对该类的成员的访问权限。
修饰符 | 类内部 | 同一个包内 | 子类 | anywhere |
private | Yes | |||
default | Yes | Yes | ||
protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
继承中的构造方法
子类的构造过程中必须调用基类的构造方法。
子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。
使用this(argument_list)调用基类的构造方法;
如果调用super,必须写在子类构造方法的第一行;
如果子类的构造方法中没有显示地调用基类的构造方法,则系统默认调用基类无参数的构造方法。
如果子类构造方法中既没有显示调用基类构造方法,而基类中有没有无参的构造方法,则编译出错。
多态的存在的三个必要条件
要有继承;
要有重写;
基类(父类)引用指向子类对象。
只要上述三个条件满足时,当你调基类(父类)里被重写的方法时,实际你new哪个子类对象就调用子类那个方法。
关于关闭IO流
一般情况下是:先打开的后关闭,后打开的先关闭
另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b
例如处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b
当然完全可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法
如果将节点流关闭以后再关闭处理流,会抛出IO异常。