JAVASE 学习回顾

JAVASE 学习回顾

java历史

java的诞生

诞生于1995年

2006年进军大数据领域 (Hadoop底层为java实现)

java的三大市场攻略

JavaSE -> java的基础

JavaME -> 安卓市场

JavaEE -> 企业及开发 (互联网应用领域)

java运行与开发环境

JDK (开发者工具包)

配置环境变量

找到我的电脑 -> 右键菜单 -> 属性 -> 高级系统设置 -> 系统环境变量

-> 找到Path菜单 -> 编辑 -> 新建环境变量 -> 复制粘贴安装好的jdk

路径-|| bin 添加到环境变量列

JRE(运行时环境)

HelloWorld

code

public class Hello{
    public static void main(Strng[] args){
        System.out.println("Hello world !");
    }
}

编译过程

  1. javac Hello.java -> 生成 class 字节码
  2. java Hello -> 运行文件

语言类型区别

编译型语言

运行编译型语言是相对于解释型语言存在的,编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码二进制)。像C/C++等都是编译型语言。

解释型语言

相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript / Perl /Shell等都是解释型语言。

java 是解释型+编译型的语言

java语言基础

注释

行内注释

// code already annotation
String hello = "Hello world!"; // 单行注释

多行注释

/*
public class Hello{
    public static void main(Strng[] args){
        System.out.println("Hello world !");
    }
}
*/
/* 多行注释 */

文档注释

/**
*@return null
*/
public class Hello{
    public static void main(Strng[] args){
        System.out.println("Hello world !");
    }
}

javadoc -> 生成帮助文档命令

标识符

关键字

关键字 作用含义
private 一种访问控制方式 : 私用模式
protected 一种访问控制方式 : 保护模式
public 一种访问控制方式 : 公有模式
abstract 表明或者成员方法具有抽象属性
class 定义类
extends 继承(表明一个类型是另一个类型的子类型)
final 说明最终属性(表明一个不能派生出子类成员方法不能被覆盖,成员域的属性值不可以被二次改变)
implements 一个类实现了一个给定的接口
interface 定义接口
native 声明一个方法是由计算机相关的语言(C/C++)实现的 java只是直接调用而已 native详解
new 创建新实例对象
static 表示(类、变量、方法)具有静态属性
strictfp 声明FP_strict(单精度或双精度浮点数)遵循 IEEE 754算数规范
synchronized 表示一段代码块成员方法需要同步执行 详解
transient 表示不用序列化的成员域 详解
volatile 表明2个,或者多个变量必须同步发生变化 详解
break 提前跳出一个代码块
continue 回到一个代码块的开始处
return 从成员方法中返回数据
do do-while 循环结构中
while 循环结构中
if 条件语句的引导词
else 条件语句的引导词,表示第一个条件不成立时,所执行的事情
for 循环结构的引导词
instanceof 来验证一个对象是否是一个指定类的实例对象 详解
switch 分支语句结构的引导语
case switch语句中,的一个分支语句
default switch语句中的默认分支
try 异常处理 : 抛出异常程序块
catch 异常处理 :捕获抛出的异常
throw 异常处理 :在当前所定义的方法中所有需要抛出的异常
import 表明要访问的类或包
package
boolean 八大数据类型之一 : 布尔类型
byte 八大数据类型之一 : 字节类型
char 八大数据类型之一 : 字符类型
double 八大数据类型之一 : 双精度浮点数类型
float 八大数据类型之一 : 单精度浮点类型
int 八大数据类型之一 : 整数类型
long 八大数据类型之一 : 长整数类型
short 八大数据类型之一 : 短整数类型
null
true 正确 (1)
false 错误 (0)
super 表示当前对象的父类型的引用,或者父类的构造方法
this 指当前实例对象的引用
void 声明当前方法没有返回值
goto 保留关键字 (无具体含义)
const 保留关键字 (无具体含义)

数据类型

