类的定义?
类定义的格式
public 修饰词 class 类名 {
// 成员变量
// 静态代码块
// 代码块
// 成员⽅法
}
举例:
public class Student {
// 成员变量
String name; // 姓名
int age; // 年龄
static{}//静态代码块
// 成员⽅法
// 学习的⽅法
publicvoid study() {
System.out.println("好好学习,天天向上");
}
// 吃饭的⽅法
publicvoid eat() {
System.out.println("学习饿了要吃饭");
}
}
类的修饰词
static修饰词
类不能用static来修饰,不过可以修饰内部类
-
创建内部类对象,需要调用外部类对象来完成
-
加入static关键字后,可以直接创建内部类对象
final修饰词
final:不可改变。可以⽤于修饰类、⽅法和变量。
- 类:被修饰的类,不能被继承。
- ⽅法:被修饰的⽅法,不能被重写。
- 变量:被修饰的变量,不能被重新赋值。
abstract修饰词
使⽤ abstract 关键字修饰的类,该⽅法就成了抽象类
-
如果⼀个类包含抽象⽅法,那么该类必须是抽象类。
-
如果⼀个类是抽象类,那么该类不一定有抽象方法。
使用:
-
抽象类不能被实例化,也就是不能创建对象
-
继承抽象类的⼦类必须重写⽗类所有的抽象⽅法。
-
否则,该⼦类也必须声明为抽象类。最终,必须有⼦类实现该⽗类的抽象⽅法,
成员变量
成员变量的私有化
-
成员变量用private进行修饰
-
并且提供一对get和set方法
-
封装成员变量,并且提供get/set方法打破封装
成员变量与局部变量的对比
- 在类中的位置不同
- 成员变量:类中,⽅法外
- 局部变量:⽅法中或者⽅法声明上(形式参数)
- 作⽤范围不⼀样
- 成员变量:类中
- 局部变量:⽅法中
- 初始化值的不同
- 成员变量:有默认值
- 局部变量:没有默认值。必须先定义,赋值,最后使⽤
- 在内存中的位置不同 了
- 成员变量:堆内存
- 局部变量:栈内存
- ⽣命周期不同
- 成员变量:随着对象的创建⽽存在,随着对象的消失⽽消失
- 局部变量:随着⽅法的调⽤⽽存在,随着⽅法的调⽤完毕⽽消失
成员方法
关键字 修饰词 返回值类型 方法名(参数类型 参数名) {
//方法体
//return 返回值;
}
更多有关方法的详解请看 [JAVASE复习]04.方法
构造方法
当⼀个对象被创建时候,构造⽅法⽤来初始化该对象,给对象的成员变量赋初始值。
注意:
-
如果你不提供构造⽅法,系统会给出⽆参数构造⽅法。
-
如果你提供了构造⽅法,系统将不再提供⽆参数构造⽅法。
-
构造⽅法是可以重载的,既可以定义参数,也可以不定义参数。
静态代码块与代码块
静态代码块:定义在成员位置,使⽤static修饰的代码块{ }。
- 位置:类中⽅法外。
- 执⾏:随着类的加载⽽执⾏且执⾏⼀次,优先于main⽅法和构造⽅法的执⾏。
- 作⽤:给类变量进⾏初始化赋值。
内部类
- 成员内部类:也叫做普通内部类,定义在成员方法的内部
- 静态内部类:用static进行修饰的内部类,加入static关键字后,可以直接创建内部类对象
- 匿名内部类:没有名字的类,属于局部内部类,常用于实现接口
JAVA类初始化的顺序
-
如果这个类还没有被加载和链接,那先进行加载和链接
-
假如这个类存在直接父类,并且这个类还没有被初始化(注意:在一个类加载器中,类只能初始化一次),那就初始化直接的父类(不适用于接口)
-
加入类中存在初始化语句(如static变量和static块),那就依次执行这些初始化语句。
-
总的来说,初始化顺序依次是:静态变量/静态代码块 -> main方法 -> 非静态变量/代码块 -> 构造方法
-
如果有父类,则顺序是:
- 父类–静态变量/父类–静态代码块
- 子类–静态变量/子类–静态代码块
- 父类–变量/父类–代码块
- 父类–构造器
- 子类–变量/子类–代码块
- 子类–构造器