语法
1、面向对象的三大特征:封装、继承、多肽
2、定义类
限定符 class 类名称 {
属性 / 静态属性
构造方法(必须要有,如果没定义,默认补一个无参构造方法)
方法 / 静态方法
}
1)属性
限定符 变量类型 变量名;
2)构造方法
限定符 类名称(形参列表) {执行语句}
3)方法
限定符 返回值类型 方法名称(形参列表) {执行语句}
public static int [] rotate(int [] a,int k) {
}
3、实例化对象的语法
new 构造方法(实参列表);
1)new 关键字 // 计算对象内存大小;在堆中申请内存空间;
2)执行构造方法 // 对属性进行初始化
3)把对象的引用赋值给一个引用变量,如果需要;
对象的生命周期:
1)代表对象刚刚申请好空间,内部被初始化为0x0
2)代表对象正在执行构造方法对属性初始化部分
3)代表对象的可使用生命周期阶段
4)代表对象已经被标记为垃圾,但可能还没有被立即收回
4、访问对象的属性或者调用对象的方法
1)如果在类的内部(在类的方法中访问类的属性和调用类的方法)
访问属性
this.属性----------------- 如果没有出现命名的遮挡问题直接使用属性
this.name-----------------name
调用方法
this.方法名称(实参列表)--------------方法名称(实参列表)
this.toString();------------------------------- toString();
2)如果在类的内部(在其他类的方法中访问该类的属性和调用该类的方法)
访问属性
对象的引用.属性名
Person p = new Person(); p.name;
new Person().name
调用方法
对象的引用.方法名称(实参列表)
Person p = new Person(); p.toString();
new Person().toString();
5、this 关键字的作用
1)可以在构造方法中调用其他的构造方法,必须出现在第一行
2)代表该方法被调用时的当前对象的引用
Person p = new Person();
p.toString();
public String toString() {
this; //现在 this 就是 p 所指向的对象的引用
}
6、理解类和对象的内存模型
类信息存在方法区
属性信息存在堆区
7、访问限定符
修饰顶级(Top level)
修饰成员级(Member level)
说法------------------------定义语法-------------------- 说明
public ----------------------public ------------------------所有类都有访问权限
package-private ---------空白 --------------------------只有一个包的类有访问权限
protected----------------- proteted---------------------- 继承时讲
private--------------------- private----------------------- 只有本类有访问权限
8、static 限定符
静态属性 / 静态方法
静态属性不再保存在对象(堆区)中,而是保存在类(方法区)中
static 的含义就是和对象解绑
静态方法调用时,没有隐含着的对象,所以也就无法使用this关键字
在静态方法中无法使用非静态的内容
静态方法中,无法访问普通属性,无法调用普通方法,无法使用 this 关键字
静态属性的存在且只存在一份,表现出共享的特性,类似全局变量
9、属性的初始化规则
静态属性:
1)定义时直接初始化
static int a=10;
2)静态代码块初始化
static {初始化语句}
static
{
a=20;
}
普通属性:
1)定义时直接初始化
int a=10;
2)初始化代码块初始化
{初始化语句}
{
a=10;
}
3)在构造方法中
Person() {a=10;}
class A
{
{
a=0;
}
int a=10;
{
a=20;
}
A()
{
a=30;
}
}
时机:
静态属性:类被加载到内存中时
普通属性:对象被实例时
顺序:
1)类的加载一定发生在对象实例化之前
静态属性的初始化一定在普通属性的初始化之前
2)静态属性初始化顺序,按照定义类时的初始化顺序初始化
3)普通属性初始化顺序,定义时和构造代码块按书写顺序初始化
构造方法中的初始化一定发生在最后,和书写顺序无关