JAVA基础知识点

JAVA程序运行过程

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

JAVA语言的注释方法3种:

1.单行注释://
2.多行注释://
3.文档注释:/**…*/

JAVA中的变量名称可以由英文字母、数字、下划线(_)和美元符号($)组成。

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

1.以字母、下划线、java 文件下划线常量 java中如何给文字加下划线_java基础知识笔记、数字
3.不能为关键字

变量

1.局部变量:
定义在方法内或语句块内。 从属于方法或语句块。
使用之前,必须要手动初始化!
2.成员变量:
定义在类里面、方法外面。 从属于对象!
如果我们没有手动初始化成员变量,系统会自动初始化。
3.静态变量:
定义在类里面、方法外面、使用static修饰。 从属于类!
如果我们没有手动初始化静态变量,系统会自动初始化。初始化规则同成员变量。

数据类型:
  1. 基本数据类型
    a) 数字
    i. 整数:byte(1个字节) short(2个字节) int(4个字节,整型常量默认该类型) long(8个字节)
    ii. 浮点数:float(4个字节) double(8个字节,浮点常量默认为该类型)
    b) 字符 char(2个字节)
    c) 布尔 boolean(1位)
  2. 引用类型(4个字节)
    a) 数组
    b) 对象
    c) 接口
表达式
  1. 类型的自动提升
    如果有long,结果就是long。
    如果有double,结果就是double。
  2. 强制转型
运算符
  1. 赋值运算符(=)
    if(b=true) if(b) if(c=3) if(3==c)
  2. 算术运算符
  3. 关系运算符(==)
    常见错误写法: 1<a<3 正确写法 1<a&&a<3
  4. 逻辑运算符
    &&, ||, !
    &,| 3&4
  5. 位运算符
    &,|, <<(左移一位相当于乘以2),>>>(右移一位相当于除以2)
    3*4
  6. 扩展运算符
    +=,-=,*=,/=,%=
  7. 三目运算符
    (布尔表达式)?A:B
控制语句:
  1. 顺序结构
  2. 选择结构
    a) If
    b) If else
    c) If else if … else
    d) switch 多值选择 表达式:int或char/short/byte, 枚举
    break问题
  3. 循环结构
    a) while 先判断后执行
    b) for
    c) do while 先执行后判断
    break: 强制终止整个循环
    continue:结束本次循环,继续下一次!
面向对象基础

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

定义类:
public class 类名 {

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

//方法


//构造方法

}

构造方法:

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

方法的重载(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. 包含抽象方法的类,一定是抽象类。(抽象方法必须被子类重写)
  2. 抽象类不能被new。
  3. 抽象类可以包含:普通方法、成员变量、构造方法。
接口:
  1. interface
  2. 类实现接口:implements 可以实现多个接口
  3. 接口可以多继承
  4. 接口定义的一组规范!实现现实世界中这样的逻辑::如果你是…则必须能…
内存机制:

  1. 存放局部变量
  2. 不可以被多个线程共享
  3. 空间连续,速度快
  4. 存放对象
  5. 可以被多个线程共享
  6. 空间不连续,速度慢。但是灵活
    方法区
  7. 存放类的信息:代码、静态变量、字符串常量等
  8. 可以被多个线程共享
  9. 空间不连续,速度慢。但是灵活

垃圾回收器(GC Garbage Collection):

  1. 程序员不能调用垃圾回收器。但是可以通过System.gc()建议回收。
  2. finallize:一般也不用的调
递归算法:
  1. 递归头:什么时候不调用自己
  2. 递归体:什么时候调用自己
异常机制:
  1. try catch(先小后大) finally
  2. 声明抛出异常:throws
  3. 手动抛出异常:throw
  4. 自定义异常
    a) extends Exception或者他的子类
数组:
  1. 长度固定,不可变
  2. 所有元素的类型一致。
  3. 元素类型可以为任意类型
  4. 通过下标来引用相关元素。下标不能超过length-1
  5. 数组也是对象。数组的元素可以看做对象的成员变量。所以,成员变量自动初始化的规则也适用于数组元素。
  6. 多维数组:数组的元素是数组
  7. 数组的三种初始化的方式:
    a) 动态初始化
    b) 静态初始化: int[] a = {2,3,4}
    c) 默认初始化
  8. Arrays类:包含了对数组元素的排序、查找。(comparable接口)
  9. 算法:
    a) 冒泡排序
    b) 二分法
