1.导包

  1. 相同包下的类可以直接访问,不同包下的类必须导包,才可以使用!导包格式:import 报名.类名
  2. 假如一个类中需要用到不同类,而这个两个类的名称是一样的,那么默认只能导入一个类,另一个类要带包名访问。

    2.权限修饰符

  • 用来控制一个成员能够被访问的范围

可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。
image.png

3.常量

  • 常量是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变
  • 常量的作用和好处:可以用于系统的配置信息,方便程序的维护,同时也提高可读性。

    1.常量命名规范

  • 英文单词全部大写,多个单词用下划线连接起来。

    2.常量的执行原理

  • 在编译阶段会进行“宏替换”,把使用常量的地方全部替换成真实的字面量。

  • 这样做的好处是让使用常量的程序的执行性能与直接使用字面量是一样的。

    4.枚举

  • 枚举是Java中的一种特殊类型

  • 枚举的作用:是为了做信息的标志和信息的分类。

    1.格式

    **修饰符 enum 枚举名称{第一行都是罗列枚举类实例的名称}**

    2.枚举的特征

  • 枚举类都是继承了枚举类型:java.lang.Enum

  • 枚举都是最终类,不可以被继承。
  • 构造的构造器都是私有的,枚举对外不能创建对象。
  • 枚举类的第一行默认都是罗列枚举对象的名称的。
  • 枚举类相当于是多例模式。

    5.接口

    1.格式

    public interface 接口名{
    //常量
    //抽象方法
    }

    2.接口的用法

  • 接口是用来被类实现(implements)的,实现接口的类被称为实现类。实现类可以理解成所谓的子类。

  • 接口可以被类单实现,也可以被类多实现。

修饰符 class 实现类 implements 接口1,接口2,接口,3…{ }

3.接口多继承

  • 一个接口可以同时继承多个接口
  • 规范合并,整合多个接口为同一个接口,便于子类实现。

    4.注意事项

  1. 接口不能创建对象
  2. 一个类实现多个接口,多个接口中有同样的静态方法不冲突。只能调用自己的。
  3. 一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的。
  4. 一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可。
  5. 一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。

    6.内部类

  • 内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)。
  • public class People{
    _// 内部类
    _public class Heart{
    }
    }

内部类的使用场景、作用

  • 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计。
  • 内部类通常可以方便访问外部类的成员,包括私有的成员。
  • 内部类提供了更好的封装性,内部类本身就可以用private protectecd等修饰,封装性可以做更多控制

    1.静态内部类

  • 有static修饰,属于外部类本身。

  • 它的特点和使用与普通类是完全一样的,类有的成分它都有,只是位置在别人里面而已。
  • 可以直接访问外部类的静态成员,不能直接访问外部类的实例成员。

public class Outer{
// 静态成员内部类
public static class Inner{
}
}
格式:外部类名.内部类名 对象名 = new 外部类名.内部类构造器;

2.成员内部类

  • 无static修饰,属于外部类的对象。
  • JDK16之前,成员内部类中不能定义静态成员,JDK 16开始也可以定义静态成员了。
  • 可以直接访问外部类的静态成员,实例方法中可以直接访问外部类的实例成员。
  • 在成员内部类中访问所在外部类对象 ,格式:外部类名.this。

public class Outer {
_// 成员内部类
_public class Inner {
}
}
格式:外部类名.内部类名 对象名 = new 外部类构造器().new内部类构造器();

3.局部内部类

  • 局部内部类放在方法、代码块、构造器等执行体中。
  • 局部内部类的类文件名为: 外部类$N内部类.class。

    4.匿名内部类

  • 本质上是一个没有名字的局部内部类,定义在方法中、代码块中、等。

  • 作用:方便创建子类对象,最终目的为了简化代码编写。

new 类|抽象类名|或者接口名() {
重写方法;
};
特点

  • 匿名内部类是一个没有名字的内部类。
  • 匿名内部类写出来就会产生一个匿名内部类的对象。

7.包装类

基本数据类型 引用数据类型
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
  • Java为了实现一切皆对象,为8种基本类型提供了对应的引用类型。
  • 后面的集合和泛型其实也只能支持包装类型,不支持基本数据类型。

自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量。
自动拆箱:包装类型的变量可以直接赋值给基本数据类型的变量。
包装类的特有功能

  1. 包装类的变量的默认值可以是null,容错率更高。
  2. 可以把基本类型的数据转换成字符串类型(用处不大)
  3. 可以把字符串类型的数值转换成真实的数据类型(真的很有用)

    8.正则表达式

    1. String rs = "来黑马程序学习Java,电话020-43422424,或者联系邮箱"+"itcast@itcast.cn,电话18762832633,0203232323" +"邮箱bozai@itcast.cn,400-100-3233 ,4001003232";
    2. //定义一个正则表达式
    3. String regex = "(1[3-9]{2}\\d{8})|(\\w{1,30}@[a-zA-Z\\d]{2,20}(\\.[a-zA-z\\d]{2,20}){1,2}|(0\\d{2,6}-?\\d{5,20})" +"|(400-?\\d{3,8}-?\\d{3,8}))";
    4. //获取正则表达式的模式对象
    5. Pattern pattern = Pattern.compile(regex);
    6. //获取模式对象的匹配器对象
    7. Matcher matcher = pattern.matcher(rs);
    8. //获取匹配器对象的结果
    9. while (matcher.find()){
    10. System.out.println(matcher.group());
    11. }