java 基础,java,java总复习

JDK的安装:

  1. 下载、安装
  2. 配置环境变量
    1. path:.;%JAVA_HOME%\bin;
    2. JAVA_HOME:JDK的安装目录
    3. classpath

 

JDK和JRE和JVM:

 

JAVA程序运行过程:

  1. 编译javac :把java源文件编译成class字节码文件
  2. 运行java :运行class文件

 

 

标识符(给类、方法、变量起名)

  1. 字母(采用Unicode字符集)、下划线、$ 开头
  2. 其余部分可以是:字母(采用Unicode字符集)、下划线、$、数字
  3. 不能为关键字

 

变量:

  1. 局部变量

定义在方法内或语句块内。 从属于方法或语句块。

使用之前,必须要手动初始化!

  1. 成员变量(实例变量 field)

定义在类里面、方法外面。   从属于对象!

如果我们没有手动初始化成员变量,系统会自动初始化。初始化的规则如下:

数字:0,0.0   布尔:false  char:\u0000   引用类型:null

  1. 静态变量(类变量)

定义在类里面、方法外面、使用static修饰。  从属于类!

如果我们没有手动初始化静态变量,系统会自动初始化。初始化规则同成员变量。

 

 

数据类型:

  1. 基本数据类型
    1. 数字
      1. 整数:byte(1个字节)  short(2个字节)   int(4个字节,整型常量默认该类型)   long(8个字节)
      2. 浮点数:float(4个字节)  double(8个字节,浮点常量默认为该类型)
    2. 字符 char(2个字节)
    3. 布尔  boolean(1位)
  2. 引用类型(4个字节)
    1. 数组
    2. 对象
    3. 接口

表达式:

  1. 类型的自动提升

如果有long,结果就是long

如果有double,结果就是double

