package
作用
- 包帮助管理大型软件系统:将功能相近的类划分到同一个包中。比如MVC的设计模式
- 包可以包含类和子包,划分项目层次,便于管理
- 解决类命名冲突的问题
控制访问权限
package 包名;
注意
必须在源文件的第一行
- 一个源文件只能有一句声明包的语句
- 命名规范:域名倒置+分类的包名,全部单词都小写,每个
**.**
代表一层文件目录
import
标准格式:**import 包.类名;**
简写格式:**import 包.*;**
只能代表类,不包括子包
静态导入:`**import static 包.类.;**`
- 代表类中的静态成员(静态方法和静态的属性)
- 意味着可以在本类中,直接使用被导入的静态成员,而不需要加“类名.”
注意
- 在源文件中显式的使用import结构导入指定包下的类、接口
- 声明在 package 和 class 之间
- java.lang 包下定义的,省略 import 结构
- 本包下定义的,可以省略import结构
- 使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示
如果一个源文件声明了包
- 编译的格式:
**javac -d 字节码文件生成的存储目录 源文件名.java**
例如:javac -d ./ 源文件名.java
./ 表示源文件的当前目录
- 运行的格式:
**java 包.类名**
JDK中常见的包
- java.lang 包含一些Java语言的核心类,如String、Math、Integer、System和Thread,Object,提供常用功能
- java.net 包含执行与网络相关的操作的类 接口
- java.io 包含能提供多种输入/输出功能的类 接口
- java.util 包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数
- java.text 包含了一些java格式化相关的类
- java.sql 包含了java进行JDBC数据库编程的相关类/接口
MVC设计模式
- MVC是常用的设计模式之一,将整个程序分为三个层次:视图模型层、控制器层、与数据模型层
- 这种将程序输入输出、数据处理,以及数据的展示分离开来的设计模式 使程序结构变的灵活而且清晰,同时也描述了程序各个对象间的通信方式,降低了程序的耦合性
- 模型层 model 主要处理数据
- 数据对象封装 model.bean/domain
- 数据库操作类 model.dao
- 数据库 model.db
- 控制层 controller 处理业务逻辑
- 应用界面相关 controller.activity
- 存放fragment controller.fragment
- 显示列表的适配器 controller.adapter
- 服务相关的 controller.service
- 抽取的基类 controller.base
- 视图层 view 显示数据
- 相关工具类 view.utils
- 自定义view view.ui
return
使用在方法体中
作用
- 结束方法
- 针对于有返回值类型的方法,使用”return 数据”方法返回所要的数据
注意:return关键字后面不可以声明执行语句
extends
表示继承
但子类不是父类的子集,而是对父类的“扩展”
this
表示当前对象或当前正在创建的对象
用法
- this.属性——当成员变量与局部变量重名时
this.方法
使用this访问属性和方法时, 如果在本类中未找到,会从父类中查找
this 不能用于 static 方法中
- this() 或 this(实参列表)
- 我们在类的构造器中,可以显式的使用
**this(形参列表)**
方式,调用本类中指定的其他构造器 - 构造器中不能通过”this(形参列表)”方式调用自己
- 如果一个类中有n个构造器,则最多有 n - 1构造器中使用了”this(形参列表)”
- 规定”this(形参列表)”必须声明在当前构造器的首行
- 构造器内部,最多只能声明一个”this(形参列表)”
- 我们在类的构造器中,可以显式的使用
super
表示直接父类对象的引用,代表父类的内存空间的标识
用法
**super.属性**
访问父类中与子类重名的属性**super.方法**
访问父类中被子类覆盖的方法**super()**
或**super(实参列表)**
- 子类中所有的构造器默认都会访问父类中空参数的构造器
- 父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)指定调用本类或者父类中相应的构造器。同时只能”二选一”,且必须放在构造器的首行
- 子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,编译出错
注意
- 当子父类出现同名成员时,可以用 super 表明调用的是父类中的成员
- super 的追溯不仅限于直接父类
this和super的区别
instanceof
表示某个对象是否是本类或本类的子类的对象
- 例如:a instanceof Type;
返回 true 表示 a 是 Type 的对象,或子类的对象
static
表示静态的
特点
- 随着类的加载而加载
- 优先于对象存在
- 修饰的成员,被所有对象所共享
- 访问权限允许时,可不创建对象,直接被类调用
- 关于静态属性和静态方法的使用,大家都从生命周期的角度去理解
修饰
- 类属性
- 该类各个对象之间共享的变量,可通过”类名.类属性”
- 类属性存储在方法区的静态域中
- 其中一个对象对它修改,其他的对象的该属性值也会被修改
- 它的 get/set 也是 static 的的静态域中
- 可以使用“显式初始化”,还可以使用“静态代码块”进行初始化
- 类方法
- 没有对象的实例时,可以用“类名.方法名()”的形式访问由 static 修饰的类方法
- 在static方法内部只能访问类的 static 修饰的属性或方法,不能访问类的非static 的结构
- 因为不需要实例就可以访问 static方法,因此 static方法内部不能有this super关键字
- static修饰的方法不能被重写
- 静态代码块
- 在类加载并初始化时调用,只会执行一次,一般用于静态属性的赋值
- 构造方法用于对象的初始化,静态初始化块用于类的初始化操作
- 在静态初始化块中不能直接访问非static成员
- 静态初始化块执行顺序
- 上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止
- 构造方法执行顺序和上面顺序一样
- 静态内部类
使用
- 开发中,如何确定一个属性是否要声明为static的?
- 属性是可以被多个对象所共享的,不会随着对象的不同而不同的
- 类中的常量常常声明为static
- 开发中,如何确定一个方法是否要声明为static的?
- 操作静态属性的方法,通常设置为static的
- 工具类中的方法,习惯上声明为static的。 比如:Math、Arrays、Collections
final
表示最终的
修饰
- 类:该类不能被继承,比如:String类、System类、StringBuffer类
- 方法:该方法不能被重写
- 变量
- 变量的值一旦被赋值就不能被修改,即常量
- 属性
- 必须手动初始化,不能默认初始化
- 显式初始化
- 代码块中初始化
- 构造器中初始化
- final static全局常量
- 必须手动初始化,不能默认初始化
- 局部变量
- 尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值
native
表示原生的、非Java语言实现的
但是使用者可以把它当做Java的方法或成员使用