JAVA学习中的知识点

1.继承关系中的子类实例化执行过程详解

父类Animal,子类Cat,则Cat cat = new Cat()的执行顺序
实例化子类的类加载执行顺序:父类的静态属性及其静态代码块(从上到下顺序执行)一>子类的静态属性及其静态代码块一>子类的构造方法(但不执行里面的代码)一>父类的构造方法(但不执行里面的代码)一>Object类一>父类的非静态属性一>父类的构造代码块一>父类构造方法里的代码一>子类的构造代码块一>子类构造方法里的代码

注:
当执行Cat cat = new Cat(name,age)时,如果在子类的带参构造方法中没有显式标注的话,即super(name,age)时,仍然会执行父类的无参构造方法,如果父类无参构造方法没有,则直接编译报错。

2.包装类

缓冲区(对象池)
除了Double和Float,其他包装类都有缓冲区(-128~127之间的数)的概念,即:
Integer i1 = 100;
Integer i2 = 100;
则i1 == i2是true的,但是大于127或者小于-128的数则不对。

3.多态

多态分为编译时多态和运行时多态,编译时多态指的是对象引用本类的实例,方法重载是编译时多态的体现;运行时多态指在继承中,父类对象引用子类实例(父类 f = new 子类()),父类对象会调用子类中重写的方法,无法调用到子类独有的方法。

4.List、Set、Queue(collection)以及Map

List(ArrayList、LinkedList)

  1. list是有序的且可以重复的集合,它可以直接通过get方法获取内容,当然也可以通过迭代器Iterator获取。

Set(HashSet)

  1. set是无序的且不可以重复的集合,它不可以通过get方法获取,只能通过增强for循环或者迭代器方式获取。这里的不可重复不是指新增重复的内容后编译报错,而是新增重复的内容无法生效。

  2. 如果set里保存的是对象,即使对象的内容一样也不会当作是重复内容,只有重写equals方法才可以。

    List list = new ArrayList<>();
    Set set = new HashSet<>();
    Iterator it  = list/set.iterator();
    while (it.hasNext()){
        System.out.println(it.next());
    }
    
    Set set = new HashSet<>();
    for (Object it:set) {
         System.out.println(it);
     }
    

Queue(LinkedList)


Map(HashMap)

  1. 无序的键值对。

  2. Key值不允许重复,但Value值可以重复。Key和Value可以为null值,但Key只能存在一个null,而Value可以存在多个null。

  3. 当添加Key值重复的数据时,实际上相当于修改操作,保留的是后面新增的内容。

    Map map = new HashMap<>();
    Set> set = map.entrySet();
    for (Map.Entry entry:set) {
        System.out.println(entry.getKey()+"  "+entry.getValue());
    }
    

5.线程

线程的实现方式分为1.继承Thread类、2.实现Runnable接口,推荐使用第二种方式。
这两种方式的区别:

  1. java由于不支持多继承,第一种方式不利于代码的健壮性;
  2. 实现Runnable接口只有run()一个重写方法,而继承Thread类的时候有多个方法可供重写使用;

6.输入输出流

  1. 字节输入输出流(FileInputStream、FileOutputStream),缓冲输入输出流(BufferInputStream、BufferOutputStream),操作与字节输入输出流一致
    读取F:\BaiduNetdiskDownload\practise目录下的practise.txt文件中的内容

    FileInputStream fis = new FileInputStream("F:\\BaiduNetdiskDownload\\practise\\practise.txt");
    int n = 0;
    while ((n = fis.read()) != -1){
       System.out.print((char)n);
       fis.close();
    }
    
    FileOutputStream fos = new FileOutputStream("F:\\BaiduNetdiskDownload\\practise\\practise.txt");
    fos.write(50);
    fos.write('a');
    fos.close();
    
    FileInputStream fis = new FileInputStream("F:\\BaiduNetdiskDownload\\practise\\practise.txt");
    BufferInputStream bis = new BufferInputStream(fis);
    
  2. 字符输入输出流

你可能感兴趣的:(学习)