黑马程序员--第四篇:包、权限修饰符、内部类、匿名内部类

  ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a

 href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

1
、包的定义及注意事项

    1: 定义包的格式

        package 包名;

        多级包用.分开即可

    2: 定义包的注意事项

        A:package语句必须是程序的第一条可执行的代码

        B:package语句在一个java文件中只能有一个

        C:如果没有package,默认表示无包名

2、带包的类编译和运行

    1: 手动式

        a:javac编译当前类文件。

        b:手动建立包对应的文件夹。

        c:把a步骤的class文件放到b步骤的最终文件夹下。

        d:通过java命令执行。注意了:需要带包名称的执行

        javacn.itcast.HelloWorld

    2: 自动式

        a:javac编译的时候带上-d即可

        javac -d. HelloWorld.java

        b:通过java命令执行。和手动式一样

不同包下类之间的访问都需要加包的全路径。

3import关键字的概述和使用

    1: 导包的概述

不同包下的类之间的访问,我们发现,每次使用不同包下的类的时候,都需要加包的全路径。比较麻烦。这个时候,java就提供了导包的功能

    2: 导包格式

        import 包名.类名;

        注意:

            这种方式导入是到类的名称。

            虽然可以最后写*,但是不建议。

    3: package,import,class有没有顺序关系(面试题)

      有package在可执行语句的第一句

      import在class上面

      class

4、四种权限修饰符的测试

1: 四种权限修饰符: private(私有的)  , 默认 , protected(受保护的) , public(公共的)

    2: 结论

                  本类      同一个包下      不同包下(子类)  不同包下(无关类)

        private     Y      

        默认        Y          Y

        protected   Y          Y                 Y

        public      Y          Y                  Y             Y

5、类及其组成所使用的常见修饰符

    1: 修饰符:

        权限修饰符:private,默认的,protected,public

        状态修饰符:static,final

        抽象修饰符:abstract

    2: 类:

        权限修饰符:默认修饰符,public

        状态修饰符:final

        抽象修饰符:abstract

       

        用的最多的就是:public

       

    3: 成员变量:

        权限修饰符:private,默认的,protected,public

        状态修饰符:static,final

       

        用的最多的就是:private

       

    4: 构造方法:

        权限修饰符:private,默认的,protected,public

       

        用的最多的就是:public

       

    5: 成员方法:

        权限修饰符:private,默认的,protected,public

        状态修饰符:static,final

        抽象修饰符:abstract

       

        用的最多的就是:public

       

    6: 除此以外的组合规则:

        成员变量:publicstatic final

        成员方法:publicstatic

                  public abstract

                  publicfinal

6、内部类概述和访问特点

    1: 内部类概述:

        把类定义在其他类的内部,这个类就被称为内部类。

        举例:在类A中定义了一个类B,类B就是内部类。

    2: 内部类访问特点

        a:内部类可以直接访问外部类的成员,包括私有。

        b:外部类要访问内部类的成员,必须创建对象。

    3: 程序演示 : 内部类及其访问特点

 

7、内部类分类及成员内部类的直接使用

    A:按照内部类位置分类

        成员位置:在成员位置定义的类,被称为成员内部类。

        局部位置:在局部位置定义的类,被称为局部内部类。

    B:成员内部类

        如何在测试类中直接访问内部类的成员。

        格式:   外部类名.内部类名 对象名 = 外部类对象.内部类对象;

8、成员内部类的常见修饰符及应用

    1: 成员内部类的修饰符:

        private     为了保证数据的安全性

        static  为了方便访问数据

            注意事项:   a: 静态内部类访问的外部类数据必须用静态修饰。

                       b: 成员方法可以是静态的也可以是非静态的

    2: 成员内部类被静态修饰后的访问方式是:

        格式:   外部类名.内部类名 对象名 = new 外部类名.内部类名();

    3: 思考题

        要求:使用已知的变量,在控制台输出30,20,10。

        classOuter {

            publicint num = 10;

            classInner {

                publicint num = 20;

                publicvoid show() {

                    intnum = 30;

                    System.out.println(num);

                    System.out.println(this.num);

                    System.out.println(Outer.this.num);

                }

            }

        }

        classInnerClassTest {

            publicstatic void main(String[] args) {

                Outer.Inneroi = new Outer().new Inner();

                oi.show();

            }  

        }

9、局部内部类访问局部变量的问题

    1: 可以直接访问外部类的成员

    2: 可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能

    3: 局部内部类访问局部变量为什么必须用final修饰?

因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。

为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。

        局部内部类只能访问被final修饰的局部变量。

10、匿名内部类的格式和理解以及匿名内部类的方法调用

    1: 匿名内部类:      就是内部类的简化写法。

    2: 前提:           存在一个类或者接口;这里的类可以是具体类也可以是抽象类。

    3: 格式:

         new 类名或者接口名(){

            重写方法;

         };

    4: 本质是什么呢?

        是一个继承了该类或者实现了该接口的子类匿名对象。

    5: 案例演示

        按照要求来一个匿名内部类

    6: 程序演示:    匿名内部类的方法调用

 

11、匿名内部类的思考题

    思考题

        按照要求,补齐代码

        interfaceInter { void show(); }

        classOuter { //补齐代码 }

        classOuterDemo {

            publicstatic void main(String[] args) {

                  Outer.method().show();

              }

        }

        要求在控制台输出”HelloWorld”

         分析:

         1:Outer.method()

   Outer类里面有个method方法 :

                 a:是个无参的

                 b:通过类名调用 是个静态 

2:Outer.method()又调用了一个方法  使用链式编程 说Outer.method()返回值是一个对象.Outer.method().show(),那么返回的这个对象里面有个show()方法。show()方法中有句输出语句观察一下我们代码里谁有show()方法,只有接口有返回值类型可以写Inter。发现了,接口名作为返回值类型 那么返回的肯定是 该接口实现类的对象。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值