2024年java se基础大全

java se基础大全Junit 单元测试 Junit 是一个单元测试框架 可以代替 main 方法执行其他的方法 作用 可以单独测试一个方法 Junit 是第三方工具 使用需要导入 Jar 包 junit 4 12 jar hamcrest core jar 不能修饰 static 的方法 不能修饰带参数的方法 不能修饰带返回值的方法

大家好,我是讯享网,很高兴认识大家。



Junit 单元测试

Junit 是一个单元测试框架,可以代替main方法执行其他的方法
作用:可以单独测试一个方法
Junit 是第三方工具,使用需要导入Jar包

 
讯享网 

:不能修饰static的方法
:不能修饰带参数的方法
:不能修饰带返回值的方法

相关注解

讯享网

在这里插入图片描述

 
讯享网

类的加载机制

① new 对象
② new 子类对象(new 子类对象先初始化父类)
③ 执行main方法
④ 调用静态成员
⑤ 反射,创建class对象
在这里插入图片描述

类加载器-ClassLoader

在JVM中,负责将本地上的Class文件加载到内存的对象ClassLoader;
分类:
:根类加载器,C语音写的,我们获取不到,也称为引导类加载器,负责Java的核心类加载,比如:System,String等,jre/lib/rt.jar下的类都是核心类
:扩展类加载器,负责JRE的扩展目录中的jar包的加载,在JDK中的JRE的lib目录下的ext目录
:系统类加载器,负责JVM启动时加载来自java命令class文件(自定义类),以及classpath环境变量所指定的jar包(第三方jar包)

不同的类加载器加载不同的类

获取类加载器对象
是class对象中的方法

获取类加载器对象对应的父类加载器
ClassLoader类中的方法:ClassLoader

 

双亲委派机制(全盘负责委托机制)
① Person类中有一个String
② Person本身是AppClassLoader加载
③ String是BootStrapClassLoader加载
加载顺序:
Person本身是App加载,按理来说String也是App加载 java se基础大全
但是App加载String的时候,先问一问Ext:你加载String吗?
Ext说:我不加载,我负责加载的是扩展类,但是app你别着急,我去问父类 boot
Ext说:boot,你加载String吗?
boot:我加载核心类ok,我加载去了

类加载器的cache(缓存)机制(扩展):一个类加载到内存中,缓冲也会保存一份,后面如果再使用此类,如果缓存中保存了这个类,直接返回,如果没有才加载这个类,下次如果有其他类在使用的时候就不会重新加载了,直接去缓存中拿,保证在内存中的唯一性

所以:类加载器的双亲委派和缓存机制共同造就了加载类的特点,保证了类在内存中的唯一性。

在这里插入图片描述

反射

反射概述:解刨class对象的一个技术

获取Class对象

  1. 调用Object中的getClass方法
  2. 无论是基本类型还是引用类型,JVM都提供了一个静态成员:
  3. Class类中的静态方法

    className:传递的是类的全限定名(包名.类名)
 
  • pro.properties
 
 
  • 常用的:

反射构造方法

获取所有public的构造方法

 

获取空参构造方法

Class 类中的方法:
:获取指定的public的构造
parameterTypes:可变参数,可以传递0个或者多个参数
① 如果获取的是空参构造:参数不用写
② 如果获取的是有参构造:参数写参数类型的class对象

Constructor类中的方法
T newInstance(Object… initargs):创建对象
initargs:传递的是构造方法的实参
① 如果根据无参构造new对象,initargs不用写
② 如果根据有参构造new对象,initargs传递实参

 

空参构造创建对象的快捷方式

Class类中的方法:
:根据空参构造创建对象
前提:被反射的类中必须有修饰的空参构造

 

获取有参构造方法

 
 

获取私有构造

:获取所有的构造方法,包括
:获取指定构造,包括
parameterTypes 参数类型的class对象

Constructor 有一个父类 ,里面有一个方法
:修改访问权限
flag :解除私有权限

 
 

反射成员方法

获取所有的成员方法_public

 

获取方法(有参、无参)_public

Class类中的方法
:获取指定的public的成员方法
:方法名
:方法参数类型的class对象

调用方法:Method对象中的方法
:执行方法
:根据构造new出来的对象
:方法实参,有参数直接传递实参,否则不用传
返回值::接受被执行方法的返回值,如果方法没有返回值,不用接受

 

获取私有方法

:获取所有的成员方法,包括
:获取执行成员方法,包括
name:传递方法名
:方法参数类型的class对象

:解除私有权限

 

反射成员变量

获取所有属性

Class类中的方法
:获取所有public的属性
:获取所有属性,包括的

 

获取指定属性

Class类中的方法
:获取指定public的属性
:获取指定属性,包括的

Filed类中的方法
:为属性赋值,相当于JavaBean中的set方法
:对象
:值
:获取属性值
:对象

