zoukankan      html  css  js  c++  java
  • java基础加强

    一、四大类测试(黑盒测试和单元测试是我们经常用的)

    1、黑盒测试:测试效率非常快,但是它不知道底层的实现

    2、白盒测试:(测试人员写一段代码,去测已写好的程序)测试效率非常慢,但是足够安全(知道底层的实现)

    3、灰盒测试:介于黑盒和白盒之间,他既做黑盒的是,又做白盒的事,只是写的测试代码没有白盒的那么复杂

    4、单元测试:使用Junit3java5之前使用)和Junit4java5之后使用)来进行测试

    二、单元测试

    1为什么要学习单元测试

       原因: 我想在一个类中,可以测试多个方法,而以前的主方法不能办到这点,因为以前主方法里面,一个类只能测试一个方法

    1、单元测试值Junit

    Junit分为Junit3和Junit4,Junit4包含了Junit3,但是Junit3和Junit4的jar包都是第三方jar包,因此需要导包,导入jar包步骤:选中项目右键---》点击build path----》点击Add lirbary--->选中junit---》选中junit3--->点击finsh。

    Junit3测试注意事项:

    1、定义一个类,让这个类去继承TestCase;

       2、定义方法的时候,必须被public修饰符修饰,返回值类型必须void,方法的形参列表必须为空,方法名必须以test开头。

    3、创建Junit3单元测试最见到的方法:直接新建Junit Test Case,在新建的时候选中版本;

    4、如果要测试某个方法,一定要选中某个方法,然后再次进行测试

    Junit4测试注意事项:

    1、导入JUNIT4的jar包

    2、在你要测的方法上面加一个注解  @Test

    3、定义方法的时候,必须被public修饰符修饰,返回值类型必须void,方法的形参列表必须为空。

    三、工具类

    1定义工具类标准名

       标准的命名: 以 Utils  Helper 结尾的都表示工具类

    2、如何写工具类?

       1. 要么所有的方法都是static修饰符修饰

       2. 要么该类使用单例模式来创建

    四.资源文件

    资源文件也可以看成是配置文件,一般的形式有二种:properties形式和XML形式:

       properties(Properties是一个集合)文件中数据的存储是以键值对的形式存在,每一行为一条数据,只能存储字符串形式的数据,Properties文件中值的部分任意字符都会被当做值的一部分,尤其是空格

    注意:资源文件只有放在src及以下文件夹时,才是放在bin(字节码目录)目录下的。

       读取资源文件有4种方式:

    1. 通过字节输入流读取
    public class PropertiesTest{
        /*
         * 方式一:通过字节输入流读取
         * @Test 
        public void testInputStream() throws IOException{
            //创建一个properties对象,用来从输入流中读取属性列表
            Properties properties = new Properties();
            //创建一个字节输入流对象      这里有硬编码问题(将资源文件地址写死了)
            FileInputStream fileInputStream = new FileInputStream("D:/JAVEEworkspace/java加强/src/file.properties");
            //将磁盘数据加载到内存
            //void load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。 
            properties.load(fileInputStream);
            System.out.println(properties);
        }*/
    View Code

       2. 通过字节码对象读取--------------->

       字节码对象:  类型.class    在jvm中只有1份

       通过指定的资源名,获取InputStream

        InputStream getResourceAsStream(String name)   Class类型中的方法

      注意:通过字节码获取资源文件(以.operties/.xml/.helper结尾的文件)时,

      path不以"/"开头时,默认从此类所在的包下获取资源文件;path以"/"开头时,

      则是从ClassPath(字节码文件的根)下开始获取资源文件。

    /* 方式二:通过字节码对象读取
             * 注意:通过字节码获取资源文件(以.operties/.xml/.helper结尾的文件)时,
             * path不以"/"开头时,默认从此类所在的包下获取资源文件;path以"/"开头时,
             * 则是从ClassPath(字节码文件的根)下开始获取资源文件。
         */
        @Test
        public void testInputStream() throws IOException{
            Properties properties = new Properties();
            //获取一个字节码对象     这里也有硬编码问题(将类名写死了)
            Class clz = Properties.class;
             /*  InputStream getResourceAsStream(String /name) 查找具有给定名称的资源。 
                   使用字节码对象获取给定名称资源的字节输入流
               */
             
             
            InputStream inputStream = clz.getResourceAsStream("/file.properties");
            properties.load(inputStream);
            System.out.println(properties);
        }
    View Code

       3. 通过类加载器进行读取

       类加载器: 把字节码文件放到jvm中的那个东西,就叫做类加载器

       注意:

      当用类加载器获取资源文件时,path不能加"/",

      因为是从ClassPath根目录下获取,下面两种方式同理

    /*
         * 方式三:通过类加载器进行读取
         *         注意:
         *             当用类加载器获取资源文件时,path不能加"/",
         * 因为是从ClassPath根目录下获取,下面两种方式同理
         * @Test
        public void testInputStream() throws IOException{
            Properties properties = new Properties();
            //创建一个字节码对象  这里也有硬编码问题(类名被写死了)
            Class clz = PropertiesTest.class;
            //创建一个类加载器
            ClassLoader classLoader = clz.getClassLoader();
            InputStream inputStream = classLoader.getResourceAsStream("file.properties");
            properties.load(inputStream);
            System.out.println(properties);
        }*/
        
    View Code

       4. 通过当前线程获取类加载器进行读取,把资源文件中的内容读取到内存(Properties)中

     推荐使用

    //方式四:通过当前线程获取类加载器进行读取     推荐使用
        @Test
        public void testInputStream1() throws IOException{
            Thread currentThread = Thread.currentThread();
            // ClassLoader getContextClassLoader() 返回该线程的上下文 ClassLoader。 
            ClassLoader contextClassLoader = currentThread.getContextClassLoader();
            InputStream resourceAsStream = contextClassLoader.getResourceAsStream("file.properties");
            Properties properties = new Properties();
            properties.load(resourceAsStream);
            System.out.println(properties);
        }

    五、复杂的单例模式

    单例模式:

       1.饿汉模式

        缺陷: 占内存

       2.懒汉模式

      饿汉模式:方式1写法

      使用场景: 仅仅只适用于创建比较简单的对象,对于有些对象,不是一个new就能搞定,它要比较复杂的创建

      饿汉模式:

    方式2,使用静态代码块来创建对象-----------》专门来创建比较复杂

      的对象(因为不能直接在类中进行条件判断之类的代码,因此想要创建比较

      复杂的对象,在饿汉模式中只能使用静态代码块实现,而在懒汉模式中可以

      直接实现。

    public class SingleInstance {
        private SingleInstance(){
        }
        private static SingleInstance instance = null;
        static{
            instance = new SingleInstance();
        }
        public static SingleInstance getInstance(){
            return instance;
        }
    
    }
    View Code

     

    一、简单的工厂模式(factory)

    简单工厂模式:

    通过传递的参数,来要创建的不同对象

    二、装饰器模式(decorate

    装饰模式: 简单理解就是增强对象功能的,也就是当我们要使用某个方法时,发现功能不够,但是又不能修改源码,所以采用装饰器的方法

    可以使用继承的方式,添加我们想要的功能,但是没有装饰器好

    已经用到的装饰器有:

       new BufferedReader(new InputStreamReader(new FileInputStream(new  File("D:/"))));

    三、适配器(adapter

    适配器模式:把源对象转为目标对象

    可以这样理解:继承了一个源对象的类,实现了一个目标对象的接口,也就是说覆写了接口的抽象方法,然后在里面调用父类的方法,实现两个类在一起工作。

  • 相关阅读:
    weiphp中会员卡插件CardController控制器代码信息
    weiphp 刮刮卡控制器代码2
    weiphp中会员管理方法代码、刮刮卡部分代码
    weiphp 投票插件的主控制器部分代码
    weiphp 投票插件的主控制器部分代码2
    系统函数
    redis在Linux安装报错
    Linux下安装redis报错信息
    Linux系统相关命令
    Elasticsearch总结
  • 原文地址:https://www.cnblogs.com/limengkun/p/10753961.html
Copyright © 2011-2022 走看看