java基础小总结

@基础知识点总结

   //List转换为Array
    List<String> list=new ArrayList<String>();
    String[] countries=list.toArray(new String[list.size()]);
   //Array转换为List
    String[] countrie={};
    List list1= Arrays.asList(countrie);
   
    //Map转换为List
    List<value> list2=new ArrayList<value>(map.value());
    //Array转换为set
    String[] countri={};
    Set<String> set=new HashSet<String>(Arrays.asList(countri));
 
    //Map转换为set
    Map<Integer,String> sourceMap=createMap();
    Set<String>targetset=new HashSet<>(sourceMap.values());

    //Set转List
    String[] staffs=new String[]{};
    Set<String>staffsset=new HashSet<>(Arrays.asList(staffs));
    List<String>result=new ArrayList<>(staffsset);
  
    //List转换成为数组1
    List list2=new ArrayList();
    final int size=list2.size();
    String[] arr=list.toArray(new String[size]);
 
    //List转换成为数组2
    String[] userid={};
    List<String>userList=new ArrayList<>();
    Collections.addAll(userList,userid);

    //数组转换成为List1
    String[] arr1=new String[]{};
    List list3=Arrays.asList(arr1);
   
    //数组转换成为List2
    ArrayList<String>arrayList=new ArrayList<>(arr1.length);
    Collections.addAll(arrayList,arr1);
    //数组转换Set
    String[] staff=new String[]{};
    Set<String>staffSet=new HashSet<>(Arrays.asList(staff));
   
    //List转Set
    String[] staf=new String[]{};
    List stafList=Arrays.asList(staf);
    Set result1=new HashSet(stafList);
  
    //Calender转换String
    Calendar calendar=Calendar.getInstance();
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    String datestr=sdf.format(calendar.getTime());

    //String转化Calendar
    String str="2018-12-12";
    SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
    Date date=sdf1.parse(str);
    Calendar calendar1=calendar.getInstance();
    calendar1.setTime(date);

    //Date转化String
    SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");
    String datestr1=sdf2.format(new Date());
 
    //String转换Date
    String str1="2018-12-13";
    SimpleDateFormat sdf3=new SimpleDateFormat("yyyy-MM-dd");
    Date birthday=sdf3.parse(str1);
 
    //Date转化Calendar
    Calendar calendar2=Calendar.getInstance();
    calendar2.setTime(new Date());

    //Calendar转化Date
    Calendar calendar3=Calendar.getInstance();
    Date date1=calendar3.getTime();

链表:

将每个对象存放在独立的节点中,每个节点还存放着序列中下一个节点的引用,在java中,
 所有链表都是双向链表——————即每个节点还存放着上一个节点的引用

映射表的映射:

 映射表有三个视图,分别是:键集、值集合和键/值对集。
    Set<K> keySet()
    Collection<K> values()
    Set<Map.Entry<K,V>> entrySet()

抽象类与接口:

抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)

=与==区别:

=是赋值运算符,用于为变量或常量赋值,而==则表示相等关系的关系运算符

反射机制:
面向接口的程序开发:灵活性高,声明谁就调用谁定义的方法,方法的实现是对应的实现类
在程序的运行期修改代码:
class的作用:可以在代码中不引用某各类,却可以使用这个类
获取class的三种方式:

   1:通过实体类的对象,调用getclass方法
                  2:类名.class
                  3: class.forName("");会抛出异常

反射调用方法:
1.获取构造方法:
1).批量的方法:

  public Constructor[] getConstructors():所有"公有的"构造方法
  public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有)   
                2).获取单个的方法,并调用:
   public Constructor getConstructor(Class... parameterTypes):获取单个的"公有的"构造方法:
   public Constructor getDeclaredConstructor(Class...parameterTypes):获取"某个构造方法"可以是私有的,或受保护、默认、公有;
调用构造方法:
     Constructor-->newInstance(Object... initargs)
                2) newInstance是 Constructor类的方法(管理构造函数的类)
                api的解释为:
                newInstance(Object... initargs)
                           使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,
                           并用指定的初始化参数初始化该实例。
                它的返回值是T类型,所以newInstance是创建了一个构造方法的声明类的新实例对象。并为之调用

反射获取成员变量并调用:
1.批量的

   1).Field[] getFields():获取所有的"公有字段"
   2).Field[] getDeclaredFields():获取所有字段,包括:私有、受保护、默认、公有;

2.获取单个的:

 1).public Field getField(String fieldName):获取某个"公有的"字段;
 2).public Field getDeclaredField(String fieldName):获取某个字段(可以是私有的) 
   设置字段的值:
        Field --> public void set(Object obj,Object value):
               参数说明:
               1.obj:要设置的字段所在的对象;
               2.value:要为字段设置的值;

反射获取成员方法并调用:
1.批量的:

  public Method[] getMethods():获取所有"公有方法";(包含了父类的方法也包含Object类)
  public Method[] getDeclaredMethods():获取所有的成员方法,包括私有的(不包括继承的)

2.获取单个的:

 public Method getMethod(String name,Class<?>... parameterTypes):
               参数:
                   name : 方法名;
                   Class ... : 形参的Class类型对象
   public Method getDeclaredMethod(String name,Class<?>... parameterTypes) 
调用方法:
   Method --> public Object invoke(Object obj,Object... args):
               参数说明:
               obj : 要调用方法的对象;
               args:调用方式时所传递的实参;

反射机制应用的场景:

 1:逆向代码,例如反编译
 2:与注解相结合的框架,例如Retrofit
 3:单纯的反射机制应用框架
 4;动态生成的框架

