JAVA中的四种访问修饰符
1.private
private —私有的
表示被修饰的类、属性、方法只允许由此类的对象调用,而不允许其他类、其他包或者子类访问。
相当于每个人都有自己的私人密码,这个密码是不允许被别人访问的,包括自己的亲人、同学、朋友,可提高安全性级别
2.default
default —当没有写任何修饰符时默认
即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问,不同包或同包的子类均不可访问。
3.protect
介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
4.public
java中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。即被修饰后允许任何类进行访问,想当于公共用品。
封装的好处
1.类的成员变量可以成为只读或者只写的
2.类可以对存储在其成员变量中的内容有一个整体的控制
3.类的用户不需要知道类是如何存储数据的
static修饰属性
1.现象:用static修饰的属性,全类共享一个值
无论哪个对象对该属性进行改动,全类所有对象都被改动了
2.原因:static的属性是单独存放在内存中的静态区,而不是存放在每个对象身上的,所以它可以直接通过(类名.变量名)的方式操作
3.特殊操作:它可以直接通过(类名.变量名)的方式操作
这是结果而不是设计static的原因
注意:能用static修饰的属性是极少的
除非你能真正保证它是全类共享的一个值,否则是不允许的
使用最多?常量属性可以无脑设计加“static”
static修饰方法
1.现象:
(1)可以直接通过类名.方法名的方式操作
(2)static的方法中不能出现super和this
(3)static的方法中不能访问非static的属性行为
2.原因:
加载期,会首先加载静态方法和属性,这个时候还没有对象产生
在加载静态方法的时候还不认识非静态的属性或非静态的方法,因此会报错
3.特殊设计:
只有工具类的工具方法才能定义为static
如果一个方法不需要执行到对象本身相关的数据或行为的时候,那么这个方法才可以定义为static
实例初始化块
能在类里写的第四种东西(属性、初始化块、构造、行为)
1.书写位置
写在属性之后,构造之前
2.什么时候调用??
默认在初始化对象前被自动调用,每产生一个对象,就被调用一次
分析
1、都是代码块,都已经有当前对象,所以凡是可以写在初始块中的代码都可以写在构造方法中
2、构造方法内部的代码是在实例化初始化块之后执行的,最终效果以构造为准
静态初始化块
1.书写位置
写在属性之后,构造之前
2.什么时候调用??
默认在类加载时被自动调用,一个类只加载一次(第一次使用),所以这个代码只执行一次
分析
1、这是目前我们学的唯一一个在加载器就能执行的代码
2、在加载期做事情,消耗的是加载期的时间,不会影响运行期时间
结论:
静态初始化块非常有用!
内部类
可以在一个类当中定义的第五部分
内部类分类:1、成员内部类 2、局部内部类
成员内部类
书写位置:直接写在外部类本身当中,与外部类的属性,构造,行为,初始化块平行
成员内部类除了定义的位置特殊之外,它仍是一个完整的类
表现在:
1、可以拥有属性,构造,行为,初始化块,甚至是它的内部类
2、它是一个独立的类,所以有独立的class文件
3、成员内部类可以像属性、行为、初始化块一样,用static修饰—静态内部类
1、class文件的个数与Java文件个数无关,与类的个数有关
2、class文件的名字与Java文件的名字无关,而与类的类名有关
3、如果类是public的,它的名字必须和java文件名一致,一个Java文件只能有一个公共类
命名规则:
外部类类名$内部类类名.class
局部内部类
书写位置:是定义在外部类某个方法里面的
局部内部类除了定义的位置特殊以外,它们是一个完整的类
局部内部类有一种特例,叫匿名内部类
命名:外部类类名$数字内部类类名.class
匿名内部类
没有类名它是在new对象的同时给出类的定义,所以只能产生一个对象,用这一次