基本数据类型

整数
// 长度由小到大排列
byte; 			// 字节数 : 1
short;			// 字节数 : 2
int; // 默认     // 字节数 : 4
long;			// 字节数 : 8

进制转换

  1. 2进制 : 0b
  2. 16进制: 0x
  3. 8进制 : 0
浮点数
// 长度由小到大排列
float;			// 字节数 : 4
double;/*默认*/  // 字节数 : 8  

金融计算问题

BigDecimal

金融计算问题常用数据类型

字符
char;        // 字节数 : 2

编码

  1. ASCII 编码 -> 对中文的存储量 : 1字节 (不推荐)
  2. Unicode 编码 -> 对中文的存储量 : 2字节 (不推荐)
  3. utf-8 编码 -> 对中文的存储量 : 3字节 (推荐)

Windows默认编码为GBK编码,可能会导致数据库、Tomcat等配置乱码

转义字符

  1. 'u0000'
  2. '' 退格
  3. ' ' 换行
  4. ' '
  5. ' ' 制表
  6. \
布尔值
boolean;    // 字节数 : 1位

条件判断

if(a) <==> if(a == true)

引用数据类型

接口

数组

类型转换

自动类型转换

低 - 转 - 高

高低含义

在数据类型中 : 以字节数为基准进行比较
在类中 :以子类父类作为标准比较

强制类型转换

高 - 转 - 低

低 = (低)高

// 人类
public class Person{
    public Person();
}
// 学生类
public class Student extends Person{
    public Student(){
        super();
    }
}
public class Test{
    public static main(String[] args){
        // 实例化人对象
        Person person = new Person();
        // 实例化学生对象
        Student student = new Student();
        // 强制类型转化
        student = (Student)person;
    }
}

变量和常量

变量

type varname = value;

作用域

  1. 类变量
  2. 实例变量
  3. 局部变量

常量

final MAX_A = 10;

必须大写常量

命名规范

  1. 见名知意
  2. 驼峰命名 (变量、方法)
  3. 类 :首字母大写 驼峰
  4. 常量 : 大写+下划线
  5. 不可用拼音命名

