java基础

目录

  • 1. 基本概念
    • 1.1 Java修饰符:
    • 1.2 重载与重写:
    • 1.3 成员变量修饰符:
    • 1.4 方法修饰符:
    • 1.5 接口和抽象类:
  • 2.集合Collection
    • 2.1集合collection总览:
    • 2.2各类介绍:
  • 3.集合Map
    • 3.1各类介绍:
  • 3.集合Map
    • 3.2 HashMap:
  • 4.Session和Cookie
    • 4.1Cookie
  • 5.异常
    • 5.1为什么有些方法要求抛出异常有些不需要?
  • 6. IO流
    • 6.1 IO流概念
    • 6.2 IO流

【写在前面】

  • 这个是在巩固java基础过程做的一些笔记,因为是笔记,所以后续先更新自己有道云普通笔记,再是md笔记,最后才是同步到博客园
  • 有道云普通链接
  • 有道云md地址

1. 基本概念

1.1 Java修饰符:

  1. 权限控制符

    同包 同包 同包 非同包 非同包
    同类 子类 非同类 子类 非同类
    public
    private × × × ×
    protected ×
    default × ×
    • a. public

      • 作用对象:类、方法、变量
      • 作用范围:公共类,所有的类都可以访问
    • b. private

      • 作用对象:类、方法、变量

      • 作用范围:私有类,只能被自己类使用

    • c. protected

      • 作用对象:类、方法、变量
      • 作用范围:保护类,只能被自己类、子类和同一包下的其他类使用
    • d. default

      • 作用对象:类、方法、变量
      • 作用范围:默认类,同包类都可以访问
  2. 状态修饰符

    • a. static

      • 作用对象:类、方法、变量
      • 作用范围:创建独立于具体对象的域变量或者方法
    • b. final

      • 作用对象:类、方法、变量

      • 作用范围:通常配合static创建类常量

        • 类:不能被继承
        • 方法:必须赋初值,只初始化一次
  3. 抽象修饰

    • abstract

      • 作用对象:类、方法、变量

      • 作用范围:

        • 类:不能被实例化,方法未具体;因为不能实例化,必须要被继承才能使用;可以没有抽象方法,其余同普通的类
        • 方法:只含方法名,不能有方法主体;没有定义,即没有花括号,直接跟封号;一旦类中包含抽象方法,必须声明为抽象类

1.2 重载与重写:

  • 重载:方法名相同,但是参数不同,简单理解就是有相同方法名,最好加上@Overload注释
  • 重写:只能修改父类方法名的方法内容,参数和返回需要保持一致。final的方法不能被重写,static不能被重写但是能被再次声明。重写的方法能抛出任何非强制性异常,无论被重写的方法是否抛出异常,但重写不能抛出新的强制异常。构造方法不能被重写

1.3 成员变量修饰符:

  • public 公共访问控制符,可被任何对象访问
  • private 私有访问控制符,只允许自己的类方法访问,其他(包括子类)的方法都不能访问
  • protected 保护访问控制符 可以被自己的类和子类访问,子类中可以覆盖此变量
  • friendly 在同一个包中可以被访问,其他包中的类不能访问
  • final 最终修饰符 指定此变量的值不能变
  • static静态修饰符 指定被所有对象共享,即所有实例都可以使用该变量,变量属于这个类
  • transient 过度修饰符 指定该变量是系统保留hai,暂无特别作用的临时性变量
  • volatile 易失修饰符 指定该变量可以同时被几个线程控制和修改

1.4 方法修饰符:

  • public
  • private 只有自己能访问
  • protected 只有它的类和子类能访问
  • final 不能被重载
  • static 不需要实例化就可以激活
  • synchronize 同步修饰符 多线程中,用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁
  • native,本地修饰符,指定此方法的方法体是用于其他语言在程序外部编写的。

1.5 接口和抽象类:

接口:所有方法都是抽象的,会被隐性的指定为public static final。类可以实现多个接口,实现时必须实现所有方法。变量默认是final,成员函数默认都是public,不可以被实例化。

抽象类:是为继承而实现的,所以修饰符是public或者protected。可以同时包涵抽象和非抽象方法。类只能继承一个抽象类。实现的类为抽象类时可以不实现所有的方法,否则必须实现抽象方法。可以在不提供接口方法实现情况下实现接口。可以包含final变量,成员函数可以是private,proteted,public。不可以被实例化,但是如果包含main可以被调用。其他同普通的类

2.集合Collection

2.1集合collection总览:

精简后:

再次精简:

colletion继承自Iterable,有iterator的方法。iterable是个借接口,它有iterator 方法,返回的是iterable对象。Iterator 也是个接口,只有三个方法,

  • hasnext()
  • next)
  • remove()

但是Collection没有对应的实现方法,于是找到ArrayList,在ArrayList中以内部类的方式实现。Iterrator实际就是在遍历集合,所以遍历都可以使用Iterator。

