反射、日期相关类、Lambda表达式

反射
    把类的各个组成部分映射成Class对象,根据Class对象反过来操作类的各个组成部分,这就叫反射。
    编写源代码---javac 编译成class文件--创建实例对象,操作属性和方法
    class文件---类加载器ClassLoader,加载到内存,Class类型对象
    
    Class类型对象
        Class 类的实例表示正在运行的 Java 应用程序中的类和接口
        Class 没有公共构造方法
        只有jvm才能创建此对象。类加载只有一次,也就是意味着同一种数据类型的Class对象只有一个。
        1、创建Class对象
        static Class<?> forName(String className)  加载类,同时静态初始化
        //1、Class.forName  使用与框架中的配置文件
        Class cls=Class.forName("reflect.Student");
        //2、Student.class 使用在实参
        Class cls2=Student.class;
        //3、stu.getClass() 在有对象场景下
        2、Class
            类名
                String getName() 类的完全类名
            包 Package
                 Package getPackage() 获取此类的包。 
            属性Field
                Field[] getFields() 返回所有public的属性
                Field[] getDeclaredFields() 返回所有定义的属性
                Field getField(String name)  //NoSuchFieldException
                Field getDeclaredField(String name) 
                
                Field 
                    Object get(Object obj) 返回指定对象上此 Field 表示的字段的值。 //IllegalAccessException
                    void set(Object obj, Object value)  
                    void setAccessible(boolean flag)  
                     
            方法Method
                Method[] getMethods()  返回所有自己的及继承来的public的方法
                Method[] getDeclaredMethods()  返回所有定义的方法
                Method getMethod(String name, Class<?>... parameterTypes)//NoSuchMethodException  
                Method getDeclaredMethod(String name, Class<?>... parameterTypes)
                
                Method 
                    Object invoke(Object obj, Object... args)  执行方法
                    void setAccessible(boolean flag)  
            构造Constructor
                Constructor<?>[] getConstructors() 
                Constructor<T> getConstructor(Class<?>... parameterTypes) 
                Constructor
                     T newInstance(Object... initargs)   
            
             T newInstance()  调用无参构造来构建对象
    案例:
        模拟一个框架,实现能创建任意类的对象,并且给属性赋值
        反射+配置文件(properties,xml)        
    
    注意:
        反射无敌的,比较灵活,一般高手使用的多。
        学习框架的时候,对框架有个更好的理解。
        一般在业务角度使用的少。
        
日期相关的类
Date        
    表示特定的瞬间,精确到毫秒(自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。)
    new Date() 当前系统时间
    Date(long date)
    long getTime() 
    void setTime(long time) 
Calendar
    特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法
    Calendar rightNow = Calendar.getInstance();
    int get(int field) 
     void set(int field, int value)  
     void set(int year, int month, int date)  
     void set(int year, int month, int date, int hourOfDay, int minute)
         
     void setTime(Date date)
     Date getTime() 
DateFormat
    进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)
    String format(Date date) 将一个 Date 格式化为日期/时间字符串。
    Date parse(String source)  //ParseException
         字符串要和DateFormat中设置的模式一致
    SimpleDateFormat
         SimpleDateFormat(String pattern) 
    注意:不是线程安全。在多线程中使用,数据不一致的问题
LocalDate、LocalTime、LocalDateTime
    jdk1.8新增
    LocalDate 年月日
    LocalTime 时分秒
    LocalDateTime 年月日时分秒
         
Lambda表达式
    主要的功能:简化代码
    语法:
        (参数列表)->{代码块}    
        -> lambda操作符 ,读做goes to
        
        可以进一步简化
         * 参数列表中的数据类型可以省略的。如果有多个参数,要省都省,要不省都不省
         * 参数列表中,参数只有一个,小阔号可以省略
         * 方法体中,如果只有一个语句,大括号可以省略
         * 返回值,如果一个方法体中只有一个返回语句,则return也可以省略
    场景:
        1、替换匿名内部类    
            要求:接口只有一个抽象方法
            可以通过注解@FunctionalInterface限制接口只能由一个抽象方法
            jdk8之后,接口中可以有默认方法和静态方法
        
        2、方法调用
              普通方法:对象::方法名
              静态方法:类名::方法名
               
             不要求方法名一致,要求参数列表要一样
        3、集合、线程
        

    

        
        
        
        
        
        
        
        
        
        
        
        
        
            
            
            

Guess you like

Origin blog.csdn.net/qq_52253798/article/details/119423522