运算符

  1. 算数运算符

    +  -  *  /  ++  --
    
  2. 赋值运算符

    =
    
  3. 关系运算符

    >  <  >=  <=  ==  !=  instanceof
    
  4. 逻辑运算符

    &&  ||  !
    
  5. 位运算符

    &; // 与
    |; // 或
    ^; // 异或
    <<; // 右移
    >>; // 左移
    
  6. 条件运算符

    ? : // 三目运算符
    
  7. 扩展运算符

    +=  -=  *=  /=
    

    包机制

    域名倒写
    package
    import
    防止命名冲突

    JavaDoc

    JDK 帮助文档

    1. @author 作者
    2. @Version 版本
    3. @Since 说明Java类最早支持到那个版本
    4. @Param 参数
    5. @Return 返回值
    6. @Throws 异常名称

    流程控制

    Scanner

    用户交互输入

    顺序结构

    程序的默认结构,自下而上的执行

    选择结构

    IF单选泽结构

    IF ELSE 双选择结构

    IF ELSE IF ELSE 多选择结构

    switch

    JDK 7 支持了 switch 的 String 类型的选择条件

    case 的穿透现象

    指不加break会继续执行的效果

    default

    循环结构

    while

    尽量避免死循环

    do-while

    for

    九九乘法表

    foreach

    增强for循环

    break

    跳出循环

    continue

    终止当前循环,执行下一次循环

    带标签的 continue

    goto

    return

    结束方法的运行

    方法

    什么是方法

    一堆语句块的组合

    方法的定义

    修饰符 返回值类型 方法名 (参数名) {

    return 返回值;

    }

    方法的调用

    类名.方法

    对象.方法

    方法重载

    名字相同 参数列表不同

    命令行传递参数

    // 给main方法传递参数
    // args 会接受其数值
    // 方便之进行jvm调优时使用
    public class Test {
        public static void main(String[] args) {
            for (int i = 0; i<args.length; i++){
                System.out.println(args[i]);
            }
        }
    }
    

    可变长参数

    Java从JDK1.5以后,允许定义形参长度可变得参数从而允许为方法指定

    数量不确定的参数,一个方法只能有一个可变参数,且可变参数应为最后一个参数,调用时,如果同时能匹配固定参数和可变长参数的方法,会优先匹配固定参数方法,如果能同时和2个包含可变参数的方法想匹配,则编译会报错,因为编译器不知道该调用哪个方法

    case

    public class Test {
        public static void main(String[] args) {
            // 方法调用
            par("你好","世界","我来啦!");
        }
    
        // 参数长度可变的方法
        public static void par(String... strings) {
            for (String s : strings) {
                System.out.print(s);
            }
        }
    }
    

    递归

    自己调用自己,给自己一个出口

    面试问题

    数组

    数组的定义

    int[] lee = new int[5];
    int[] jia = {1,2,3,3,4,5};
    // 数组内必须是同一个类型
    

    数组使用

    1. 通过下标拿到值

      常见异常

      ArrayIndexOutofBounds ----> 数组下标越界异常

    2. 遍历数组

      foreach 遍历

    3. 二维数组

      int[][];
      
    4. Arrays工具类

    5. 排序算法

      西部开源首页 ———— bilibili

      冒泡排序
      选择排序
      插入排序
      快速排序
      归并排序
      希尔排序
      堆排序
      基数排序

    面向对象

    什么是对象

    类与对象

    类是对象的抽象(模板Class),对象是类的具体

    构造方法

    构造的重载

    1. 默认无参构造
    2. 如果手动定义了有参构造需要手动添加一个无惨构造方法

    new 对象

    栈存放引用

堆存放具体对象

封装

属性为私有的private属性,且设置get,set方法进行数据的访问

继承

extends 继承关键字

Object 是所有类的爹

子类会拥有父类的全部属性

方法重写

this

super

java是单继承,只能继承一个父类

多态

父类的引用指向子类的对象

public class Test {
    // 人类
    public static class Person{
        public Person(){ }
    }
    // 学生类
    public static class Student extends Person{
        public Student(){ super(); }
    }

    public static void main(String[] args) {
        Person person = new Student();
    }
}

instanceof 关键字,如果匹配,直接进行类型的转换,实现动态性

修饰符

public

protected

private

static

final

abstract

接口

inteface

约束只能定义方法名

子类实现接口后,必须重写其中的方法

只有一个方法的接口叫做函数式接口,可以使用lambda表达式简化

接口比抽象类更抽象

接口可以实现多个
// 接口的实现

// play接口
public interface Play {
    void start();
}

// test2类实现接口
public class Test2 implements Play {
    @Override
    public void start() {

    }
}

// test3实现接口
public class Test3 implements Play {
    @Override
    public void start() {

    }
}

内部类

局部内部类

静态内部类

匿名内部类(重点)

异常

Throwable

异常的和接口

Exception

Exception 捕获不到的异常,可以提升至 Throwable 捕获

Exception 不可以捕获 Error 的异常

运行时异常

1/0 异常

ClassNotFound

NullPoint

UnKownType

下标越界异常

……

检查型异常

Error

AWT错误
JVM错误

StackOverFLOW (堆栈溢出异常)

OutOfMemory (内存溢出)

五个关键字

try {}

异常代码块

catch () {}

先小后大原则

先捕获小的异常,逐渐的向外捕获大的异常

finally {}

无论如何最终执行的方案

throw

手动抛出异常

throws

方法抛出异常

自定义异常

继承 Exception 类即可实现自定义异常

常用类(JavaSE高级部分)

Object类

hashcode()
toString()
clone()
getClass()
notify()
wait()
equals()

String类

不可变性

