类和对象
1.语法:
访问限定符 class类名称{
属性 : 访问限定符 属性数据类型
构造方法 : 访问限定符 方法名和类名相同(参数列表){…}
方法 :访问限定符 返回值 方法名称(参数列表){…}
静态属性:访问限定符 static 属性数据类型 属性名称;
静态方法:访问限定符 static 返回值类型 (参数列表){…}
}
2. 访问限定符
1.顶级访问限定符, public (一个文件中只有一个public,类名==文件名)
不写
2.普同访问限定符 public/protected/不写/private
3. this的用法
1.可以访问属性+【方法】
在方法(包括构造方法) this.属性 this.方法(…)
一般用this调用是为了防止命名遮挡,有歧义
2.this 代表这个对象本身
用在打印本身,传递参数 name shadow(命名遮挡)
3.this(…)用在构造方法第一行
4.static静态属性|静态方法
和对象解绑
1.静态方法 没有隐式对象传入,不能用this
2.静态属性 保存位置不同,对象之间可以共享
5.模型
java中 内存简单的分成 栈区|堆区|方法区
栈区:局部变量 形参
堆区:对象(属性信息)
引用在三个区都可以放,要看实际情况放在哪个区
方法区:类信息(方法信息,静态方法信息,静态属性)
6.哪种对象会被视为垃圾,没有引用指向的对象(GC写的再好,也需要性能损耗,对象还是有数量得到)
属性初始化
1.在定义时直接初始化
class A{}
class B{
A ref2=new A();
}
2.在构造函数中初始化
class A {}
class B{ A ref2;
B() {ref2=new A(); } }
3.在构造代码块中初始化
class A {}
class B {
A ref2;
{
ref2=new A();
}
}
如果定义多个代码块,会按顺序执行
代码块的初始化会插入到构造方法中先执行
7. 静态属性初始化(发生在类被加载的过程中)
a.定义时初始化
static A a=new A();
b.静态代码块
static {
a=new A(); //静态代码块也是按照定义顺序来执行
}
类加载:*. java–javac命令编译—> *.class(存在硬盘上的文件) 运行期间(JVM调用相应的类加载器)