2.2各类介绍:

  1. List集合特点就是:有序(存储顺序和取出顺序一致),可重复

    • a. ArrayList:底层数据结构是数组。线程不安全。数组无论插入还是删除都要移动后面的元素,如果较长的数组不适合用这个。本质就是一个扩容的数组,所以可动态增长。追求非同步的时候用来代替Vector。想同步时,可以使用Collections的方法:List list = Collections.synchronizedList(new ArrayList(...));

      • i. ArrayList是基于动态数组实现的,在增删时候,需要数组的拷贝复制
      • ii. ArrayList的默认初始化容量是10,每次扩容时候增加原先容量的一半,也就是变为原来的1.5倍
      • iii. 删除元素时不会减少容量,若希望减少容量则调用trimToSize()
      • iv. 它不是线程安全的。它能存放null值。
    • b. LinkedList:底层数据结构是链表(双向链表)。线程不安全。解决了数组移动的问题,在存放位置上存储对象引用,但链表的将每个对象放在独立节点中,而且是双向链接(对上一个和下一个的引用),更新时只是更新了引用前后位置的链接。

      • i. LinkedList实现了Deque接口,操作LinkedList像操作队列和栈一样
    • c. Vector:底层数据结构是数组。线程安全。现在已少用,被ArrayList替代

      • i. Vector所有方法都是同步,有性能损失
      • ii. Vector初始length是10 超过length时 以100%比率增长,相比于ArrayList
    • d. 总的来说:查询多用ArrayList,增删多用LinkedList。

      • ArrayList增删慢不是绝对font>的(在数量大的情况下,已测试)
        • 如果增加元素一直是使用add()(增加到末尾)的话,那是ArrayList要快
        • 一直删除末尾的元素也是ArrayList要快【不用复制移动位置】
        • 至于如果删除的是中间的位置的话(随机访问的话,LinkedList还是要遍历数组,遍历过程还是慢),看情况,如果在前端插入,LinkedList快
      • 但一般来说:增删多还是用LinkedList,因为上面的情况是极端的~
  2. Set集合的特点是:无序,元素不可重复

    • a. HashSet集合:底层数据结构是哈希表(是一个元素为链表的数组)

    • b. TreeSet集合

      • i. A:底层数据结构是红黑树(是一个自平衡的二叉树)
        • ii. B:保证元素的排序方式
    • c. LinkedHashSet集合:底层数据结构由哈希表和链表组成。

  3. Set集合的特点是:元素不可重复

ArrayList:可以动态增长和缩减的索引系列

LinkedList:可以在任何位置进行搞笑的插入和删除操作的有序序列

ArrayQueque:

3.集合Map

3.1各类介绍:

常用的类:

Todo

Map常用的方法:

  • 添加:

    • void map.put(key,value)添加元素,如果键是第一次存储,就直接存储元素,否则替换
  • 删除:

    • void clear():移除所有的键值队
      • void remove(object key):根据键来移除元素
  • 判断:

    • boolean containsKey(object key):判断集合是否包含指定的键
      • boolean containsValue(object value):判断是否包含指定的值
      • boolean isEmpty():判断集合是否为空
  • 获取:

    • Set entrySet():返回的是键值对象的集合
      • voud get(object key):根据键值获取值
      • Set ketSet():获取集合所有的键的集合
      • Collection values():获取集合中所有值得集合
  • 长度

    • int size():返回集合中键值对的对数

3.集合Map

3.2 HashMap:

  1. 介绍:

    • a. HashMap可以存储null;
    • b. 除了允许为null和同步之外,和hashtable没什么区别
    • c. 不保证有序
    • d. 初始量太高或者装载因子太低都对遍历不好
    • f. 当初始量*装载因子

4.Session和Cookie

Cookie的流程:浏览器访问服务器,如果服务器需要记录用户信息,就使用responce向浏览器发送一个cookie,浏览器就会把cookie保存起来。再次请求的时候会把cookie一起交给服务器。

cookieAPI

  • cookie类用于创建预估cookie对象
  • response接口中定义了一个addCookie方法,它用于在其响应头中增加getCookie方法,它用于获取客户端提交的cookie
  • request接口定义了getCookie的方法,它用于获取客户端提交的Cookie

常用Cookie方法

  • public Cookie(String name,String value)
  • setValue,getValue
  • setMaxAge,getMaxAge
  • setPath,getPath
  • setDomain,getDomain
  • getName

5.异常

5.1为什么有些方法要求抛出异常有些不需要?

会提示抛出异常错误是因为有些方法的类抛出了异常,所以要求使用时必须处理

6. IO流

6.1 IO流概念

IO流可简单理解为文件读取和输入所进行的数据传输。

根据数据类型分类,以字节流为优先,因为所有文件都是字节流保存或传输,且字符只在内存形成:

  1. 字节流
    • a. 以字节为单位
    • b. 处理所有的数据类型
    • c. 不用缓冲区
  2. 字符流
    • a. 以字符为单位
    • b. 只处理字符数据类型
    • c. 需要缓冲区

根据流向类型分类:

  1. 输入流:只读操作
  2. 输出流:只写操作

6.2 IO流

to be done

你可能感兴趣的:(java基础)