1、内部类
将一个类A定义在另一个类B里面,里边那个类A就被称为内部类,B称为外部类
成员内部类:
class 外部类{
class 内部类{
}
}
内部类可以直接访问外部类的成员,包括私有成员
外部类要访问内部类的成员,必须要建立内部类的对象
外部类名.内部类名 对象名 = new 外部类型().new 内部类对象();
内部类仍然是是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是在前面冠 以外部类的类名和$符号。比如,Person$Heart.class
局部内部类:
将一个类定义在一个方法中,该类就被称为局部内部类
只能在该方法内部使用内部类
class 类{
public void 方法{
calss 局部内部类{
}
}
}
匿名内部类:
匿名内部类就是内部类的简化写法,它的本质就是一个带具体实现的父类或者父接口的匿名的子类对象
当我们使用一个接口时,步骤如下:
1、定义子类
2、重写接口中方法
3、创建子类对象
4、调用重写后的方法
匿名内部类就是简化了这几步
使用匿名内部类的前提:
必须继承一个父类或者实现一个父接口
使用方法:
new 父类名或者接口名(){
// 方法重写
@Override
public void method() { // 执行语句
}
};
2、引用类型方法的参数和返回值
class作为方法的参数和返回值:
类名作为方法的参数:
方法的形参是类名,其实需要的是该类的对象,实际传递的是该对象的【地址值】
类名作为方法的返回值:
方法的返回值是类名,其实返回的是该类的对象,实际传递的也是该对象的【地址值】
抽象类作为方法的参数和返回值:
抽象类作为方法的参数和返回值:
方法的形参是抽象类名,其实需要的是该抽象类的子类对象
方法的返回值是抽象类名 ,其实返回的是该抽象类的子类对象
接口作为方法的参数和返回值:
接口作为方法的参数和返回值:
方法的形参是接口名,其实需要的是该接口的实现类对象
方法的返回值是接口名,其实返回的是该接口的实现类对象
3、final关键字
学习继承之后,我们知道,子类可以在父类的基础上改写父类的内容,比如方法的重写,为了让子类不能随意的改写父类中的内容,java提供了final关键字,用于修饰不可改变的内容
final:不可改变,用于修饰类,方法和变量
被修饰的类不能被继承
被修饰的方法,不能被重写
被修饰的变量,不能被重新赋值
//修饰类
final class 类名{
}
//修饰方法
修饰符 final 返回值类型 方法名(参数列表){
//方法体
}
//修饰变量
//若变量为基本类型,被final修饰后,只能复制一次,不能再更改
//若变量为引用类型,只能指向一个对象,地址值不能发生改变,但不影响独享内部的成员变量的修改
//被final修饰的常量名称,一般都有书写规范,所有字母都大写。
4、包的定义及规范
分包思想:
如果将所有的类文件都放在同一个包下,不利于管理和后期维护。所以将不用功能的类文件放在不同的包下进行管理
包:本质上就是文件夹
包的注意事项:
package 包名;
如果是多级包,中间用“.”进项分割
package语句必须是程序的第一条可执行的代码
package语句在一个java文件中只能有一个
如果没有package,默认表示无包名
类与类之间访问:
在同一个包下的访问
不需要导包
不同下的包的访问
import导包后访问
通过全类名(包名+类名)访问
顺序:package import class ;
5、权限修饰符
Java提供了四种访问权限:
public:公共的
protected:受保护的
default:磨人的
private:私有的
不同权限的访问范围:
public | protected | default | private | |
---|---|---|---|---|
同一个类中 | √ | √ | √ | √ |
同一个包中子类与无关类 | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包的无关类 | √ |
如果没有特殊考虑:
成员变量使用private,隐藏细节
构造方法使用public,方便创建对象
成员方法使用public,方便调用方法
6、static关键字
它可以用来修饰成员变量和成员方法,被修饰的成员是属于类的,而不单单属于某一个对象,也就是说,既然是属于类的,就可以不靠创建对象来调用了
定义变量
static int number;
当 static 修饰成员变量时,该变量称为类变量。
该类的每个对象都共享同一个类变量的值。
任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作
定义方法
修饰符 static 返回值类型 方法名 (参数列表){
// 执行语句
} 当 static 修饰成员方法时,该方法称为类方法 。
静态方法在声明中有 static ,建议使用类名来调用,而不需要 创建类的对象。
调用方式非常简单。
1、静态方法可以直接访问类变量和成员方法
2、静态方法不能直接访问普通成员变量或成员方法,反之成员方法可以直接访问类变量或静态方法
3、静态方法中,不能使用this关键字
被static修饰的成员可以直接通过类名直接访问
被static修饰的内容:
1、随着类的加载而加载,且只加载一次
2、储存于一块固定的内存区域(静态区),所以,可以直接被类名调用
3、它优先于对象存在,所以,可以被所有对象共享
静态代码块
定义在成员位置,使用static修饰的代码块{ }
位置:类中方法外
执行:随着类的加载而执行且执行一次,优先于main方法和构造方法的执行
静态代码块的格式:
public class ClassName{
static{
//执行语句
//静态代码块的作用主要是给类变量进行初始化赋值。
}
}