java基础(一)

1.基础语法

基本类型

8种 byte short int long float double char double

基本类型的字面值规则

  1. 整数字面值int
  2. byte short char比int范围小的整数,可以直接使用范围内的字面值
  3. 字面值后缀F-->float  L-->long  D-->double
  4. 字面值前缀0x-->16进制  0-->8进制  0b-->2进制  -\u-->char类      型16进制

基本类型的运算规则

  1. 运算结构的类型,和运算项中最大的类型一致
  2. byte short char比int范围小的整数,先自动转成int在运算
  3. 浮点数运算不精确,如果做精确运算需要使用BigDecimal对象  2-1.9=0.10000  4.35*100=434.9999999
  4. 浮点数的特殊值

Infinity无穷

运算符

+-*/ > >= < <= == != & && | || !

&位于 两个都是1结果才是1

|位或 两个都是0结构才是0

^相同是0,不同是1

~求反 1变0,0bian1

+= -+

方法

方法递归-->方法中调用自身

递归是一步一步简化问题,把问题简化成最简问题,在倒推求结果

流程控制

If

Switch  只能判断int及int以下的整数和string类型

   Break -->如果没有break,会穿透执行,遇到break会跳出

For  for循环嵌套

While 先判断后执行

Do-while 先执行后判断

循环的命名 在内层循环中,控制外层循环

  Outre:

For(){

For(){

  Break outer;

  Counter outer;

}

}

数组

创建数组的三种语法

  1. Int[] a=new int[5];
  2. Int[] a={1,2,1,3};
  3. a =new int[]{1,2,3,1};

数组长度不可变

  1. Length

数组遍历

二维数组

Int[][] a={{1,2,3},{1,2,1}};

数组的工具类

Arrays.toString()

Arrays.sort()
Arrays.binarySearch()
Arrays.copyOf()

2.面向对象

封装

类,对象,引用,构造方法,重载,

this.xxx/this.xxx() -->调用当前实例的成员,this是特殊引用,引用自己的地址

This() 调用重载的构造方法

继承

   作用:代码的重用

   创建子类实例:会先创建父类实例,然后在创建子类实例,然后绑定在一起整体作为一个实例

   调用成员时:会先找子类,子类没有在去找父类里的

   重写

   Super.xxx调用父类成员

   Super()调用父类的构造方法

多态

   作用:一致的类型,所有的子类型实例,都可以被当做父类型来处理

   类型转换: 向上转型   向下转型

   Instanceof 判断一个对象的真实类型,

对真实类型和父类型判断,都是true

抽象

  包含抽象方法的类必须是抽象方法

  抽象类中不一定有抽象方法

  抽象方法的作用:作为通用方法在父类中定义,要求子类必须实现这个方法

Final,static,访问控制符

   Final: 类(不能被继承),方法(不能被重写),常量(不可变)

   Static: 属于类不属于实例  

         静态代码块在类加载的时候立即执行

   Private 同类

   Default 同包

   Protectde 任意子类

   Public 任意

接口

   作用:结构设计工具,用来解耦合

内部类

   非静态内部类

   静态内部类

   局部内部类

   匿名内部类

3.基础API

Object

String 字符串字面值 存储在常量池中,可以重复使用不会重复创建

stringBuilder/stringbuffer 一般用来代替字符串做高效率操作

Integer/Double

BigDecimal

Date

SimpleDateFormat

集合

arrayList 数组存放数据,访问效率高,增删效率底

LinkedList 双向链表,两端效率高,如果只操作两端数据用双向链表

HashMap 哈希表,hashMap使用数组存放数据,初始长度16,翻倍增长

存放数据的运算过程

  Key.hashCode()获得键的哈希值计算下标

  新建Entry实例封装键值对

  把Entry实例放入i位置

     如果是空位置直接放入

     如果已经有数据,依次用equals()比较键是否想等

         有想等的键,会覆盖

          没有想等的键,用链表连接在一起

   加载因子\负载率到0.75

       容量翻倍

       所有数据重新执行哈希运算放入新数组

   Jdk1.8

       链表长度到8,装成红黑树

       树上的数据减少到6,转回链表

ListHashMap

   结合双向链表的哈希表

   有序的哈希表

concurrentHashMap

   允许多线程并发访问安全的哈希表

Iterator

collections

4. IO

 inputStream / OutputStream 字节流父类

FileInoutStream / FileOutputStream 读写文件

BuffereredinputStream / BufferOutputStream 缓冲流

ObjectInputStream / ObjectOutputStream 序列化与反序列化(必须实现SerialiZable接口)

Reader / Writer 字符流父类

inputStreamReader / OutputStreamWriter 字符编码转换流

BufferReader 提供readLine()方法可以读取一行字符

5. 线程

创建线程

   -继承Thread

  - 实现Runnable

 也可添加下面两点 1) 线程池 2) callable和future

线程常用方法

   -start()

   -join()

   -sleep()

   ......

synchronized

    --synchronized(对象){

       }     //争夺执行对象的锁

    --synchronize void f(){

      }     //争夺当前实例(this)的锁

   --static synchronized void f(){

    }       //争夺"类对象"的锁

生产者消费者模型

     线程间传递数据的方式

    线程之间使用一个数据集合来传递数据,生产者放入数据,消费者取出数据

等待和通知

    没有数据时.消费者进行等待,当生产者有数据是发送通知

    wait()

   notify()

   notifyAll()

   等待和通知必须是在synchronZnied内调用,等待和通知必须是同一个对象

线程工具

    线程池:

            ExecutorService--线程池

            Executors--辅助创建线程池的工具类

  callable/Future

            callable 任务有返回值,可以抛出异常

           future 是取餐条,当需要执行结果,使用取餐条获取结果

Lock

       ReentrantLock  可重入锁

       ReadWriterLock  读写锁

            对读锁优化,读锁是共享锁

volatile

    多线程环境下,频繁修改的数据应该添加这个关键字

     可见性

              不同cpu之间监听数据的修改,对数据修改可见

     禁用

            cpu可能对代码进行优化,会对代码顺序重新排序

              加volatile可以禁用指令重排优化

6. 网络

7. 反射

    框架底层的实现方式

    如果不做框架开发,很少会使用反射

    获取类对象

          A.class

          a1.getClass()

          Class.forName("aa.bb.cc")

      获取类的定义信息

             获取包名类型

             获取成员变量的定义信息

             获取构造方法的定义信息

             获取方法的定义信息

       反射创建实例

              c.newInstance()---创建实例,并执行无参构造

       反射调用成员

               反射调用成员变量

               反射调用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值