Log4j,装箱拆箱,反射

本文详细介绍了Log4j的日志记录功能,包括日志优先级、输出源与格式;解释了装箱与拆箱的概念及其在Java中的应用;并深入探讨了反射机制在Java中的作用与使用方法。通过示例代码,读者可以掌握如何利用这些技术进行高效编程。

Log4j、装箱拆箱、反射

一,log4j

1,  Log4j三个重要组件:日志信息的优先级、日志信息的输出目的地、日志信息的输出格式

2,  log4j日志优先级从高到低:errorwarninfodebug

log4j的核心原则是:只有大于或等于在log4j中定义的日志信息级别的日志请求才能被打印出来

3,  log4j日志信息输出源:控制台(console)、文件(file)、图形组件(GUI

每一个输出源就是一个Appender,分别对应的是:ConsoleAppenderFileAppender

DailyRollingFileAppender:将日志信息输出到按日期区分的多个文件中,每个log文件只记录当天的log信息

4,  log4j日志信息输出格式:

a)         PatternLayout(常用):灵活指定布局模式,必须配置layout.ConversionPattern

b)        HTMLLayout:以HTML表格形式布局

5,  log4j的优点:

a)         可以设定log信息的输出目的地

b)        可以定义每一条日志信息的级别

c)        有利于系统的规划

6,  使用log4j记录日志

第一步:导入log4j.jar

第二步:配置log4j.properties文件

###将日志信息输出到控制台###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%m%n

###把日志信息输出到文件中###

log4j.appender.file=org.apache.log4j.FileAppender

log4j.appender.file.File=sysInfo.log

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%m%n %l

###设置日志的优先级别###

log4j.rootLogger=debug,stdout.file

 

第三步:在程序中log4j记录日志信息

public class Demo {

  public static void main(String args[]){

      Logger logger = null;

          try

            {

                             //加载指定位置的日志配置文件

                PropertyConfigurator.configure("d:/log4j.properties");

                             //获取日志记录器

               logger = Logger.getLogger(Log4jDemo.class.getName());

               int result = 4 / 0;

           }catch(Exception e)

          {

                             //输出日志信息

                             logger.debug(e.getMessage()); 

           }

     }

}

二,装箱与拆箱

       包装类:把原始数据类型封装称对象的类

       装箱:将原始数据类型封装成包装类的过程

       拆箱:从包装类中取出相应的原始值的过程

       装箱:

       Integer integer = new Integer(20);  //手动装箱,JDK5版本之前

       Integer integer=9;           //自动装箱,JDK5版本之后

 

 

       拆箱:

              Integer integer = new Integer(20);

        int  num= integer.intValue();     //手工拆箱JDK5版本之前

              int num2  = integer;     //自动拆箱,JDK5版本之后

 

 

       注意:自动装箱、自动拆箱是指基本数据类型与其对应的包装类间的自动转换。

例如:不能把5自动装箱成Float类,只能自动装箱成为Integer

    

三,反射

1,  定义:反射是指程序在运行时能够获取自身信息的机制

2,  java.lang.Class类代表了Java应用程序在运行时所加载的类或接口的实例。每加载一个类,JVM将为其自动生成一个Class对象

3,  通过Object类的getClass()方法或Class.forName()方法获取每个类对应的Class对象。然后通过Class对象获取类的基本信息

4,  Class类的方法

 

 

方法

描述

getName

获取当前类的名称

getSuperClass

获取当前类的父类

getConstructors

获取当前类中全部的构造方法

getMethods

获取当前类中所有方法的集合

getMethod

根据提供的方法名获取对应的Method对象

getDeclaredFields

获取当前类中所有定义的属性

getInterfaces

获取当前类所实现的全部接口

getPackage

获取当前类所属的包

      eg

    package xcl.T2;

       public class Student {

        public void sayHello()

        {

            System.out.println("欢迎");

        }

   

        public void showName(String name)

        {

            System.out.println("我的名字是:"+name);

        }

}

 

              public static void main(String[] args) {

        try

        {

            //自动加载类,获取Class对象

            Class c=Class.forName("xcl.T2.Student");                            System.out.println(c.getName());

            System.out.println(c.getSuperclass().getName());

            System.out.println(c.isArray());

            System.out.println(c.getMethods().length);

 

            //用Class对象的newInstance()方法实例化对象

            Student stu=(Student)c.newInstance();

            stu.sayHello();//调方法    

}catch(ClassNotFoundException e)

        {

            e.printStackTrace();

        }catch(InstantiationException ex)

        {

            ex.printStackTrace();

        }catch(IllegalAccessException ie)

        {

            ie.printStackTrace();

        }

    }

    通过反射调用类中的方法:

1,通过Class类的getMethod()方法取得Method对象

2,调用Method对象invoke()方法,并向该方法传递参数

案例:

public static void main(String[] args) {

        try {

            //动态加载Student类,获取Class对象

            Class c=Class.forName("xcl.T2.Student");

            //获得Student类中名称为sayHello的方法,该方法没有参数

            Method method1=c.getMethod("sayHello");

       

            //调用sayHello方法

            method1.invoke(c.newInstance());

           

            //调用带参数的方法

            //获取类中叫showName的方法,第二个参数是该方法的参数类型列表

            Method method=c.getMethod("showName", new Class[]{String.class});

           

            //调用showName方法,第二个参数是为方法传递的参数值列表

            method.invoke(c.newInstance(), new Object[]{"xcl"});

        } catch (Exception e) {

            e.printStackTrace();

        }

}

一, 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值