Java之内部类、包及代码块
个人通俗理解:
1、内部类:有点类似于写在父类中的子类,根据位置不一样为不同的名字,和相应的访问方式不同;不过要访问外部类的话,需要充分运用好this(本类)的这个关键字;要是需要快速的创建子类对象的话,可以用到匿名内部类。
2、包:其实就是个放类的文件夹,当需要用的别的包里的类的时候,则需要导包。不过存在四种不同的修饰符,则对应四种访问权限(default只是理论上的,实际上是不需要写的,直接默认了)
3、代码块:按优先级的话,静态代码块的肯定在第一次使用的时候就执行这唯一的一次了,一般都是用在初始化的时候。定义在类中成员位置的构造代码块也是在创建对象的时候优于构造方法执行一次。而局部代码块则是定义在方法中的,它不能被外界访问的,但可以在其内部访问外界的。(存在即是合理的,先理解下)
一、内部类:
1、概念:
定义在其他类的内部的类就叫内部类,其他的类被称为外部类。在内部类中可以直接访问外部类的所有成员。
2、分类:
成员内部类、局部内部类。
3、成员内部类:
成员内部类,定义在外部类中的成员位置。
class 外部类 { 修饰符 class 内部类 { //其他代码 } }
访问方式:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
4、局部内部类:
局部内部类,定义在外部类方法中的局部位置。
class 外部类 { 修饰符 返回值类型 方法名(参数) { class 内部类 { //其他代码 } } }
访问方式:
在外部类方法中,创建内部类对象,进行访问
class Party {//外部类,聚会 public void puffBall(){// 吹气球方法 class Ball {// 内部类,气球 public void puff(){ System.out.println("气球膨胀了"); } } //创建内部类对象,调用puff方法 new Ball().puff(); } }
public static void main(String[] args) { //创建外部类对象 Party p = new Party(); //调用外部类中的puffBall方法 p.puffBall(); }
5、匿名内部类:
定义的匿名内部类有两个含义:
①、 临时定义某一指定类型的子类;
②、 定义后即刻创建刚刚定义的这个子类的对象;
作用:
匿名内部类是创建某个类型子类对象的快捷方式。
new 父类或接口(){ //进行方法重写 };
二、包:
1、概念:
java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件。
2、声明:
package 包名.包名.包名…;
3、访问:
包名.包名….类名
带有包的类,创建对象格式:
包名.类名 变量名 = new包名.类名();
4、导包:
import 包名.类名;
5、访问修饰符:
public | protected | Default | private | |
同一类中 | √ | √ | √ | √ |
同一包中(子类与无关类) | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包中的无关类 | √ |
①、要想仅能在本类中访问使用private修饰;
②、要想本包中的类都可以访问不加修饰符即可;
③、要想本包中的类与其他包中的子类可以访问使用protected修饰
④、 要想所有包中的所有类都可以访问使用public修饰。
⑤、注意:如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。
三、代码块:
1、局部代码块:
局部代码块是定义在方法或语句中
特点:
①、 以”{}”划定的代码区域,此时只需要关注作用域的不同即可(局部代码块内东西不能被外面访问,但是它可以访问外面的东西)
②、方法和类都是以代码块的方式划定边界的。
2、构造代码块:
构造代码块是定义在类中成员位置的代码块-------定义在构造方法中!!!
特点:
①、优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作;
②、每创建一个对象均会执行一次构造代码块。
3、静态代码块:
静态代码块是定义在成员位置,使用static修饰的代码块。
static{ };
特点:
①、它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。
②、 该类不管创建多少对象,静态代码块只执行一次。----只在类加载的时候执行一次!!!不管NEW多少次都执行一次!再创建新对象就不执行了!!!
③、可用于给静态变量赋值,用来给类进行初始化。