类和对象
- 语法
- 内存模型
- 面向对象的好处 / 如何设计类
-
语法
1. 定义类
【限定符】 class 类名称(ClassName) 【基类的定义】【接口的定义】{
1. 属性
2.构造方法
3.方法(要区分静态方法和方法)
}
2. 定义属性
【限定符】数据类型 属性名称
3.构造方法
【限定符】方法名称(必须和类名一样)(参数列表)【异常】{ //初始化部分 }
构造方法经常用到重载技术
1. 如果没有明确给出构造方法,可以认为java编译默认给一个 public 类名称(){}
2.如果显示的给出了构造方法,默认的构造方法就没有了
4. 定义方法
【限定符】返回值 方法名称(参数列表)【异常列表】{ 方法实现 } -
利用类构造对象的方法
1. 类类型的变量
class A{}
A 变量名; //没有初始化
A 变量名=null; //初始化,但没有构造对象
2.变量名= new 构造方法(实参列表) -
如何使用对象
对象.属性; 对象.方法(实参列表);
使用匿名对象
new 构造方法().属性;
new 构造方法().方法(实参列表); -
访问限定符
没有明确理由的情况下,统统使用private
1.顶级使用前景 修饰外部类
public/不写(包私有)
2.在成员级别 修饰属性、方法、内部类
public/protectde/不写(包私有)/private
3.一个java源文件只能有一个public的外部类,类名称和文件名一样
- 内存模型的理解
1. 把java内存分成三个区域(堆、栈、方法区
或者简单看成两个区(栈、堆)
2. 局部变量、形参 在栈区
生命周期(空间的有效期)是伴随方法的执行结束而消亡的
3. 方法区
类的信息、方法的代码
4. 堆区
对象(属性) - 对象构造
1.当对象没有引用指向它时,这个对象被视为垃圾对象,随后会被垃圾回收站回收
GC(Garbage Collector)
GC做的再好,也是有性能损耗的,注意不要过多产生无用对象
2.调用对象的方法,可以想象成
object.method(); method(object);
调用方法时,想象成会传入一个对象作为饮食的参数
3. 构造对象的过程
A a=new A(…)
1.创建一个引用变量
2.计算对象所需内存的大小,从JVM申请内存(空间),数据未初始化
3.构造方法负责将申请出的内存空间初始化 - 命名遮挡(Name shadow)
局部变量、形参或者其他,与属性、方法或者其他重名,导致直接通过名字访问出现歧义 - 关键字this
1. 通过 this 全名称访问属性、方法
2. 通过 this 调用其他构造方法
但 this 调用,必须出现构造方法第一行
3. this 代表的就是这个对象本身 - static 关键字的用法
1. 修饰属性
2. 修饰方法
3. 修饰内部类
4. 静态代码块
5. import static 包
最核心一点,static 和对象解绑 - 静态属性
1. 存放在类(方法区)
2. 如何访问静态属性
1. 在类内部,以名称直接访问
2.在类外部,Person.createdCount - 静态方法
语法: 【访问限定符】static 返回值 方法名(参数列表)…
public static void main(String[] args){}
因为没有隐式对象
1. this 关键字不能用
2. 对象的普通属性不能访问
3. 无法调用普通方法
调用静态方法
1. 内部 直接调用
2.外部/内部 类名称.方法(…);