• JAVA基础知识总结——part1


    JAVA基础知识总结

    1. java的数据类型

    分为两种

    • 基础类型: byte,short,char,int, float,double,long, boolean
    • 引用类型:接口,类

    2. java的循环和逻辑控制

    循环: while, do/while,for,each循环

    逻辑控制: if/else, break, continue, switch

    3. java的继承

    子类拥有父类的所有非private方法

    子类可以拥有自己的方法和属性,子类是对父类的扩展

    子类可以重写父类的方法

    一个类如果用final修饰,则该类不能被继承

    一个方法如果用final修饰,则该方法可以被继承,但是不能被重写

    如果父类里面有默认无参数构造函数,在子类的构造函数里面会默认先调用父类的无参构造函数,如果想调用父类的有参构造函数,需要使用super关键词调用

    重写和重载的区别:

    重写:

    外壳不变,核心重写。方法名不变,方法参数列表不变,返回类型小于等于父类,抛出的exception小于等于父类,访问权限大于等于父类

    重载:

    方法名相同,但是参数必须不同,这些不同可以是参数的返回类型,参数的个数,等等,返回类型可以 不同。

    4. java的多态

    多态的意思是同一个操作在不同的对象中执行的过程不同,表现形式不同

    多态有三个前提条件

      继承,重写,父类引用只想子类引用

    tips: 多态在编译的时候会check父类中有没有该方法,但是执行的时候是执行的子类的方法

    5. java的抽象类

    java的抽象类使用abstract关键词修饰

    包含抽象方法的类称为抽象类

    抽象类里面只有方法的声明,没有方法的实现

    如果一个类继承抽象类,则必须实现所有的抽象方法,否则该类也要申明为抽象类

    抽象类不能new

    6. java的接口

    接口是一堆抽象方法的集合

    接口是隐式抽象,就是不用什么abstract,但是所有的方法都是抽象方法

    接口可以实现,使用implements关键词实现

    7. java的io

    流分为两类

    字节流: 基于InputStream、OutoutStream

    字符流: 基于Reader 、Writer

    如果确定读取的是字符,可以使用字符流,如果读取的可能是二进制,则使用字节流。字节流可以使用InputStreamReader进行装换

    读取文件:

    BufferReader bufferReader = new BufferReader(new FileReader(new File("")));
    
    bufferReader.readline();
    
    String line;
    
    while((line=bufferReader.readline())!=null){
    
      System.out.printlin(line);
    
    }

     写文件:

    适用于文件不是很大的情况

    FileWriter fileWriter = new FileWriter(new File("xxxx"));
    
    fileWriter.write(stringBuffer.toString());

    文件大的话应该使用bufferWriter

    BufferedWriter fileWriter = new BufferedWriter(new FileWriter(new File("xxxx")));
    
    fileWriter.write(stringBuffer.toString());
    
    fileWriter.flush();
    fileWriter.close();

    tips: 发现不做flush,文件会出现部分,不全,原因需要调查

    A: 调查后发现因为FileWriter写文件的时候会设置一个缓冲区,当缓冲区满了的时候,才会向外写,所以可能在最后一部分的时候缓冲区没有满,没有flush让数据强制书写的话就会丢失一部分数据,所以做flush是必须的

     

    8. java的集合
    集合的概念: 在java中,我们常常需要储存多个数据,然而我们又不能确定它的长度,所以不能使用数组,所以集合就被引入了。用来储存动态增长的多个数据集。
    集合的分类: 主要分为两大类
          —Collection
            ——List: 有序
            ——Set: 无序,没有重复的元素
            ——Queque: 先进先出的队列
    ——Map:
            ——键值对,key必须是唯一的

    Collection

      set:
    HashSet——底层的数据结构为哈希表,无序
         TreeSet——底层的数据结构为二叉树,有序


    因为collection都继承于Iterable,所以他都是可以使用for each和iterator循环的。

    8.1 Set——HashSet
    set的元素不重复,是无序的,查找慢,效率低
    新建一个set
    Set<String> set = new HashSet<String>();
    set.add("a")
    set.add("b")
    set.add("c")
    set.add("d")
    set.add("e")
    set.add("a")

    然后输出set,你会发现没有a,因为a是重复的元素。
    Iterator<String> ite=list.iterator();
    while(ite.hasNext())//判断下一个元素之后有值
    {
    System.out.println(ite.next());
    }

    结果b,c,d,a,e

    Q1: set是如何判断元素是否重复呢?
    使用hashcode和equals,因为string已经重写了hashcode和equals方法,所以我不用自己写。 正常的情况是先比较hashcode值是否一样,如果一样再使用equals方法比较是否一样,如果都一样则拒绝加入,如果不一样则加入。所以在set里面是自己的元素的集合的时候,比如加入的是多个student对象,则需要重写equals和hashcode方法,这样才能添加。


    8.2 Set——TreeSet
    treeset是实现的二叉树。是一个可以排序的没有重复元素的集合。
    新建一个treeSet
    Private static void TestTreeSet(){
    Set<String>treeSet=newTreeSet<String>();
    treeSet.add("A");
    treeSet.add("B");
    treeSet.add("C");
    treeSet.add("D");
    treeSet.add("E");
    treeSet.add("A");
    printElement(treeSet);
    }

    Private static voidprintElement(Setset){
    Iterator<String>e=set.iterator();
    while(e.hasNext()){
    System.out.println(e.next());
    }
    }

    如果一个对象的集合想要使用treeset,则必须实现comparable接口,重写compreTo方法。


    8.3 List
    List存储的是有序的可重复的元素。常用的有ArrayList和LinkedList
    常用的方法:
    添加:
    Add
    addAll

    删除:
    Clear
    Remove

    改:
    Set

    循环:
    Iterator


    8.4 Queque


    8.5. Map
    map用来储存的是键值对。key必须是唯一的,values可以重复。
    Map<String,String>map=newHashMap<String,String>();
    map.put("1","student1");
    map.put("2","student2");
    map.put("3","student3");
    map.put("4","student4");
    map.put("5","student5");


    循环:
    方法一:
    Set<String>keySet=map.keySet();
    for(Stringkey:keySet){
    System.out.println(key+","+map.get(key));
    }

    方法二:
    Set<Map.Entry<String,String>>test=map.entrySet();
    for(Map.Entry<String,String>entry:test){
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
    }

    
    
  • 相关阅读:
    Docker简介,安装,配置
    Centos7给 root 账户开通ssh权限
    [转载]Hyper-v 安装CentOS 7
    软件开发_六大原则
    php函数名后冒号(:)+数据类型(返回值类型限制/php新特性)
    MySQL--事务介绍
    MySQL存储引擎
    leetcode刷题笔记300题 最长上升子序列
    leetcode刷题笔记299题 猜数字游戏
    **leetcode刷题笔记四 两个有序序列的中位数**
  • 原文地址:https://www.cnblogs.com/emmaduan/p/10906154.html
Copyright © 2020-2023  润新知