包机制概述
- 为什么要使用package
package是java中包机制。包机制的作用是为了方便程序的管理,不同功能的类分别存放在不同的包下(按照功能划分的不同软件包有不同的功能) - package怎么用?
package是一个关键字,后面加包名。例如:
package com.GUT.glut
注意!
package语句只允许出现在java源代码的第一行 - 包命名规范:
公司域名倒叙+项目名+模块名+功能名
import机制
- import什么时候使用?
A类中使用B类
A类和B类都在同一个包下不需要使用import
A类和B类不在同一个包下需要使用import - import怎么用?
import只能出现在package语句之下,class声明语句之上。import还可以使用“”的方式
注意!
java.lang.;这个包下的类不需要使用import导入
访问控制权限
- 访问控制权限有哪些?
private、protected、public、默认 - 控制范围?
private:表示私有的,只能在本类中访问
public:表示公开的,在任何位置都可以访问
默认:表示只能在本类以及同包下访问
protected:表示只能在本类、同包、子类中访问
范围从大到小排序:public > protected > 默认 >private - 访问控制权限可以修饰什么?
属性(4个都能用)
方法(4个都能用)
类(public和默认能用,其他不行)
接口(public和默认能用,其他不行)
JDK类库的根类:Object
- Object类中有哪些常用的方法?
protected Object clone() //负责对象克隆的
boolean equals(Object obj) //判断两个对象是否相等
protected void finalize() //垃圾回收器负责调用的方法
int hashCode() //获取对象哈希值
String toString() //将对象转换成字符串形式
- 关于Object类中的toString()方法
- 源代码:
public String toString(){
return this.getClass().getName()+"@"+Integer.toHexStringChashCode();
}
源代码上toString()方法的默认实现是:
类名@对象的内存地址转换成十六进制的形式
-
SUN公司设计toString()方法的目的是什么?
通过调用这个方法可以将一个java对象转换成字符串表现形式 -
建议所有的子类都去重写toString()方法,toString()方法应该是一个简洁的、详实的、易阅读的方法
-
如何重写toString()方法?
public String toStirng(){
return java语句;
}
注意!
输出引用的时候会自动调用该引用的toString()方法
- 关于Object类中的equals方法
- equals方法的源代码
public boolean equals(Object obj){
return (this == obj);
}
- SUN公司设计这个方法的目的?
以后编译的过程中,都要通过equals方法来判断两个对象是否相等。
equals方法是判断两个对象是否相等的 - 判断两个对象是否相等,不能使用" = =" ,因为 “= =”比较的是两个对象的内存地址
- 在Object类中的equals方法当中,默认采用的是“= =”判断两个对象是否相等,所以Object类中的equals方法不够用,需要子类重写equals方法
- equals如何重写?
public boolean equals(Object obj){
if(obj == null || !(obj intanceof 比较的对象)){
return false;//如果obj为空或者obj不是比较的对象,返回false
}
if(this == obj){
return ture;//如果this和obj保存的内存地址相同,返回true
}
//上述判断都完成,执行到这一步的时候就可以java语句判断两个对象是否相等了
}
- IDEA生成equals方法?
Alt+insert 选择要生成的equals方法对应的对象 - String类已经重写了equals方法,比较两个字符串不能使用“= =”,必须使用equals,equals是通用的,同时,String类也重写了toString()方法
- 总结!
java中基本数据类型使用“= =”判断,所有引用数据类型统一使用equals方法来判断是否相等
4.Object类中的finalize()方法
- 这个方法为protected修饰,在Object类中这个方法的源代码为:
protected void finalize() throws Throwable{} - 这个方法只有一个方法体,里面没有代码,这个方法是protected修饰的
- finalize()不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法
- finalize的执行时机:
当一个java对象即将被垃圾回收期回收时,垃圾回收器负责调用finalize()方法 - finalize()方法实际上是SUN公司为java程序员准备的一个时机:垃圾销毁时机。如果希望在对象销毁时机执行一段代码的话,这段代码要写到finalize()方法当中
- java中垃圾回收器不是轻易启动的,垃圾太少或时间没到等种种条件下,有可能启动也有可能不启动
内部类
- 什么是内部类?
内部类:在类的内部又定义了一个新的类,被称为内部类 - 内部类的分类:
静态内部类:类似于静态变量
实例内部类:类似于实例变量
局部内部类:类似于局部变量 - 使用内部类编写的代码可读性很差,能不用尽量不用
- 匿名内部类是局部内部类中的一种,因为这个类没有名字所以叫匿名内部类
- 匿名内部类缺点:代码太复杂太乱,可读性太差;类没有名字,只能使用一次不能重复使用