A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高欢欢 中级黑马   /  2012-7-18 13:56  /  1297 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   前边我对于为啥主函数是静态的不懂,问了大家,也得到了答案:main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就是test.main(String[] args),众所周知如果一个方法不是静态的,则要先实例化该类,比如要这样  test t=new test();
然后才能调用 test.main();  

而这对于运行一个程序的主函数来说是不现实的,所以比如把main函数定义为static,使test.main()可以直接被调用。

  
  所以我对修饰符只是知道了,但并不能灵活的解释:
类、方法、成员变量和局部变量的可用修饰符

修饰符 类 成员方法 构造方法 成员变量 局部变量
abstract Y Y _ _ _
static _ Y _ Y _
public Y Y Y Y _
protected _ Y Y Y _
private _ Y Y Y _
synchronized _ Y _ _ _
native _ Y _ _ _
transient _ _ _ Y _
volatile _ _ _ Y _
final Y Y _ Y Y


  1、访问控制修饰符:

    Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而只向使用者暴露接口,但隐藏实现细节。

  公开级别:用public修饰,对外公开

  受保护级别:用protected修饰,向子类及同一个包中的类公开

  默认级别:没有访问控制修饰符,向同一个包中的类公开

  私有级别:用private修饰,只有 类本身可以访问,不对外公开

    顶层类只有默认或公开级别,因此不能用private和protected来修饰。

  2、abstract修饰符:

  用来修饰类和成员方法,抽象类不能被实例化,抽象方法不提供具体的实现。

  抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类

  如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类

  没有抽象构造方法,也没有抽象静态方法

  抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法

  抽象类及抽象方法不能被final修饰符修饰(原因?)

  3、final修饰符:

  具有“不可更改的”意义,它可以修饰非抽象类飞、非抽象成员方法和变量。

  用final修饰的类不能被继承,没有子类

  用final修饰的方法不能被子类的方法覆盖

  用final修饰的变量表示常量,只能被赋一次值

  final不能用来修饰构造方法,无意义(为什么?)

  final类:

  不是专门继承而设计的类

  出于安全的原因,类的实现细节不允许有任何改动

  在创建对象模型时,确信这个类不会再被扩展

  final方法:

  出于安全的原因,父类不允许子类覆盖某个方法,此时可以把这个方法声明为final

  final变量特征:

  可以修饰静态变量,实例变量和局部变量,分别表示静态常量,实例常量和局部常量

  final变量都必须显示初始化

  final变量只能赋一次值

  如果将引用类型的变量用final修饰,那么该变量只能始终只能引用一个对象,但可以改变内容

  final定义常量,有如下作用:

  提高程序的安全性,禁止非法修改取值固定且不允许改变的数据

  提高程序代码的可维护性

  提高程序代码的可读性

  4、static修饰符:

  用static修饰的变量表示静态变量,可以直接通过类名来访问。

  用static修饰的成员方法表示静态方法,可以直接通过类名来访问。

  用static修饰的程序代码块表示静态代码块,当Java虚拟机加载类时,就会执行该快代码

  static变量:

  静态变量在内存中只有一个拷贝

  对于实例变量每创建一个实例,就分配一次内存;而且互不影响

  静态变量能被类的所有实例共享,可作为实例之间进行交流的共享数据

  static方法(why)

  静态方法中不能用this关键字,也不能直接访问所属类的实例变量和实例方法

  可以直接访问所属类的静态变量和静态方法

  静态方法中也不能用super关键字

  一个静态的方法不能被定义为抽象方法,必须实现

  static代码块

  类中也可以包含静态代码块,它不存在于任何方法体中。

  Java虚拟机加载类时会执行这些静态代码块。类的构造方法用于初始化类的实例,而类的静态代码块则可用于初始化类。

  静态代码块与静态方法一样,也不能直接访问类的实例变量和实例方法,而必须通过实例的引用来访问

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 多谢分享哈

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马