Java P3-Classes & Objects

顶级(top level),即只有类/接口/枚举/注解

public 所有其它类可访问

package-private,无修饰符的默认声明,仅包内可访问

CC:禁止在一个源码文件中声明2个并列的类型,会严重降低代码的可读性

// MyClass.java
public class MyClass {
    // 这是一个顶级类
}

public class AnotherClass {
    // 这也是一个顶级类,但违反了Java语言规范
}

CC:package级类允许文件名与类名不同,但是禁止使用,会引起歧义,降低代码可读性

成员级(member level),声明在类型内部的,可以是类/接口/变量/常量/方法等

Public,公有,全局可访问

package-private,包内可访问

Private,私有,类型内可访问

Protected,包中,及任意位置的子类可访问

Defining Methods

方法的组成

修饰符,public/private/static/final等

方法返回类型

方法参数列表

方法体

CC:方法命名规范。方法必须以动词开始,驼峰式首字母小写,接形容词或名词

类中不能存在方法签名相同的方法,方法签名是类中一个方法区别于另一个的特征 方法签名由:方法名称,方法参数列表(方法参数数量,相应位置的参数类型)决定;与方法的各种修饰符,返回类型,参数名称等无关 即,如果类中的方法名称相同,并且方法中参数个数相同,并且相同位置的参数类型也相同,即为方法签名相同,无法通过编译

需要为方法的参数命名,该名称将在方法体内引入传入的参数 方法参数名称,在其作用范围内必须是唯一的 无论参数类型是否相同,参数名称不能相同 不能与方法内局部变量名称相同

方法对,8+1数据类型为值传递

Overloading Methods

方法重载,允许具有相同名称,但不同参数列表的方法存在,解决了方法功能相同,但必须使用不同命名的缺陷

方法重载允许方法返回不同类型

Member Variables

类中可以声明成员变量

public修饰的成员变量,公有成员变量,变量可以被全局访问

private修饰的成员变量,私有成员变量,变量仅能在类中被访问

成员变量必须通过对象操作访问

Using the this Keyword

this, 表示当前对象的引用;可以通过this, 在实例方法或构造函数中引用当前对象的成员变量

所有实例级方法,都隐式包含一个引用当前对象的变量,名称为this。当方法引用类的实例变量时,编译器隐式的使用this 获取当前对象的实例变量

因此,除非必须 无需显示使用this,用于在内部类中区分 “this”是内部还是外部的引用

Access Modifiers

基于封装思想,实体类中封装的属性数据,通过对外提供,访问器(getter/setter)实现

CC:访问器getter/setter方法命名规范。方法基于驼峰式命名,get/set首字母小写,属性名称首字母大写;boolean类型属性的getter方法以is为前缀,因此,boolean类型属性禁止使用is字母开头; getter/setter方法名称必须与属性名称一致,第三方库基于此命名规范反射

Providing Constructors for Your Classes

类的构造函数,像一个方法,但是没有返回类型(也没有void),方法名与类的名称完全相同

可以通过new操作符,调用构造函数,创建一个类的对象

可以声明多个构造函数,但不能具有相同的参数列表。即,类中不能存在方法签名相同的构造函数 可通过有参构造函数,创建对象并初始化对象属性 编译器自动为没有显式声明构造函数的类,创建一个无参构造函数(no-argument constructor) 但,当类显式声明了有参构造函数,编译器将不再自动创建无参构造函数 可以通过声明访问修饰符,控制外部调用其构造函数,从而限制对象的创建

是基于类提供的构造函数创建对象,而不是基于类型创建对象,即,new,类的一个构造函数,而非new,一个类的名称,创建对象

显式构造函数调用,在构造函数中,可以使用this关键词调用同一类中的另一个构造函数

Using Package Members

预使用其他包中的public类型(类/接口等),必须通过以下任意方式:

通过包含,包名以及类型名称的,全限定性名称(fully qualified names),使用该成员

导入包成员,通过其简单名称使用(simple name)

导入成员的整个包

导入成员的整个包,通过*号通配符,导入特定包中的所有类型

Understanding Class Variables

类中,static 修饰的变量,称为类静态变量或类变量。类的静态变量置于堆空间,而非方法区

即其与所在类相关,而不与类的任何对象相关,即其不基于类的任何对象而存在

类的私有静态变量/常量,类的每一个对象均可访问

类的公有静态变量/常量,全局可访问

由于,静态变量仅与类相关而与类的具体对象无关,因此通过类名称直接调用

Understanding Class Methods

与静态变量相似,类的静态方法与类的实例对象无关,通过类型名称直接调用方法

类中,实例级方法单向访问方法静态成员(方法/变量/常量)

类中,静态方法无法访问实例级成员(方法/变量/this等)

在某些需要频繁访问类的静态成员时,反复添加这些类的名称可能会导致代码混乱。 静态导入语句提供了一种导入要使用的常量和静态方法的方法,以便无需为其类的名称添加前缀

通过import static语句 直接导入了Math类型下的 所有常量与静态方法 可直接使用而无需使用Math类型调用

Static Initialization Blocks

静态代码块,当类第一次被加载时执行且仅执行一次,无论该类实例化多少次

静态代码块可用于初始化类构造函数用于初始化对象属性

即使是包含主函数的类,依然先执行静态代码块初始化类,然后执行主函数

静态代码块中的变量是局部变量

一个类中可以有多个静态代码块

Nested Classes

Java 允许将一个类定义在另一个类内部

嵌套类分为:静态内部类非静态内部类

如果类A需要维护自己的状态行为(属性方法),但又为且仅为另一个类B提供支持,那么将其嵌套声明在类B中,是合乎逻辑且利于维护的

基于组合 将IQ封装 为人的属性,IQ为只有人具有的特性 因此可以置于Persion类型内部 与普通实体类相同 封装IQ的相关属性,基于外部类名称.静态内部类 引入静态内部类型 与普通类相同的构建操作过程 从而创建静态内部类的对象

创建person对象 封装IQ对象为其iq属性值

静态内部类,不持有外部类的引用。因此,无法调用外部类的任何实例级成员 即,静态内部类与外部类,仅是代码上的嵌套

即使在person内部 也无法调用private变量 静态内部类与外部类完全是独立的 仅在代码层面嵌套

Enum Types

枚举类型,是一种特殊的数据类型,定义了一组预定义的枚举常量列表 使用普通键值对常量,可以限制结果,但无法限制输入范围。即,无法限制输入变量的范围 而枚举通过预定义的枚举常量,限制变量的使用范围 例如,星期/月份/方向/行星等等

CC:枚举类型中的值均代表常量,因此字母全部大写 枚举可在程序中,为方法提供限制和约束性选项,强制/规范方法调用者的行为,使程序逻辑结构清晰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值