JDK8之后运行一个类字节码文件加载在方法区,方法被调用的时候会进栈。
new出来的都会在堆里面开辟空间,每一个都有地址值
this关键字
- this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)
- 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
- 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
构造方法的注意事项
- 构造方法的创建
如果没有定义构造方法,系统将给出一个默认的无参数构造方法
如果定义了构造方法,系统将不再提供默认的构造方法
- 构造方法的重载
如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法
标准类制作
① 类名需要见名知意
② 成员变量使用private修饰
③ 提供至少两个构造方法
- 无参构造方法
- 带全部参数的构造方法
④ get和set方法
提供每一个成员变量对应的setXxx()/getXxx()
⑤ 如果还有其他行为,也需要写上
对象的内存管理:
final:
修饰时为常量不可改变
final int a1 = 10;
a1 = 20;
修饰类时:该类不可被继承
class student extends people{
(报错)
}
final class people{
}
修饰方法时:该方法不可被重写
class student extends people{
public void use(){
}
}
class people{
public final void use(){
}
}
abstract:
1.抽象类里面不一定有抽象方法,但有抽象方法一定要定义为抽象类
2.定位为抽象方法是不可以有函数体的
3.抽象类不可以创造对象,如果不能重写所有的抽象方法就定义为抽象类
4.抽象类可以有普通函数,成员变量等,构造方法
class student extends people{
@Override
void use() {
}
}
abstract class people{
abstract void use();
}
案例:
abstract class Animal{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
abstract void cry();
}
class Dog extends Animal{
@Override
void cry() {
System.out.println(this.getName()+"------");
}
}
class Cat extends Animal{
@Override
void cry() {
System.out.println(this.getName()+"------");
}
}
模板方法的设计模式;模板方法用final进行修饰防止子类将其修改了
接口: