Java知识点总结——反射 集合 泛型 异常 线程 IO流

1.反射
    Person p = new Student();
    List<Student> list = new ArrayList();//编译时是List类型,但是运行时实际上是ArrayList
    public void test(Object o){}

    为什么要使用反射
        安全性会高,在用户运行时就可以知道要返回什么类型
    反射的步骤
        1.获取Class对象
            共有3种方式:
                1.实例对象可以直接调用它的getClass方法;
                    Class class2 = new Server().getClass();
                2.类可以直接通过类的class属性去获取Class对象;
                    Class class1 = ServerSocket.class;
                3.如果不知道具体的类或实例,可以通过Class的forName静态方法
                    Class.forName("com.briup.chap11.Server");    //注意要传入包名+类名的权限定名,否则会报ClassNotFound异常
        2.获取Class中的方法————通过API            
2.集合
    集合实际上就是一种容器
    在util包底下,代表一种工具,而事实上集合就是一种存放对象的工具
    1.集合体系
        iterator
            -->collection
                -->Set-----需要注意TreeSet的排序规则
                    -->HashSet
                    不需要指定排序规则
                    通过HashCode短路与equals来进行排序
                    -->TreeSet
                    需要指定排序
                            自然排序 让元素自身具备比较性
                            客户端排序 让Set集合具有比较性
                                    需要导入util包,实现Comparable接口,但是需要使用匿名内部类来定义,因为只需要使用一次    
                -->List-----需要注意几个实现类的特性比较
                    -->ArrayList
                    -->LinkedList
                    -->Vector
                    本质上ArrayList是由数组作为底层实现,查找快
                    LinkedList和Vector利用链表实现,操作(增删改)快
                        但LinkedList不安全,效率高
                        Vector安全,效率低
                -->Queue
            -->map-----内部接口Entry<Key,Value>
                -->HashMap
                    键和值都可以为null,不安全,效率高
                -->TreeMap
                -->HashTable
                    键和值不可以为null,较为安全,效率低
3.泛型
    泛型只是在编译中起作用,在运行时会自动将泛型信息擦除
    因此,泛型不是类
    
4.异常 
    给用户提供一个有用的信息
    应当注意两个关键字
    1.throws 跟在方法体前面,参数列表后面
    2.throw 在哪产生,在哪抛出,一般不去处理
    
5.线程——主要为了解决多并发问题
    1.生命周期
        1.新建
            1>继承thread类 2>实现Runnable接口
        2.就绪
            线程启动.start();
        3.运行
        4.阻塞
        5.死亡
        
6.IO流
    1.字符流  BufferReader-->包装字符流
                如果只有字节流的情况下,需要用桥流InputStreamReader转换成字符流
                new BufferReader(new InputStreamReader(socket.getInputStream()))
    2.字节流  FileInputStream
                new FileInputStream(File)
    3.对象流  Object
                最常用的是序列化,需要实现序列化接口-->Serializable
    

猜你喜欢

转载自blog.csdn.net/gangangan0001/article/details/88815684