面向对象的重要特征:封装、继承、多态;
面向对象的语言的语言并不止Java,C++也是面向对象的语言;
访问限定符
- public:在哪里都可以使用(公开的);
- private:仅在当前类可以使用(私有的);
- 不写任何限定符:只能在当前包使用(默认的);
- protected:可以在当前包使用,也可以在不同包的子类中使用(被保护的);
封装
封装:就是将类的实现细节进行隐藏;仅对外公开接口来和对象进行交互;
实现封装后:在当前类外就无法直接拿到某个被封装的字段或方法(被private所修的字段或方法);
static关键字
static修饰成员变量(静态变量)
被static所修饰的成员变量不属于对象——不能使用对象的引用来访问成员变量;
被static修饰的成员变量属于当前类,是类变量——所以可以通过类的引用进行访问;
静态的只能是成员变量,不能是局部变量(Java中没有全局变量的说法);
static修饰成员方法
static修饰的成员方法叫做静态方法,是类方法,不属于对象;
静态方法可以通过类访问,也可以通过对象访问(不建议);
静态方法中不能访问任何非静态成员变量;
静态方法中不能调用任何非静态方法;
代码块
使用大括号{}定义的代码,称之为代码块;
- 普通代码块
- 构造代码块(也叫实例代码块)
- 静态代码块
- 同步代码块(多线程学)
构造代码块:
- 只有在创建对象时才会被执行;
静态代码块:
- 一般用于初始化静态成员变量;
- 类中有多个静态代码块,则会一次执行(合并);
- jvm在加载类时就会为静态成员变量开辟空间并初始化;
内部类和外部类
在一个类1的内部有一个类2,则类1称为外部类,类2称为内部类;
内部类和外部类共用一个Java源文件,但是编译后内部类会形成一个单独的字节码文件;
内部类分类:
实例内部类:
- 在实例内部类中可以直接访问外部类中的任何成员;
- 当内部类和外部类成员同名时,优先使用内部类的成员(局部优先);
- 内部类和外部类成员同名时,通过外部类名.this.成员名进行访问;
- 访问内部类的成员必须要创建实例化对象;
静态内部类 :
被static所修饰的内部类就是静态内部类;
静态内部类中只能访问外部类中的静态成员;
创建静态内部类对象时,不需要先创建外部类对象;