栈:主要是用于实现堆栈数据结构的存储方式(先进后出)push()压栈pop()栈中弹出(弹栈)
队列:主要是为了可以使用LinkedList模拟队列数据结构的存储方式(先进先出)offer()poll()
HashMap和Hashtable的6个区别:

  1:线程安全:Hashtable是线程安全的HashMap不是线程安全的
  2:性能优劣:Hashtable性能较差,HashMap性能较好使用更广,因为Hashtable线程安全,每个方法都要阻塞其他线程
  3:Null:Hashtable是不允许键或值为null的,HashMap的键值则都可以为Null
  4:实现方法:Hashtable继承Dictionary类,而HashMap继承的是AbstractMap类
  5:容量扩容:HashMap的初始容量为16,Hashtable的初始容量为11,两者的负载因子默认都是0.75,当现有容量       大于总容量*负载因子时,HashMap扩容规则为当前容量易翻倍,Hashtable扩容规则为当前容量翻倍+1
  6:迭代器:HashMap中的Iterator迭代器是fail-fast的,而Hashtable的Enumerator不是fail-fast的,
             所以当其他线程改变了HashMap的结构;如:增加,删除元素将会抛出ConcurrentMOdificationExceprtion异常,
             而Hashtable则不会

Hashtable性能差那Hashtable的替代品:

 ConcurrentHashMap,用来保证线程安全性,提升Map集合的并发效率
      ConcurrentHashMap使用了Segment的概念,默认为16个Segment,Segment里面依然还是数组+链表的数据结构,
      相当于给HashMap分桶处理,因每次只会锁住其中一个Segment,所以性能非常好
      jdk1.8中:ConcurrentHashMap抛弃了Segment+数组+单向链表的设计,
      改为了和HashMap同样的数组+单向链表+红黑树的数据结构,
      同时ConcurrentHashMap使用了CAS算法+Synchronized来保证集合的线程安全性,
      ConcurrentHashMap相当于一性能安全的HashMap

对象序列化:将对象Object转换为byte序列,反之叫做对象的反序列化
序列化流是过滤流:

 ObjectOutputStream方法writeObject()对象的序列化
  ObjectInputStream方法readObject()对象的反序列化
  对象必须实现序列化接口serializable才能进行序列化,否则将出现不能序列化的异常,
  serializable是一个空的接口,没有任何方法,仅作为序列化的一个标识

流的分类:

  字节流:处理字节或二进制对象,输入InputStream,输出OutputStream
  字符流:处理字符或字符串(一个字符占两个字节)输入Reader,输出writer
  字节流操作对象:a.纯文本 b.需要查指定的编码表
  字符流操作对象:a.图像,音频等多媒体文件 b.无需查询指定编码表

字节流与字符流的相互转换:

 a:InputStreamReader是字节流通向字符流当前桥梁
 b:从字符流到字节流:可以从字符流中获取char[]数组,转换为String,然后调用String的API函数getBytes()
          获取到byte[]然后可以通过ByteArrayInputStream,ByteArrqayInputStream来实现到字节流的转换

session具有的特点:

   1:session中的数据保存在服务器端
   2: session中可以存储任意类型的数据
   3:session默认的生命周期是30分钟,可以手动设置更长或更短的时间

session的生命周期:

session中的数据保存在服务器端,在客服端需要的时候创建session,
       在客户端不需要的时候销毁session使它不再占用服务器内存

String类中支持正则表达式的方法:

matches()匹配正则表达式replaceFirst
          slipt()根据正则表达式拆分字符串
          replaceAll()将满足正则表达式的部分已给定字符串替换       

ArrayList和Vector区别:

ArrayList是非线程安全的,效率高,Vector是基于线程安全的效率低
LinkedList低层链表实现,增删快查询慢

线程:
创建线程的两种方式:

       1:自定义一个类继承Thread,2:实现Runnable接口
                          同步的实现方面有两种,分别是synchronized,wait与notify
两种创建线程的区别:
            继承Thread的好处:可以直接使用Thread类中的方法代码简单
                        弊端:如果已经有了父类,就不能用这种方法
            实现Runnable接口的好处:即使自己定义的线程类有了父类,也没关系,因为父类可以实现接口。接口可多实现
                              弊端:不能直接使用Thread中的方法,需要先获取到线程对象后,才能得到Thread的方法代码复杂

wait和sleep区别:

  1:sleep是Thread中的静态方法,wait是Object中的方法
  2:sleep方法可以在任意地方调用,wait在同步代码块或同步方法中调用
  3:sleep方法必须传参数,时间结束自然醒,wait可传参可不传参,不传参马上等待传承是指定时间结束后进入等待

wait和notify以及notifyAll方法是谁的方法:
他们都是Object的方法,因为调用wait和notity方法要使用锁对象调用,锁对象可以是任意对象,
所以要将这些方法放在Object类中
heap和stack区别:

 栈是一种线形集合,其添加和删除元素的操作应在同一段完成,栈先进后出的方式进行处理
 堆是栈的一个组合元素

Iterator和ListIterator的区别:

   Iterator可用来遍历List和Set集合,ListIterator只能遍历List
        Iterator对集合只能是前向遍历,ListIterator既能前向也可后向
        ListIterator实现了Iterator接口,并包含其他功能

动态加载与静态加载的区别:

  new创建对象的方式称为静态加载,而使用Class.forName("")称为动态加载,
        区别:
            静态加载的类的程序在编译时期加载(必须存在),而静态加载的类在编译时期可以缺席(源程序不必存在)法知识。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值