不可能被改变的 final

public final class String{
 // code
 // …………
}
常见方法

length()

getBytes()

indexOf()

subString()

split()

trim()

实例case
String str = "a" + 1 + 2; // "a12"
String str = 'a' + 1 + 2; // 100 -> 97 + 1 + 2
String str = 1 + 2 + "a"; // "3a"
操作数据量较少时使用

StringBuffer类

可变长的 append()方法
多线程数据量较大
处理数据效率低,但安全

StringBuilder类

可变长的 append()方法 安全
单线程数据量较大
处理数据效率高,但不安全

Math类

常见的数学运算

Random类

生成随机数
UUID类

File类

创建文件
查看文件
修改文件
删除文件

包装类

自动装箱
自动拆箱

Date类

Date

创建时间

SimpleDateFormat

yyyy-MM-dd HH:mm:ss

Calendar

推荐使用

集合框架

Collection
List (有序的可以重复)

ArrayList(常用)

add()

remove()

contains()

size()

Iterator

LinkedList (链表) (常用)

getFirst()

getLast()

removeFirst()

addFirst()

Vector

Stack

Set (无序的不可以重复)

HashSet (常用)

TreeSet

Map
HashMap (超级常用) (用途及广) (高频面试考点)

JDK1.7

数组 + 链表

JDK1.8

数组 + 链表 + 红黑树

TreeMap
Collections

工具类

泛型

约束,避免类型转换之间的问题

IO流

字节流

输出

OutPutStream

输入

InPutStream

字符流

读入

Reader

写出

Writer

处理流

buffer

bufferInPutStream

bufferOutPutStream

bufferReader

bufferWriter

data

DataInputStream

DataOutPutStream

转换流

InputStreamReader

OutPutStreamWriter

Filter

filterInPutStream

filterOutPutStream

filterReader

filterWriter

print

PrintWriter

PrintStream

节点流

CharArrayReader

CharArrayWriter

CharArrayInPutStream

**CharArrayOutPutStream **

序列化

多线程

进程与线程
run() start()
线程的创建方式

Thread

  1. extends Runnable
  2. start() 本地方法,java无权调用,交给C调用

Runnable

  1. 函数式
  2. lambda表达式调用

Callable

  1. 可以有返回值
  2. JUC编程
静态代理
new Thread(Runnable).start();
// 将runnable类放入Thread中进行静态代理调用
Lambda表达式

函数式编程范畴

避免内部类定义过多,导致不易阅读

case

new Thread(() -> {
    System.out.start();
}).start();

尽量使用lambda表达式在么内部类进行调用的时候

线程的状态

新建状态

就绪

运行

阻塞

死亡

常用的方法

sleep

join

yield (礼让)

isLive

start

setPriority 设置优先级

interrupt 中断

线程同步

多个对象操作同一个资源,并发

队列+锁方式

Syschronized

  1. 同步方法
    • 存在弊端
    • 锁定了,太多的代码
  2. 同步代码块 (常用)
  3. 原理
    • 第一个线程进来拿到锁了,后面的线程就要排队了,直到当前的线程释放掉锁,后面的线程拿到锁才能进去
  4. 线程死锁
    • 两个人同时拿着对方的锁,造成了线程的死锁
    • 死锁的四个原则
      • 互斥
        • 一个资源,只能被一个进程使用,不可以被同时使用
      • 请求与保持
        • 对一个可能会崩溃的事件不会抓住不放,在适当的时机放开避免自己死锁
      • 不剥夺条件
        • 当一个进程获得到某个资源时,不可以将其资源强行拿走
      • 循环等待条件
    • 出现死锁时只需要破坏四原则中的某一个条件,即可解除死锁状态

Lock

  1. lock
  2. trylock
  3. unlock

Lock > 同步代码块 -> 同步方法

线程通讯

缓冲区 :(消息对列)

原文地址:https://www.cnblogs.com/JQ04/p/14987913.html