一、补充下节课内容:
1、对象的生命周期
(1)对象刚刚计算好对象内存大小,在堆内申请好空间,内部被初始化为0x0
(2)对象正在执行构造方法对属性初始化部分
(3)对象的可使用生命周期阶段
(4)对象被标记为垃圾,但可能还有被立即回收的时期
2、
(1)一个源文件中只能有一个public 类,该类的名称必须和文件名一样
(2)一个类会生成一个class字节码文件
3、this关键的作用(总结)
(1)可以在构造方法中调用其他的构造方法,必须出现在第一行
(2)代表该方法被调用时的当前对象的引用
4、理解类和对象的内存模型
类信息存在方法区
属性信息存在堆区
=====================================================================
二、包:
1、自定义一个包(包:组织代码)
(1)新建目录,目录名称是包名称(全小写,单词之间用下划线_分割)
(2)定义目录,在包里边建立Java文件,写类
2、使用包:
import 包名称.类名称;
import p1.HelloWorld;
三、访问限定符(影响的是访问权限)
1、分为两种情况:1)修饰顶级(Top-level)2)修饰成员级(Member-level)
2、四种访问限定符
说法 | 定义语言 | 说明
public | public | 所有类都有访问权限
package-private | 空白 | 只有一个包的类才有权限访问
protected | protected | 留到讲完继承再讲
private | private | 只有本类才有访问权限
注意:其中public、package-private才能修饰顶级;四种访问限定符都能修饰成员级
3、
a包的A类定义的属性 | a包的A类的方法 | a包下B类方法中 | b包下的C类方法
publilc | 有 | 有 | 有
package-private | 有 | 有 | 没有
private | 有 | 没有 | 没有
四、静态方法 | 静态属性(static)
1、方法:普通方法(方法)| 静态方法(类方法)
2、属性:普通属性(属性)| 静态属性(类属性)
3、!!!!!!!!!!!!!static 的含义就是和对象解绑!!!!!!!!!!!!
4、静态属性不再保存在对象(堆区)中,而是保存在类(方法区)中
5、静态方法调用时,没有隐含着的对象,所以也就无法使用this关键字
6、访问静态属性、调用静态方法语法:
在类内部:
1)属性名称; a)方法名称
2)类名称.属性名称; b)类名称.方法名称(实参列表)
3)this.属性名称 //保证当前方法不是静态方法
c)this.方法名称(实参列表) //保证当前方法不是静态方法
在类外部:
1)访问属性:类名称.属性名称; | 对象的引用.属性名称
2)调用方法:类名称.方法名称(实参列表);| 对象的引用.方法名称(实参列表);
强调:
在静态方法(静态上下文)中,无法使用this关键字。因为没有一个隐式的对象和该方法绑定
1)不能访问普通属性;2)不能调用普通方法
7、表现出来的特性:
一个类的所有对象,时可以共享静态属性的;(可以适当的看作时C语言的全局变量)
五、初始化的机制
1、属性的初始化(发生在对象的实例化的时候)
(1)定义时被初始化 int a=10;
(2)构造代码块时 { a=10; }
(3)在构造方法中初始化 Person (){ a = 10; }
注意:(1)和(2)优先按照定义顺序执行;(3)最后执行
例如:
class A{
{ a = 0; }
int a =10;
{ a = 20; }
A() {
a=30;
}
}
最后结果为30 其中a值的过程为======>0,10,20,30
2、静态属性的初始化(发生在类被加载的时候)
(1)定义时被初始化
static int a=10;
(2)静态构造代码
static {
a = 20 ;
}
(1)和(2)按照定义的顺序依次顺序执行
六、没太懂
类的信息一开始是以字节码(bytecode)*.class 形式保存在磁盘上的
类的加载过程就是 类加载器(ClassLoader)在对象的目录上找到指定类的字节码文件,并进行解析,然后放到内存的方法区的过程
类只有在被使用到的时候才会进行加载(一般不会卸载)
1)用类去实例化对象
2)调用静态方法
3)访问静态属性
类的加载一定是发生在对象实例化之前