zoukankan      html  css  js  c++  java
  • 修饰符-包-内部类-代码块执行顺序


    1.访问权限修饰符
         从大到小的顺序为:public--protected--default--private
         private--只能在同一类中使用;
         default--不用写出来,默认不加.可以被同一包中的类使用
         protected--可以被不同包的子类使用
         public--可以被不同包的其它类使用

    2.各种修饰符的修饰对象(可修饰哪些:类/接口/方法/属性)(多个修饰符连用是可以没有顺序的!)
         1)访问权限修饰符:public/default---可修饰类/接口/方法/属性,default不用写出来;
             补充:default还可用于修饰接口中的默认方法,必须标明,且不能与static共存.默认方法由实现类的实例对象调用(java8新特性);
         2)静态修饰符:static --修饰属性/方法/代码块/类(只能是内部类);
           ---abstract与static不能共存(理解:被static修饰后的方法可与类同时初始化,被全局使用;而abstract修饰后需覆写后方可使用,时间上矛盾!)
           ---abstract与final不能共存(理解:被final修饰的方法不可覆写,被abstract修饰的方法需要被覆写,矛盾!所以无法共存)
             补充:static还可修饰接口中的类方法,必须标明,且不能与default共存,类方法由接口直接调用(java8新特性);
           ---abstract与private不能共存(方法若被private修饰不可更改,abstract需要被覆写,矛盾!)
         3)final--修饰类/属性/方法/方法中的参数(修饰后可被局部内部类访问);
         4)abstract--修饰类/接口/方法;

    3.关于修饰符的默认情况:
         1)接口默认为 default;只能在本包中访问
             接口中的变量默认为 public static final(即常量,命名时需全部大写,三个修饰符没有顺序,实际开发中通常不在接口中写变量);
             接口中的方法/内部类/内部接口/内部枚举默认为 public abstract;
         2)类中方法的权限修饰符若不写,则默认为default:举例如下:
           

      1  interface IA{
      2                  void show();//编译后:public abstract void show();
      3              }
      4              class A implements IA{
      5                  void show(){//类中方法的权限修饰符若不写,则默认为default.重写错误:这里使用的默认的访问修饰符    ,比父类的访问修饰符小了,这是不允许的。    
      6                      System.out.println("Hello");
      7                  }
      8              }
      9              m    ain(){
     10                  new A().show();
     11              }

        
         补充:
         1)关于接口的默认访问权限:
             1)接口修饰符无论加与不加,始终为public  <开发实战经典>P192
             2)如果标明为public,则为public,如果不写,则默认为包的访问权限(仅可在本包中实现) <java疯狂讲义 第三版>P191
             操作:包1中创建接口A(不加public),包1和包2中分别实现该接口,包1中实现类报错(导包后也报错,提示不可见).
                 包1中创建接口A(加public),包1和包2中分别实现该接口,包1中需导包.
             结论:<疯狂讲义>中的理解正确.
         2)接口名称前的修饰符:可以使用abstract修饰.

    ==========================================================================================

    3.包
         java中的包,其实就是电脑中的文件夹,包中存放的是.class文件,当class文件很多的时候,采用多个包进行存放,称之为分包管理.
         1).使用的类与当前类在一个包中,无需导包;
         2).使用的类在java.lang中无需导包;
         3).其它情况必须导包;
         4).java常用系统包:
             java.lang--基本包,自动导入,String等都在此包中;
             java.lang.reflect--反射机制的包,java.lang的子包;
             java.util--工具包,常用类库/日期操作等
             java.text--文本的处理类库
             java.sql--数据库操作包,提供各类数据库操作的类和接口
             java.net--网络编程相关
             java.io--输入/输出处理
             java.awt--构成抽象窗口工具集的多个类,这些类用来构建和管理GUI
             javax.swing--建立图形用户界面

        5).目前为止用到的包总结:
             java.lang--String System StringBuffer StringBuilder 包装类 Thread
             java.util--Scanner Random ArrayList Arrays Date objects
             java.io--BufferdReader BufferedWriter FileReader FileWriter
             java.math--BigDecimal BigInteger
    ========================================================================================================================

    4.内部类--成员内部类-局部内部类-匿名内部类
         1)内部类也称为嵌套类(官方说法),是写在类中的类.分为成员内部类(写在成员变量位置)和局部内部类(写在方法里,很少用).匿名内部类是局部内部类的一种.
         2)内部类中可以直接访问外部类中的所有成员
         3)关于对局部变量/内部类成员变量/外部类成员变量的访问
          

      1   public class Outer {
      2              int a = 100;
      3              class Inner{
      4                  int a = 200;
      5                  public void printA(){
      6                      int a = 300;
      7                      System.out.println("局部变量a="+a);//300
      8                      System.out.println("内部类的变量a="+this.a);//200
      9                      System.out.println("外部类的变量a="+Outer.this.a);//100
     10                  }
     11              }
     12          }

        
         4)匿名内部类是创建某个类型子类对象的快捷方式,因此匿名内部类的前提是有父类或接口.
    ==============================================================================================
    5.代码块的执行顺序
    代码块的执行顺序:
         根据所处位置不同,代码块分为4种--普通代码块/构造块/静态代码块/同步代码块
         代码块:使用{}括起来的程序片段;
             普通代码块:直接在方法或语句中定义的代码块;
             构造块:直接写在类中的代码块;构造块中不允许定义方法;
             静态代码块:使用static声明的代码块;(注:静态代码块不能写在main方法中);
             同步代码块:使用用synchronized修饰的代码块;
        
         构造块优先于构造方法执行,且每次实例化对象均会执行,执行多次;父类优先于子类执行;
         静态代码块优先于主方法执行,且类中定义的静态代码块会优先于构造块执行,仅执行一次;父类优先于子类执行;
         主方法中的构造块执行顺序与其位置有关,按存在位置从前往后执行;且主方法中不存在静态代码块;

  • 相关阅读:
    类数据源Visual C++对ODBC数据库资源的访问
    变量对话框MFC 关于控件变量的使用
    S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
    设备内存缓冲区和 /proc/iomem
    multiplexed pins
    电脑硬件资源有冲突怎么处理?
    redhat open source university 硬件资源
    深入理解linux系统下proc文件系统内容
    S3C2440上LCD驱动(FrameBuffer)实例开发讲解(一)
    Framebuffer文章收集
  • 原文地址:https://www.cnblogs.com/huguangqin/p/7124033.html
Copyright © 2011-2022 走看看