- 访问限定符
对于类的调用者来说, protected 修饰的字段和方法是不能访问的
对于类的 子类 和 同一个包的其他类 来说, protected 修饰的字段和方法是可以访问的
小结: Java 中对于字段和方法共有四种访问权限
private: 类内部能访问, 类外部不能访问
默认(也叫包访问权限): 类内部能访问, 同一个包中的类可以访问, 其他类不能访问.
protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问.
public : 类内部和类的调用者都能访问 - static
- 修饰属性
- 修饰方法
- 代码块
字段的代码块方式有:就地初始化、使用构造方法初始化、使用代码块初始化 - 修饰类
- 代码块
3.1 定义与分类
使用{}定义的一段代码
根据代码块定义的位置以及关键字,可分为四种:
普通代码块、构造块、静态块、同步代码块
3.2 普通代码块
定义在方法中的代码块
public class Main{
public static void main(String[] args) {
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x1 = " +x);
}
int x = 100 ;
System.out.println("x2 = " +x);
}
}
3.3 构造代码块
构造块:定义在类中的代码块(不加修饰符)。也叫实例代码块。构造代码块一般用于初始化实例成员变量
注:实例代码块优先于构造函数执行
3.4 静态代码块
使用static定义的代码块。一般用于初始化静态成员属性
注:
静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的
静态代码块执行完毕后,实例代码块(构造块)执行,再然后是构造函数执行 - 内部类
在Java中,可以将一个类定义在另一个类里面或者方法里面,这样的类称为内部类。内部类可分为静态内部类、匿名内部类、成员内部类和局部内部类。
4.1 静态内部类
public class Test{
static class B {
}
}
4.2 匿名内部类
定义:是在一个方法或是代码块中定义的类,并且没有显示申明类的名称
public class Test{
public static void main (string[ ] args) {
//定义了一个匿名内部类
A a = new A(){
};
}
}
class A{
}
- 类和对象的内部布局
5.1 局部变量和方法栈桢
Public class Main{
Public static void swap(int a, int b) {
int tem = a;
a = b;
b = tmp;
System.out.printf("swap a=%d, b=%d%n", a, b);
}
public static void main(String[] args) {
int a = 1;
int b = 2;
swap(a, b);
System.out.printf("main a=%d, b=%d%n", a, b
}
}
输出结果为
Swap a=2,b=1 main a=1,b=2
5.2 类和类变量
对于类和类变量来说,一定要加载到类以后才会加载到方法区,并会进行初始化赋值。没有显示的赋值操作,对于基本类型的赋值就是基本的默认值。
5.3 对象和成员变量
对象要在成员变量初始化赋值完成,构造方法调用执行初始化操作以后,才算创建完成。对象存储在堆里面,成员变量存储在堆里面的对象中。如果是成员变量是引用类型,会指向引用的对象