注: int a * double b   转换为int 的话(int)(a* b / (int) a*b 为错误转换

  1. 强制转型

 

运算符:

  1. 赋值运算符(=)

if(b=true)  if(b)       if(c=3)  if(3==c)

  1. 算术运算符

+ - * /

  1. 关系运算符(==)

常见错误写法: 1

  1. 逻辑运算符

&&, ||, !   

&,|  (不断路)  3&4

  1. 位运算符

&,|, <<(左移一位相当于乘以2),>>>(右移一位相当于除以2)

3*4

  1. 扩展运算符

+=,-=,*=,/=,%=

  1. 三目运算符

(布尔表达式)?A:B  A(trur) B(false)

 

控制语句:

  1. 顺序结构

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行。

  1. 选择结构
    1. If
    2. If else
    3. If else if … else
    4. switch  多值选择  表达式:int或char/short/byte, 枚举

break问题

  1. 循环结构
    1. while  先判断后执行
    2. for
    3. do  while  先执行后判断

break: 强制终止整个循环

continue:结束本次循环,继续下一次!

 

面向对象基础:

  1. 对象的进化史
    1. 基本数据类型阶段       数据少     无数据管理时代
    2. 数组                数据多了,将同类型的数据放到一起     弱管理
    3. 结构体          数据多了,数据复杂了。将不同类型的数据放到一起    强管理
    4. 对象    数据多了、类型复杂了、行为复杂了。将不同类型的数据放到一起 超强管理

对象和类:

对象是具体的,类是抽象的。  类也是一个模版,通过类这个模版我们也可以new

对象。

 

定义类:

public[微软用户1]   class  类名[微软用户2]  {

        

         //属性

         private  数据类型  属性名;   //建议增加相应的getter、setter方法

        

         //方法

        

 

         //构造方法

}

 

构造方法:

  1. 方法名必须跟类名保持一致
  2. 无返回类型
  3. 通过new来调用
  4. 无参构造器问题:
    1. 如果我们没有手动定义构造器,系统会自动为我们添加一个无参的构造器
    2. 如果我们自己定义了构造器,系统就不会为我们添加无参构造器
  5. 构造方法的第一句总是:super,即调用直接父类的构造方法。
    1. 有继承关系的构造方法调用的顺序

 

方法的重载(Overload)

两同(同一个类、同一个方法名)三不同(参数列表不同:;类型、个数、顺序)

返回值不同,构成重载吗?  No

形参名称不同,构成重在吗?  No

this:

         普通方法中,调用本方法的对象。

         构造方法中,正要初始化的对象。

         还可以用来,调用其他的构造方法

super:

static:

         用它修饰的变量和方法,就变成了静态变量和静态方法。从属于类。通过类名即可调用。实际存储于方法区中。

package:

         package必须位于非注释行第一句。

         包名:域名到这写

import:

         引入外部的类

Import  static :导入类的静态属性

final:

         修饰变量:常量(命名规范:全部大写,多个单词之间通过下划线隔开)

         修饰方法:不能被重写

         修饰类: 不能被继承

 

面向对象的三大特征:

封装

         通过private、default 、protected、public关键字实现属性或方法的封装。

         “高内聚,低耦合”

继承

         通过extends 。两个好处:

  1. 代码重用
  2. 通过继承实现对现实世界更加准确的建模

类只有单继承,没有像C++那样的多继承

 

方法重写(Override)的要点:

=:方法名保持一致

>=: 子类权限修饰符可以大于等于父类的。

<=, <=: 子类的返回值类型小于等于父类的类型。 子类声明异常类型不能超过父类的类型。

 

Object类:

  1. 是我们所有类的根基类
  2. toString
  3. equals、hashcode
  4. wait、notify、notifyAll

多态(polymorphism)

         三个必要条件:继承、方法的重写、父类引用指向子类对象

动态绑定、静态绑定:

 

抽象类:

  1. 包含抽象方法[微软用户3] 的类,一定是抽象类。
  2. 抽象类不能被new。
  3. 抽象类可以包含:普通方法、成员变量、构造方法。

 

接口:

  1. interface
  2. 类实现接口:implements    可以实现多个接口
  3. 接口可以多继承
  4. 接口定义的一组规范!实现现实世界中这样的逻辑::如果你是…则必须能…

 

内存机制:

  1. 存放局部变量
  2. 不可以被多个线程共享
  3. 空间连续,速度快

  1. 存放对象
  2. 可以被多个线程共享
  3. 空间不连续,速度慢。但是灵活

方法区

  1. 存放类的信息:代码、静态变量、字符串常量等
  2. 可以被多个线程共享
  3. 空间不连续,速度慢。但是灵活

 

垃圾回收器(GC   Garbage  Collection):

  1. 程序员不能调用垃圾回收器。但是可以通过System.gc()建议回收。
  2. finallize:一般也不用的调

 

递归算法:

  1. 递归头:什么时候不调用自己
  2. 递归体:什么时候调用自己

 

 

异常机制:

  1. try  catch(先小后大)  finally
  2. 声明抛出异常:throws
  3. 手动抛出异常:throw
  4. 自定义异常
    1. extends  Exception或者他的子类

 

数组:

  1. 长度固定,不可变
  2. 所有元素的类型一致。
  3. 元素类型可以为任意类型
  4. 通过下标来引用相关元素。下标不能超过length-1
  5. 数组也是对象。数组的元素可以看做对象的成员变量。所以,成员变量自动初始化的规则也适用于数组元素。
  6. 多维数组:数组的元素是数组
  7. 数组的三种初始化的方式:
    1. 动态初始化
    2. 静态初始化:  int[] a = {2,3,4}
    3. 默认初始化
  8. Arrays类:包含了对数组元素的排序[微软用户4] 、查找。
  9. 算法:
    1. 冒泡排序
    2. 二分法

 

容器:

  1. Collection
    1. List(有序,可重复)
      1. ArrayList 底层用数组实现。线程不安全,效率高
      2. LinkedList:底层用双向链表实现。线程不安全,效率高
      3. Vector:底层用数组实现。线程安全,效率低
    2. Set(无序,不可重复)
      1. HashSet(内部是使用HashMap实现)
  2. Map

采用“key-value”来存储我们数据。

    1. HashMap 线程不安全,效率高
    2. HashTable线程安全,效率低
  1. Iterator

通过他,可以实现遍历容器中元素

  1. 泛型
  2. Collections工具类

 

常用类:

  1. 包装类

实现了基本数据类型和对象的互相转化。

自动装箱、自动拆箱

  1. String/StringBuilder/StringBuffer

String:不可变字符序列

StringBuilder:可变字符序列,线程不安全

StringBuffer:可变字符序列,线程安全

  1. 时间:Date、DateFormat、Calendar

Date:使用毫秒数来表示我们的时间概念。

DateFormat:实现Date对象跟String对象的互相转化(根据指定格式[微软用户5] 互相转化)

Calendar: 日期类。实现了将人的日期的概念跟Date的互相转化

  1. File

代表文件或者目录的一个抽象

  1. Math

数学类

  1. 枚举

如果我们要定义一组常量,建议使用枚举。

不要学习和使用枚举的高级特性。

 

IO流:

  1. InputStream
    1. FileInputStream
    2. ByteArrayInputStream
    3. ObjectInputStream[微软用户6] 
    4. DataInputStream
    5. BufferedInputStream
  2. OutputStream
    1. FileoutputStream
    2. ByteArrayOutputStream
    3. ObjectOutputStream
    4. DataOutputStream
    5. PrintStream
    6. BufferedOutputStream
  3. Reader
    1. FileReader
    2. InputStreamReader:转换流:将字节流转化成字符流
    3. BufferedReader
  4. Writer
    1. File Writer
    2. OutputStream Writer:转换流:将字节流转化成字符流
    3. Buffered Writer

 

多线程:

  1. 定义多线程类的两种方式:
    1. Extends  Thread
    2. Implements  Runnalbe
  2. 线程的状态:
    1. new
    2. 就绪状态(调用start方法后)
    3. 运行状态
    4. 阻塞状态
      1. sleep:不会释放持有的对象锁
      2. join:等待另一个线程执行完成
      3. wait:会释放持有的对象锁
      4. synchronized。运行同步代码,但是没有获得指定对象的锁,于是进入指定对象的锁池等待。
    5. 终止
      1. 不建议使用:stop、destroy直接终止。
      2. 建议通过boolean变量,正常终止线程运行。
  3. 线程的优先级
    1. 1-10.  默认是5.
    2. 优先级低只是意味着调用的概率低,并不是不被调用。
  4. 资源同步

synchronized修饰方法、语句块

  1. 死锁

建议不要同时持有多个对象的锁!

  1. “生产者-消费者”模式

 [微软用户1]public class类名需要跟我们文件名相同

 [微软用户2]首字母大写

 [微软用户3]抽象方法必须被子类重写!

 [微软用户4]Comparable接口。

 [微软用户5]通过格式化字符来指定。比如:

yyyy-MM-dd 

 [微软用户6]对象的序列化。实现空接口:

Serializable

你可能感兴趣的:(Java,java基础,java复习)