Java SE个人总结

Java基础

基本结构

项目(project) >> 包(package) >> 类(class) >> 属性与方法 >> 数据 >> 基本数据+引用数据(可看做普通对象)

常用关键字

类class 包package 导包import 继承extends 接口implements
当前对象this 父类super 方法无返回值void 主方法main
基本数据 byte short int long float double char Boolean
修饰符 private public protected default(意为默认,不用写)
。。。

常用符号

基本运算符 == > < + - && || ! ?: 。。。。

常见语法结构

选择语句 if(else),switch
循环语句 for(循环,遍历),do(while),while
基础排序 冒泡排序 选择排序 插入排序

面向对象

类的主体有属性与方法(行为),可以继承父类(单)与实现接口 (多)。万事万物皆对象,对象是类的实例化;类为泛指,存在单独的字节码(.class)。基础数据类型也有对应的包装类。面向对象即建立对象模型来编程。封装有利于对象的数据保护和修改使用。继承有效解决代码的冗余。多态可以在继承的基础上实现代码的灵活性和简洁写法,更贴近面向对象的编程理念。

重写与重载

重载为改变方法的参数列表,其余不变。重写用于继承时子类按需改变父类的方法内容。(抽象方法可能会强制重写)

构造器

类的实例化(创建对象)需要用到构造器,即构造方法,整体类似于方法,无需加返回值,方法名为类名。没写是会默认提供一个无参构造。

编程工具

常用为eclipse,idea等等。eclipse可直接解压使用,可快速部署,免费。idea为收费软件,有更新,有破解,需安装,界面友好。

数组

引用数据类型,变量中存的地址。常用冒泡,选择,插入进行排序。可扩展为多维数组,用地址一个套一个。数组长度和类型不可变,只有复制内容和重新创建才可以间接改变。

抽象类

允许有抽象方法,子类继承时要重写所有构造方法。否则还是抽象类。其他相同与普通类。可以继承普通类。

接口

接口为类似于又同于抽象类,只存在唯一常量和抽象方法,实现时需要重写所有抽象方法。不能继承普通类(除了Object),接口间的继承可以用多继承。

接口回调

回调是一种调用方式,来回调用的意思,即有接口,接口的调用者和接口的实现者。用接口声明来接受对象的回调。

内部类

可看做实际的成员。用法多变,作为局部内部类时,由于对象会一直存在,即调用局部变量时要是常量。可通过外部类来调用

Java SE常用类

Object

超类,所有类的直接或间接父类,没有继承时会默认继承Object。有一些重要方法toString,equals,hashCode,clone,notify,wait等等。大多数编程集成工具提供方法的自动重写。

String

字符串类,使用方便,每个字符串创建时为一个final类型的value[],故此为一个不可变的对象,故此不提倡做字符串的拼接。

常用方法

indexof(“a”) ; 查找某个字符串里面,第一次出现的a的下标
lastindexof(“a”); 最后一个出现的下标
split("#"); 根据指定的字符串拆分字符串为一个字符串数组
contains(“a”); 查找字符串是否包含a字符串;
String str = replaceAll(“x”,“y”); 将我们的x字符串替换成y字符串 可以用正则表达式
replace(“bb”,“aa”);
replaceFirst();替换第一个字符串(正则表达式)
trim();去除前后空格
toLowerCase 转成小写
toUpperCase 转成大写
equals 比较字符串的内容是否一致
equalsIgnoreCase 忽略大小写比较
substring(start); 从指定下标开始截取字符串
substring(start,end); 从指定下标开始,到end-1结束;
test.toCharArray() ; 得到指定字符串的字符数组
a.length(); 方法;得到字符串的长度;

StringBuilder

线程不安全,效率高。用于拼接字符串append。倒装字符串reverse。

StringBuffer

线程安全,效率低,其他同上。

包装数据类型

基本数据类型包装成类,现在的jdk默认会自动拆装箱。

BigDecimal

用于小数的运算。小数的乘除的运算时需要给定小数位和舍入方式,否则会输出异常。

日历时间

Date类,Calendar日历类,Local–jdk1.8新的获取日历时间。long System.currentTimeMillis()获取毫秒, LocalDateTime.now()获取当前日期时间。SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”)日历格式。(用于Date)

导包

绝大多数的类在使用时需要导包,以确定所用的类的位置。

集合

集合Collection主要有Set和List。List主要有LinkedList和ArrayList,为有序有下标可重复集合。Set主要有HashSet,TreeSet,为不可重复的集合。ArrayList为动态数组,可自行扩容,LinkedList为双向循环连接的结构。HashSet利用hashCode来去重(舍弃),底层为HashMap的key值,TreeSet可以自己写比较器来去重(舍弃),底层为TreeMap的key值;

Map

用于存储键值对,即key和value,主要有HashMap和TreeMap,key值用以确定数据的唯一性,不可重复,规则同Set(替换value),HashMap底层为动态数组,数据进行处理,同一格中多个数据用链表(6)+红黑树(8)存储。TreeMap底层为树。

异常

异常,存在异常可以捕捉后进行运行即使用trycatch,主要有Exception 和 RuntimeException。异常catch时不可以先捕捉父类,且可以同时捕捉级别的异常。可添加finally(必定执行)。子类抛出的异常不可比父类更广更宽泛。
throw和throws抛出的异常不会消失,只是转给调用的来处理。
error错误不可处理,直接终止程序。

线程

Thread类,线程为程序(进程)中独立于主线程(也是线程)之外且具有相同能力的运行线。有start方法,继承使用时需要重写run方法(干什么),实例化后通过start方法启动。Runnable和Callable为(带返回值,可用future接收)线程提供的任务实现接口(重写run方法)。线程的方法有start(就绪),sleep,join,setPriority(jvm优先级),yield(放弃)。

线程池

ExecutorService类,jdk提供多个现成的线程池(定长,缓存,单个,周期定长)和自定义ThreadPoolExecutor类,自定义中包含多个需要定义的数据:
1.corePoolSize - 线程池核心池的大小。我们线程池只要有任务了,创建线程,最少会创建这个这么多个
2.maximumPoolSize - 线程池的最大线程数。 有很多任务,理论上的创建最大线程的数量
3.keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
4.unit - keepAliveTime 的时间单位。
5.workQueue - 用来储存等待执行任务的队列。
6.threadFactory - 线程工厂。
7.handler - 拒绝策略 ; 当我的任务,在我们的任务队列里面,放不下的任务如何处理

多线程

一个进程中多个线程可能会访问修改同个数据或者资源,此时就会出现线程间对于公共资源访问的冲突问题,即线程安全问题。

保证线程安全

  1. 悲观锁PCC: synchronized(用对象来加锁),Lock(常用锁ReentrantLock,)等等。直接加上锁,保证安全。
  2. 乐观锁CAS:增加数据初始值的校验。
  3. 乐观锁的ABA:初始值校验时并不能保证数据的状态
  4. ABA的解决:增加数据资源的版本号用以校验数据的修改次数。

生产者消费者模式

一种设计模式,即分为生产者和消费者,是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗。虽然它们任务不同,但处理的资源是相同的,这体现的是一种线程间通信方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值