声明和访问控制

标识符

*标识符可以为 字母、下划线或货币字符开头。
*在第一个字符之后,标识符还可以包括数字。
*标识符可以为任意长度。
*必须使用camelCase命名规JavaBeans方法,并且根据方法的目的,必须以set get is add 或 remove开头


声明规则
*一个源代码文件只能有哦一个公共类(为了保护数据)
*如果源文件包含公共类,则该文件名称应该与公共类名称相同
*一个文件只能有一个包语句,但可以有多个导入语句
*导入语句(如果有的话)必须位于包之后,并且在类声明之前
*如果没有包语句,则导入包语句必须是源文件最前面的语句
*包和导入语句应用于该文件中的所有类
*没有公共类的文件没有任何命名限制
*Java的默认包为lang包

类访问修饰符
*有3个访问修饰符: public protected private
*有4个访问级别: public protected private 和 默认
*类只能有一个公共或默认访问
*具有默认访问的类只对于同一个包中的类是可见的
*具有公共访问的类对于所有包中的类都是可见的
*类的可见性涉及到类是否可以被:
    创建另一个类的实例
    扩展(或再分子类)另一个类
    访问另一个类的方法或变量

类修饰符
*类也能够修饰为final abstract 或 strictfp
*类不能同时是抽象的和最终的
*最终类不能在分子类
*抽象类不能实例化
*类中的单个抽象方法意味着整个类必须是抽象的
*抽象类可以有抽象方法和非抽象方法
*扩展抽象类的第一个具体子类必须实现其所有方法

接口实现
*接口是类能够做什么的和约,但他并没有指定类实现的方式
*接口能够被继承树中的任何类实现
*接口就像一个100%的抽象类,无论是否在其声明中输入abstract修饰符,它隐含是抽象的
*接口只允许有抽象方法,不允许有具体方法
*public static final 接口常量声明可以任意组合
*合法的非抽象类实现类具有以下属性
      它为来自接口的方法提供所有具体实现
      对于它实现的方法必须遵守所有的合法重写规则
      它一定不能为实现方法声明任何新的异常
      它一定不能声明比该接口方法中所声明的异常更宽的任何检查异常
      无论接口声明如何,它都可以在任何接口方法上实现声明运行时异常
      它必须包含与它所实现方法完全相同的方法签名和返回类型(但不必声明该接口的异常)
*实现接口的类自身可以是抽象的
*抽象实现类不必实现接口方法(但第一个具体子类必须实现)
*类只能扩展一个类(没有多重继承),但可以同时实现多个接口
*接口只能扩展一个或多个其他接口
*接口不能扩展一个类,或者实现一个类或接口

成员访问修饰符
*方法和实例(非局部)变量都被称为"成员"
*成员可以使用所有4个访问级别 public private protected 和 默认
*成员访问有2种形式
      类中的代码能够访问另一个类的成员
      子类能够继承其超类的成员
*如果不能访问类就不能访问其成员
*要在确定成员可见性之前确定类的可见性
*公共成员可以被任何类访问,甚至是其他不同包中的类
*如果超类成员是公共的,则无论在哪个包中,子类都继承它
*不用点运算符(.)访问的成员必须属于同一个类
*this.总是引用当前执行的对象
*this.aMethod()与只调用aMethod()完全相同
*私有成员只能被同一个类中的成员访问
*私有成员对子类是不可见的,所以不能被子类所继承
*默认和保护成员的区别只是在子类被调用时:
    默认成员只能被同一个包中的其他类访问
    保护成员能过被同一个包中的其他类,以及任意包中的子类所访问
    保护=包+子类
    对于包外子类只能通过继承访问保护成员;包外子类不能通过对超类实例的引用来访问保护成员(换句话说继承是包外子类访问其超类保护成员的唯一方法)
*实际上,子类从其他包中继承的保护成员,对其他类来说都是私有的(换句话说,来自子类包或任何其他包的类都不能访问其保护成员)

局部变量
*局部(方法 自动 栈)变量声明不能有访问修饰符
*final是唯一一个可以修饰局部变量的修饰符
*局部变量没有默认值,在使用之前必须初始化

其他修饰符—成员
*final方法在子类中不能重写
*用签名 返回类型以及任选的抛出子句声明abstract方法,但是,没有实现他们
*abstract方法用分号结束,而不是大括号
*有三种方法识别非抽象方法
    该方法没有被标识为abstract的
    该方法有大括号
    该方法在两个大括号之间有代码
扩展abstract类的第一个非抽象类必须实现其所有abstract类的abstract的方法
*synchronized修饰符只能应用于方法和代码块
*synchronized方法能够具有任何访问控制,也能够标识为final
*抽象方法必须被子类实现,因此他们必须是可继承的.出于这种原因:
    abstract方法是不能被private的
    anstract方法是不能被final的
*native修饰符只能应用于方法
*strictfp修饰符只能应用于类和方法

变量声明
*实例变量能够
    具有任何访问控制
    被标识为final或transient
*实例变量不能标识为abstract synchronized native strictfp
*用与实例变量名称相同的局部变量是合法的,这被称为"隐藏"
*最终变量具有以下属性:
    一旦赋值之后,最终变量不能被重新初始化
    一旦将对象赋予最终变量,则最终引用变量不能引用不同的对象
    在构造函数完成前最终变量必须完成初始化
*根本没有final对象这种说法.标识为final的对象引用,并不是指该对象自身是不可变的.
*transient修饰符只能用于实例变量
*volatile修饰符只应用于实例变量

数组声明
*数组能够保存基本类型或对象类型,但是数组自身永远是一个对象.
*当声明一个数组时,括号可以位于变量名的左边或右边
*当声明数组时包含数组长度永远是不合法的
*对象数组能够保存通过该数组声明类型IS-A(或instanceof)测试的任何对象
 例如,如果 Horse扩展Animal,那么一个Horse对象能够放入一个Animal数组中.

静态变量和方法
*它们不属于类的任何具体实例.
*为了使用类的静态成员该类实例不必存在.
*静态变量/类变量只有一份副本,所有实例变量共享此副本.
*静态方法不能直接访问非静态成员 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值