容器:
  1. Collection
    a) List(有序,可重复)
    i. ArrayList 底层用数组实现。线程不安全,效率高
    ii. LinkedList:底层用双向链表实现。线程不安全,效率高
    iii. Vector:底层用数组实现。线程安全,效率低
    b) Set(无序,不可重复)
    i. HashSet(内部是使用HashMap实现)
  2. Map
    采用“key-value”来存储我们数据。
    a) HashMap 线程不安全,效率高
    b) HashTable线程安全,效率低
  3. Iterator
    通过他,可以实现遍历容器中元素
  4. 泛型
  5. Collections工具类
常用类:
  1. 包装类
    实现了基本数据类型和对象的互相转化。
    自动装箱、自动拆箱
  2. String/StringBuilder/StringBuffer
    String:不可变字符序列
    StringBuilder:可变字符序列,线程不安全
    StringBuffer:可变字符序列,线程安全
  3. 时间:Date、DateFormat、Calendar
    Date:使用毫秒数来表示我们的时间概念。
    DateFormat:实现Date对象跟String对象的互相转化(根据指定格式互相转化;通过格式化字符来指定,比如:yyyy-MM-dd)
    Calendar: 日期类。实现了将人的日期的概念跟Date的互相转化
  4. File
    代表文件或者目录的一个抽象
  5. Math
    数学类
  6. 枚举
    如果我们要定义一组常量,建议使用枚举。
    不要学习和使用枚举的高级特性。
IO流:
  1. InputStream
    a) FileInputStream
    b) ByteArrayInputStream
    c) ObjectInputStream(对象的序列化,实现空接口:Serializable)
    d) DataInputStream
    e) BufferedInputStream
  2. OutputStream
    a) FileoutputStream
    b) ByteArrayOutputStream
    c) ObjectOutputStream
    d) DataOutputStream
    e) PrintStream
    f) BufferedOutputStream
  3. Reader
    a) FileReader
    b) InputStreamReader:转换流:将字节流转化成字符流
    c) BufferedReader
  4. Writer
    a) File Writer
    b) OutputStream Writer:转换流:将字节流转化成字符流
    c) Buffered Writer
多线程:
  1. 定义多线程类的两种方式:
    a) Extends Thread
    b) Implements Runnalbe
  2. 线程的状态:
    a) new
    b) 就绪状态(调用start方法后)
    c) 运行状态
    d) 阻塞状态
    i. sleep:不会释放持有的对象锁
    ii. join:等待另一个线程执行完成
    iii. wait:会释放持有的对象锁
    iv. synchronized。运行同步代码,但是没有获得指定对象的锁,于是进入指定对象的锁池等待。
    e) 终止
    i. 不建议使用:stop、destroy直接终止。
    ii. 建议通过boolean变量,正常终止线程运行。
  3. 线程的优先级
    a) 1-10. 默认是5.
    b) 优先级低只是意味着调用的概率低,并不是不被调用。
  4. 资源同步
    synchronized修饰方法、语句块
  5. 死锁
    建议不要同时持有多个对象的锁!
  6. “生产者-消费者”模式
网络编程:
  1. InetAddress:封装了IP和DNS,没有端口。
  2. InetSocketAddress:封装了IP和端口(1024以下的端口尽量不要使用,TCP端口跟UDP端口是分开的)
  3. URL:代表一个网络的资源
    a) openStream
  4. TCP通讯
    a) 特点:面向连接、安全、稳定。
    b) ServerSocket
    c) Socket
  5. UDP通信
    a) 特点:不面向连接。可能会丢数据。发送数据效率高。
    b) DatagramPacket:数据打包
    c) DategramSocket:数据发送和接收
GUI编程(AWT/SWING/SWT):
  1. 组件
    a) Component(普通组件、容器)
  2. 布局管理器
    a) FlowLayout
    b) BorderLayout
    c) CardLayout
    d) GridLayout
  3. 事件
    a) 事件对象:KeyEvent、MouseEvent….
    b) 事件源对象:组件
    c) 监听器(一般采用匿名内部类来定义):
    KeyListener KeyAdapter
    WindowListener WindowAdapter
    MouseListener MouseAdapter
    MouseMotionListener MouseMotionAdapter
  4. 菜单制作
    a) MenuBar
    b) Menu
    c) MemuItem
    d) CheckBoxMenuItem
    e) MenuShortCut 定义菜单项的快捷键
多媒体编程:
  1. 字体Font
  2. Graphics
  3. 做音视频处理:JMF

本文为java基础知识笔记,如有疑点请指正谢谢,参考了其他java资料所编写成。