1、内部类

将一个类A定义在另一个类B里面,里边那个类A就被称为内部类,B称为外部类

成员内部类:

  1. class 外部类{
  2. class 内部类{
  3. }
  4. }

内部类可以直接访问外部类的成员,包括私有成员
外部类要访问内部类的成员,必须要建立内部类的对象

  1. 外部类名.内部类名 对象名 = new 外部类型().new 内部类对象();

内部类仍然是是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是在前面冠 以外部类的类名和$符号。比如,Person$Heart.class

局部内部类:

将一个类定义在一个方法中,该类就被称为局部内部类
只能在该方法内部使用内部类

  1. class 类{
  2. public void 方法{
  3. calss 局部内部类{
  4. }
  5. }
  6. }

匿名内部类:

匿名内部类就是内部类的简化写法,它的本质就是一个带具体实现的父类或者父接口的匿名的子类对象

  1. 当我们使用一个接口时,步骤如下:
  2. 1、定义子类
  3. 2、重写接口中方法
  4. 3、创建子类对象
  5. 4、调用重写后的方法
  6. 匿名内部类就是简化了这几步
  7. 使用匿名内部类的前提:
  8. 必须继承一个父类或者实现一个父接口
  9. 使用方法:
  10. new 父类名或者接口名(){
  11. // 方法重写
  12. @Override
  13. public void method() { // 执行语句
  14. }
  15. };

2、引用类型方法的参数和返回值

实际开发中,引用类型的使用非常重要,也非常普遍

class作为方法的参数和返回值:

类名作为方法的参数:

方法的形参是类名,其实需要的是该类的对象,实际传递的是该对象的【地址值】

类名作为方法的返回值:

方法的返回值是类名,其实返回的是该类的对象,实际传递的也是该对象的【地址值】

抽象类作为方法的参数和返回值:

抽象类作为方法的参数和返回值:

方法的形参是抽象类名,其实需要的是该抽象类的子类对象
方法的返回值是抽象类名 ,其实返回的是该抽象类的子类对象

接口作为方法的参数和返回值:

接口作为方法的参数和返回值:
方法的形参是接口名,其实需要的是该接口的实现类对象
方法的返回值是接口名,其实返回的是该接口的实现类对象

3、final关键字

学习继承之后,我们知道,子类可以在父类的基础上改写父类的内容,比如方法的重写,为了让子类不能随意的改写父类中的内容,java提供了final关键字,用于修饰不可改变的内容
final:不可改变,用于修饰类,方法和变量
被修饰的类不能被继承
被修饰的方法,不能被重写
被修饰的变量,不能被重新赋值

  1. //修饰类
  2. final class 类名{
  3. }
  4. //修饰方法
  5. 修饰符 final 返回值类型 方法名(参数列表){
  6. //方法体
  7. }
  8. //修饰变量
  9. //若变量为基本类型,被final修饰后,只能复制一次,不能再更改
  10. //若变量为引用类型,只能指向一个对象,地址值不能发生改变,但不影响独享内部的成员变量的修改
  11. //被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关键字

它可以用来修饰成员变量和成员方法,被修饰的成员是属于类的,而不单单属于某一个对象,也就是说,既然是属于类的,就可以不靠创建对象来调用了

  1. 定义变量
  2. static int number;
  3. static 修饰成员变量时,该变量称为类变量。
  4. 该类的每个对象都共享同一个类变量的值。
  5. 任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作
  6. 定义方法
  7. 修饰符 static 返回值类型 方法名 (参数列表){
  8. // 执行语句
  9. } static 修饰成员方法时,该方法称为类方法
  10. 静态方法在声明中有 static ,建议使用类名来调用,而不需要 创建类的对象。
  11. 调用方式非常简单。

1、静态方法可以直接访问类变量和成员方法
2、静态方法不能直接访问普通成员变量或成员方法,反之成员方法可以直接访问类变量或静态方法
3、静态方法中,不能使用this关键字
被static修饰的成员可以直接通过类名直接访问
被static修饰的内容:
1、随着类的加载而加载,且只加载一次
2、储存于一块固定的内存区域(静态区),所以,可以直接被类名调用
3、它优先于对象存在,所以,可以被所有对象共享

静态代码块

定义在成员位置,使用static修饰的代码块{ }
位置:类中方法外
执行:随着类的加载而执行且执行一次,优先于main方法和构造方法的执行

  1. 静态代码块的格式:
  2. public class ClassName{
  3. static{
  4. //执行语句
  5. //静态代码块的作用主要是给类变量进行初始化赋值。
  6. }
  7. }