--------------------------------------访问修饰符----------------------------------------------------
------------------------------------------------------------------------------------------------------
本类 同包 非同包
子类 非子类 子类 非子类
------------------------------------------------------------------------------------------------------
private √
只有该类可以访问
------------------------------------------------------------------------------------------------------
默认(同包) √ √ √
相同数据包的类可以访问
-------------------------------------------------------------------------------------------------------
protected √ √ √ √
该类及其子类成员可以访问,同一个包中的类也可以访问
-------------------------------------------------------------------------------------------------------
public √ √ √ √ √
该类或非该类均可访问
------------------------------------------------------------------------------------------------------
本类 同包 非同包
子类 非子类 子类 非子类
------------------------------------------------------------------------------------------------------
private √
只有该类可以访问
------------------------------------------------------------------------------------------------------
默认(同包) √ √ √
相同数据包的类可以访问
-------------------------------------------------------------------------------------------------------
protected √ √ √ √
该类及其子类成员可以访问,同一个包中的类也可以访问
-------------------------------------------------------------------------------------------------------
public √ √ √ √ √
该类或非该类均可访问
封装get/set的好处
可以将某个属性改变为只读只写
可以对用户外部输入的值进行有效性控制
对外隐藏内部属性存放结构
static(静态)
static属性(类属性,常量属性一般为static)
全类共享一个值,值这个依赖于最后一次赋值
跟对象无关,只跟类有关
static属性(类属性,常量属性一般为static)
全类共享一个值,值这个依赖于最后一次赋值
跟对象无关,只跟类有关
单独存储为数据段静态区
static在类加载器就被产生了
static方法(类方法)
static修饰的方法,只能调用static修饰的属性和方法
非static方法可以用static属性或方法
跟对象无关,只跟类有关
在类加载时static被优先加载
static在类加载器就被产生了
static方法(类方法)
static修饰的方法,只能调用static修饰的属性和方法
非static方法可以用static属性或方法
跟对象无关,只跟类有关
在类加载时static被优先加载
初始化块
实例初始化块(用途不大)
在产生对象时自动调用,没有声明部分只有一对花括号
实例初始化块会在产生对象之后,但是在执行构造方法我们写的代码之前被自动调用
它的时机导致它并不常用,因为完全可以把这个代码直接写在构造方法里
实例初始化块(用途不大)
在产生对象时自动调用,没有声明部分只有一对花括号
实例初始化块会在产生对象之后,但是在执行构造方法我们写的代码之前被自动调用
它的时机导致它并不常用,因为完全可以把这个代码直接写在构造方法里
静态初始化块,(当我们需要预先加载资源时就实现在静态初始化块中,项目中比较常见)
在产生对象时自动调用,static加一对花括号,在加载期被执行且只执行一次
static修饰的方法,只能操作static修饰的属性和方法
跟对象无关,只跟类有关
在产生对象时自动调用,static加一对花括号,在加载期被执行且只执行一次
static修饰的方法,只能操作static修饰的属性和方法
跟对象无关,只跟类有关
总结static
1)跟对象无关,只跟类有关
2)凡是static修饰的在加载期一定有有特殊动作
3)工具类的工具方法使用static
4)static不能修饰构造方法
----------------------------------------------------------------------------------------------------------------------
内部类
在java中还可以在类的内部定义类。这种类的内部定义的类,称之为内部类。内部类所在的类称为外部类
特点
独立的一个class文件
同样需要编译,同样可以产生对象
分类
成员内部类
在方法外,外部类中,定义在内部类当中,和外部类的属性/方法/构造,处于平行地位。
拥有独立的class文件,其命名规则----外部类的类名+$+内部类的类名,可以使用各种访问修饰符
使用后的效果和属性/方法/构造是一样的,可以定义各种属性/方法/构造/初始化块/甚至可以在定义内部类
属性和方法不能是static,用法仍然是产生对象,调用方法或属性
语法:先要new出外部类对象,然后用外部类对象.的方式new出内部类
1)跟对象无关,只跟类有关
2)凡是static修饰的在加载期一定有有特殊动作
3)工具类的工具方法使用static
4)static不能修饰构造方法
----------------------------------------------------------------------------------------------------------------------
内部类
在java中还可以在类的内部定义类。这种类的内部定义的类,称之为内部类。内部类所在的类称为外部类
特点
独立的一个class文件
同样需要编译,同样可以产生对象
分类
成员内部类
在方法外,外部类中,定义在内部类当中,和外部类的属性/方法/构造,处于平行地位。
拥有独立的class文件,其命名规则----外部类的类名+$+内部类的类名,可以使用各种访问修饰符
使用后的效果和属性/方法/构造是一样的,可以定义各种属性/方法/构造/初始化块/甚至可以在定义内部类
属性和方法不能是static,用法仍然是产生对象,调用方法或属性
语法:先要new出外部类对象,然后用外部类对象.的方式new出内部类
静态内部类--成员变量的特例--用static修饰的成员变量
拥有独立的class文件,其命名规则----外部类的类名+$+内部类的类名,
可以使用各种访问修饰符可以使用各种访问修饰符使用后的效果和属性/方法/构造是一样的,
可以定义各种属性/方法/构造/初始化块/甚至可以在定义内部类
属性和方法可以是static,与普通成员内部不同
语法:无需产生外部类的对象,直接使用外部类的类名。
内部类类名的方法作为它的类型,new出来即可
静态内部类的方法不能操作外部类的非静态属性/方法,只能操作外部类中静态的属性/方法
局部内部类(在方法内)
定义在外部类某个方法之中,拥有独立的class文件,其命名规则---外部类的类名+ $ + 序号(从1开始) + 内部类的类名
不能使用访问修饰符,使用后效果和局部变量一样,可以定义各种属性/方法/构造/初始化块/甚至可以在定义内部类
属性和方法不能是static,只能在本方法中使用,直接new出来,用内部类对象.的方式进行操作
局部内部类不能访问外部类方法中的局部变量,只能访问方法中的常量
拥有独立的class文件,其命名规则----外部类的类名+$+内部类的类名,
可以使用各种访问修饰符可以使用各种访问修饰符使用后的效果和属性/方法/构造是一样的,
可以定义各种属性/方法/构造/初始化块/甚至可以在定义内部类
属性和方法可以是static,与普通成员内部不同
语法:无需产生外部类的对象,直接使用外部类的类名。
内部类类名的方法作为它的类型,new出来即可
静态内部类的方法不能操作外部类的非静态属性/方法,只能操作外部类中静态的属性/方法
局部内部类(在方法内)
定义在外部类某个方法之中,拥有独立的class文件,其命名规则---外部类的类名+ $ + 序号(从1开始) + 内部类的类名
不能使用访问修饰符,使用后效果和局部变量一样,可以定义各种属性/方法/构造/初始化块/甚至可以在定义内部类
属性和方法不能是static,只能在本方法中使用,直接new出来,用内部类对象.的方式进行操作
局部内部类不能访问外部类方法中的局部变量,只能访问方法中的常量
匿名内部类---局部内部类的特例
由于没有类名,所以只能用1次----在生产它的对象的时候同时去定义它,语法及其特殊
拥有独立的class文件,其命名规则----外部类的类名+ $ + 序号(从1开始)
连类名都没有,没有class关键字,当然就不能使用任何访问修饰符
产生对象的语法和类的定义语法是写在一起的,只能用这一次,不能定义构造器,因为没有类名
属性和方法不能是static,如果想在方法中操作它的属性和方法,
只能在new出来以后马上.操作属性/方法,可以操作私有的属性/方法
局部内部类不能访问外部类方法中的局部变量,只能访问方法中的常量
由于没有类名,所以只能用1次----在生产它的对象的时候同时去定义它,语法及其特殊
拥有独立的class文件,其命名规则----外部类的类名+ $ + 序号(从1开始)
连类名都没有,没有class关键字,当然就不能使用任何访问修饰符
产生对象的语法和类的定义语法是写在一起的,只能用这一次,不能定义构造器,因为没有类名
属性和方法不能是static,如果想在方法中操作它的属性和方法,
只能在new出来以后马上.操作属性/方法,可以操作私有的属性/方法
局部内部类不能访问外部类方法中的局部变量,只能访问方法中的常量