:解除私有权限

 

反射练习

需求:在配置文件中,配置类的全限定名,以及配置一个方法名,通过解析配置文件,让配置好的方法执行起来
className = 包名.Person
methodName = eat

步骤:

  1. 创建properties配置文件,配置信息
    ① properties配置文件放哪里?
    将来我们开发完成之后,输出的是out路径下的class文件,将class文件打包,如果将配置文件直接放到模块下,那么out路径下是不会生成这个配置文件的,如果没有配置文件,程序也就运行不起来。
    解决:我们可以将配置文件放到目录下,路径下就会出现配置文件
    ② 将配置文件放到下,out路径下会自动生成配置文件
    解决:我们可以单独创建一个文件夹,将所有的配置文件放到此目录下,将文件改成资源目录,取名
  2. 读取配置文件,解析配置文件
    ① 如果配置文件放到资源目录下,怎么读取
    使用 ``new FileInputStream(“模块名称 esourceproperties文件名”),这样是不可取的,out路径下没有resource目录
    解决:使用类加载器
    ClassLoader classLoader = 当前类.class.getClassLoader()
    InputStream in = classLoader.getResourceAsStream(“文件名”):自动扫描resource下的文件,扫描out路径下的配置文件
  3. 根据解析出来的className,创建一个Class对象
  4. 根据解析出来的methodName,获取对应的方法
  5. 执行方法
 
 
 

注解

  1. 引用数据类型:
    类、数组、接口、枚举、注解
  2. JDK 1.5 版本的新特性,一个应用数据类型,和类、接口、枚举是同一个层次
  3. 作用:
    说明:对代码进行说明,上传doc文档(API文档)
    检查:检查代码是否符合条件、
    分析:对代码进行分析,起到代替配置文件的作用

注解的定义以及属性的定义格式

 

注解属性其本质是抽象方法;
增强注解的使用
:此属性没有默认值,需要在使用注解的时候为其赋值
:此属性有默认值,可二次赋值

注解能定义的数据类型:
① 8种基本类型
② String类型、class类型、枚举类型、注解类型
③ 以上类型的一维数组

 

注解的使用

使用格式:

 
 

注意:

  1. 空注解可以直接使用:空注解就是注解中没有任何属性
  2. 不同的位置可以使用一样的注解,但是同样的位置不能使用一样的注解
  3. 使用注解时,如果注解中有属性,注解中的属性一定要赋值,如果是多个属性,用隔开,注解中使用数组,使用
  4. 如果注解中的属性有默认值,可不写,
  5. 如果注解中只有一个属性,并且属性名叫,那么使用注解的时候,属性名不用写,可直接写值(包括单个类型和数组)
 
 

注解解析

获取到注解中的属性值

  1. 注解解析涉及的接口:AnnotateElement接口
    实现类:AccessibleObject、Class、Constructor、Executable、Field、Method、Package、Parameter
  2. 解析
    ① 先判断指定位置上有没有使用指定的注解
    :判断指定位置上有没有指定的注解
    :获取指定注解,返回值类型为获取的注解类型
    ② 获取注解中的属性值
 
 
 

Action注解没有被加载至内存中,annotationPresent是

元注解

元注解就是管理注解的注解

  1. 控制注解的使用位置
    ① 控制注解能否在类上使用
    ② 控制注解能否在构造上使用
    ③ 控制注解能否在方法上使用
  2. 控制注解的生命周期(加载位置)
    ① 控制注解能否在源码中出现
    ② 控制注解能否在class文件中出现
    ③ 控制注解能否在内存中出现

使用:

  1. :控制注解的使用位置
    :是一个枚举,里面的成员可以类名直接调用
    ElementType成员:
    :控住注解能使用在类上
    :控制注解能使用在属性上
    :控制注解能使用在方法上
    :控制注解能使用在参数上
    :控制注解能使用在构造上
    :控住注解能使用在局部变量上
  2. :控制注解的生命周期
    :是一个枚举,成员可以直接类名调用
    RetentionPolicy 成员:
    :控制注解能在源码中出现
    :控制注解能在Class文件中出现
    :控制注解能在运行时出现
 
 

枚举

五大引用类型
定义:
public enum 枚举类名{}
所有的枚举类都是Enum

枚举的特点:
都是 static final,定义的时候不写,
写完所有枚举加
枚举名称
使用:类名直接调用
注意:每一个枚举都是当前枚举类对象

枚举类中的枚举值都是本类类型
在枚举类中定义的构造,默认都是的
使用场景:表示对象的状态

方法名说明String toString()返回枚举值的名称values()返回所有的枚举值valueOf(String str)将一个字符串转成枚举类型

                    
小讯
上一篇 2024-12-28 18:10
下一篇 2025-01-01 17:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/9272.html